神經網絡是一種並行計算設備,試圖建立大腦的計算機模型。其主要目標是開發一個比傳統系統更快地執行各種計算任務的系統。這些任務包括模式識別和分類、近似、優化和數據聚類。
What is Artificial Neural Networks (ANN)
人工神經網絡(ANN)是一種高效的計算系統,其核心思想是借鑑生物神經網絡的類比。ann也被稱爲人工神經系統、並行分布式處理系統和連接系統。ANN獲取大量的單元集合,這些單元以某種模式相互連接,以允許它們之間的通信。這些單元,也稱爲節點或神經元,是並行操作的簡單處理器。
每個神經元通過一個連接鏈路與其他神經元相連。每個連接鏈路與具有關於輸入信號的信息的權重相關聯。對於神經元來說,這是解決特定問題最有用的信息,因爲重量通常會激發或抑制正在傳遞的信號。每個神經元都有其內部狀態,稱爲激活信號。將輸入信號和激活規則結合後產生的輸出信號可以發送到其它單元。
如果你想詳細研究神經網絡,那麼你可以按照連結−人工神經網絡。
Installing Useful Packages
爲了在Python中創建神經網絡,我們可以使用一個強大的神經網絡包neurlab。它是一個具有靈活網絡配置和Python學習算法的基本神經網絡算法庫。您可以在命令提示符下使用以下命令安裝此軟體包−
pip install NeuroLab
如果您使用的是Anaconda環境,請使用以下命令安裝NeuroLab−
conda install -c labfabulous neurolab
Building Neural Networks
在本節中,讓我們使用neurlab包在Python中構建一些神經網絡。
Perceptron based Classifier
感知器是人工神經網絡的基石。如果您想了解有關感知器的更多信息,可以按照連結&負;artificial\u neural\u network
下面是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()
您可以看到下面的圖表,其中顯示了使用錯誤度量的培訓進度;
Single - Layer Neural Networks
在這個例子中,我們正在創建一個單層神經網絡,它由作用於輸入數據以產生輸出的獨立神經元組成。注意,我們使用名爲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. ]])
現在,將這四列分爲兩個數據列和兩個標籤−
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.]
您可以看到下面的圖表,它是到目前爲止討論的代碼的輸出;
Multi-Layer Neural Networks
In this example, we are creating a multi-layer neural network that consists of more than one layer to extract the underlying patterns in the training data. This multilayer neural network will work like a regressor. We are going to generate some data points based on the equation: y = 2x2+8.
如圖所示進口必要的包裝;
import numpy as np import matplotlib.pyplot as plt import neurolab as nl
Generate some data point based on the above mentioned equation −
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')
現在,建立一個神經網絡,它有兩個隱藏層,第一個隱藏層中有neurlab和10個神經元,第二個隱藏層中有6個神經元,輸出層中有1個神經元。
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()
作爲上述命令的結果,您可以觀察如下所示的圖形;