- Python人工智慧教程
- 首頁
- Python人工智慧——基礎概念
- Python人工智慧——入門
- Python人工智慧——機器學習
- Python人工智慧——資料準備
- 監督學習:分類
- 監督學習:迴歸
- Python人工智慧——邏輯程式設計
- 無監督學習:聚類
- 自然語言處理
- Python人工智慧——NLTK包
- 時間序列資料分析
- Python人工智慧——語音識別
- Python人工智慧——啟發式搜尋
- Python人工智慧——遊戲
- Python人工智慧——神經網路
- 強化學習
- Python人工智慧——遺傳演算法
- Python人工智慧——計算機視覺
- Python人工智慧——深度學習
- Python人工智慧資源
- Python人工智慧——快速指南
- Python人工智慧——有用資源
- Python人工智慧——討論
Python人工智慧——神經網路
神經網路是平行計算裝置,試圖對大腦進行計算機建模。其主要目標是開發一個比傳統系統更快地執行各種計算任務的系統。這些任務包括模式識別和分類、逼近、最佳化和資料聚類。
什麼是人工神經網路(ANN)?
人工神經網路(ANN)是一種高效的計算系統,其核心思想借鑑了生物神經網路的類比。ANN 也被稱為人工神經系統、並行分散式處理系統和連線主義系統。ANN 獲取大量相互連線的單元,以某種模式允許它們之間進行通訊。這些單元,也稱為節點或神經元,是並行工作的簡單處理器。
每個神經元都透過連線鏈路與其他神經元連線。每個連線鏈路都與一個權重相關聯,該權重包含有關輸入訊號的資訊。這是神經元解決特定問題最有用的資訊,因為權重通常會激發或抑制正在傳輸的訊號。每個神經元都有其內部狀態,稱為啟用訊號。輸出訊號是在組合輸入訊號和啟用規則後產生的,可以傳送到其他單元。
如果您想詳細學習神經網路,可以訪問以下連結:人工神經網路。
安裝有用的包
為了在 Python 中建立神經網路,我們可以使用一個強大的神經網路包,稱為NeuroLab。它是一個包含基本神經網路演算法的庫,具有靈活的網路配置和 Python 的學習演算法。您可以在命令提示符下使用以下命令安裝此包:
pip install NeuroLab
如果您使用的是 Anaconda 環境,則使用以下命令安裝 NeuroLab:
conda install -c labfabulous neurolab
構建神經網路
在本節中,讓我們使用 NeuroLab 包在 Python 中構建一些神經網路。
基於感知器的分類器
感知器是 ANN 的構建塊。如果您想了解更多關於感知器的知識,可以訪問以下連結:人工神經網路
以下是構建簡單的基於感知器的神經網路分類器的 Python 程式碼的分步執行:
匯入必要的包,如下所示:
import matplotlib.pyplot as plt import neurolab as nl
輸入值。請注意,這是一個監督學習的例子,因此您也必須提供目標值。
input = [[0, 0], [0, 1], [1, 0], [1, 1]] target = [[0], [0], [0], [1]]
建立一個具有 2 個輸入和 1 個神經元的網路:
net = nl.net.newp([[0, 1],[0, 1]], 1)
現在,訓練網路。在這裡,我們使用 Delta 規則進行訓練。
error_progress = net.train(input, target, epochs=100, show=10, lr=0.1)
現在,視覺化輸出並繪製圖表:
plt.figure()
plt.plot(error_progress)
plt.xlabel('Number of epochs')
plt.ylabel('Training error')
plt.grid()
plt.show()
您可以看到以下圖表顯示了使用誤差度量進行的訓練進度:
單層神經網路
在這個例子中,我們建立一個單層神經網路,它由獨立的神經元作用於輸入資料以產生輸出組成。請注意,我們使用名為neural_simple.txt的文字檔案作為輸入。
匯入有用的包,如下所示:
import numpy as np import matplotlib.pyplot as plt import neurolab as nl
載入資料集,如下所示:
input_data = np.loadtxt(“/Users/admin/neural_simple.txt')
以下是我們將使用的資料。請注意,在此資料中,前兩列是特徵,後兩列是標籤。
array([[2. , 4. , 0. , 0. ],
[1.5, 3.9, 0. , 0. ],
[2.2, 4.1, 0. , 0. ],
[1.9, 4.7, 0. , 0. ],
[5.4, 2.2, 0. , 1. ],
[4.3, 7.1, 0. , 1. ],
[5.8, 4.9, 0. , 1. ],
[6.5, 3.2, 0. , 1. ],
[3. , 2. , 1. , 0. ],
[2.5, 0.5, 1. , 0. ],
[3.5, 2.1, 1. , 0. ],
[2.9, 0.3, 1. , 0. ],
[6.5, 8.3, 1. , 1. ],
[3.2, 6.2, 1. , 1. ],
[4.9, 7.8, 1. , 1. ],
[2.1, 4.8, 1. , 1. ]])
現在,將這四列分成 2 個數據列和 2 個標籤:
data = input_data[:, 0:2] labels = input_data[:, 2:]
使用以下命令繪製輸入資料:
plt.figure()
plt.scatter(data[:,0], data[:,1])
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('Input data')
現在,定義每個維度的最小值和最大值,如下所示:
dim1_min, dim1_max = data[:,0].min(), data[:,0].max() dim2_min, dim2_max = data[:,1].min(), data[:,1].max()
接下來,定義輸出層中的神經元數量,如下所示:
nn_output_layer = labels.shape[1]
現在,定義一個單層神經網路:
dim1 = [dim1_min, dim1_max] dim2 = [dim2_min, dim2_max] neural_net = nl.net.newp([dim1, dim2], nn_output_layer)
使用顯示的迭代次數和學習率訓練神經網路:
error = neural_net.train(data, labels, epochs = 200, show = 20, lr = 0.01)
現在,使用以下命令視覺化並繪製訓練進度:
plt.figure()
plt.plot(error)
plt.xlabel('Number of epochs')
plt.ylabel('Training error')
plt.title('Training error progress')
plt.grid()
plt.show()
現在,在上面的分類器中使用測試資料點:
print('\nTest Results:')
data_test = [[1.5, 3.2], [3.6, 1.7], [3.6, 5.7],[1.6, 3.9]] for item in data_test:
print(item, '-->', neural_net.sim([item])[0])
您可以找到如下所示的測試結果:
[1.5, 3.2] --> [1. 0.] [3.6, 1.7] --> [1. 0.] [3.6, 5.7] --> [1. 1.] [1.6, 3.9] --> [1. 0.]
您可以看到以下圖表作為迄今為止討論的程式碼的輸出:
多層神經網路
在這個例子中,我們建立一個多層神經網路,它包含多個層以提取訓練資料中的底層模式。這個多層神經網路將像一個迴歸器一樣工作。我們將根據等式:y = 2x2+8 生成一些資料點。
匯入必要的包,如下所示:
import numpy as np import matplotlib.pyplot as plt import neurolab as nl
根據上面提到的等式生成一些資料點:
min_val = -30 max_val = 30 num_points = 160 x = np.linspace(min_val, max_val, num_points) y = 2 * np.square(x) + 8 y /= np.linalg.norm(y)
現在,按如下方式重塑這個資料集:
data = x.reshape(num_points, 1) labels = y.reshape(num_points, 1)
使用以下命令視覺化並繪製輸入資料集:
plt.figure()
plt.scatter(data, labels)
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('Data-points')
現在,使用neurolab構建一個具有兩層隱藏層的神經網路,第一隱藏層有十個神經元,第二隱藏層有六個神經元,輸出層有一個神經元。
neural_net = nl.net.newff([[min_val, max_val]], [10, 6, 1])
現在使用梯度訓練演算法:
neural_net.trainf = nl.train.train_gd
現在訓練網路,目標是在上面生成的資料上學習:
error = neural_net.train(data, labels, epochs = 1000, show = 100, goal = 0.01)
現在,在訓練資料點上執行神經網路:
output = neural_net.sim(data) y_pred = output.reshape(num_points)
現在進行繪圖和視覺化任務:
plt.figure()
plt.plot(error)
plt.xlabel('Number of epochs')
plt.ylabel('Error')
plt.title('Training error progress')
現在我們將繪製實際輸出與預測輸出:
x_dense = np.linspace(min_val, max_val, num_points * 2)
y_dense_pred = neural_net.sim(x_dense.reshape(x_dense.size,1)).reshape(x_dense.size)
plt.figure()
plt.plot(x_dense, y_dense_pred, '-', x, y, '.', x, y_pred, 'p')
plt.title('Actual vs predicted')
plt.show()
作為上述命令的結果,您可以觀察到如下所示的圖表: