python人工智能算法之人工神經網(wǎng)絡
人工神經網(wǎng)絡
(Artificial Neural Network,ANN)是一種模仿生物神經網(wǎng)絡的結構和功能的數(shù)學模型,其目的是通過學習和訓練,在處理未知的輸入數(shù)據(jù)時能夠進行復雜的非線性映射關系,實現(xiàn)自適應的智能決策??梢哉f,ANN是人工智能算法中最基礎、最核心的一種算法。
ANN模型的基本結構包含輸入層、隱藏層和輸出層。輸入層接收輸入數(shù)據(jù),隱藏層負責對數(shù)據(jù)進行多層次、高維度的變換和處理,輸出層對處理后的數(shù)據(jù)進行輸出。ANN的訓練過程是通過多次迭代,不斷調整神經網(wǎng)絡中各層的權重,從而使得神經網(wǎng)絡能夠對輸入數(shù)據(jù)進行正確的預測和分類。
人工神經網(wǎng)絡算法示例
接下來看看一個簡單的人工神經網(wǎng)絡算法示例:
import numpy as np
class NeuralNetwork():
def __init__(self, layers):
"""
layers: 數(shù)組,包含每個層的神經元數(shù)量,例如 [2, 3, 1] 表示 3 層神經網(wǎng)絡,第一層 2 個神經元,第二層 3 個神經元,第三層 1 個神經元。
weights: 數(shù)組,包含每個連接的權重矩陣,默認值隨機生成。
biases: 數(shù)組,包含每個層的偏差值,默認值為 0。
"""
self.layers = layers
self.weights = [np.random.randn(a, b) for a, b in zip(layers[1:], layers[:-1])]
self.biases = [np.zeros((a, 1)) for a in layers[1:]]
def sigmoid(self, z):
"""Sigmoid 激活函數(shù)."""
return 1 / (1 + np.exp(-z))
def forward_propagation(self, a):
"""前向傳播."""
for w, b in zip(self.weights, self.biases):
z = np.dot(w, a) + b
a = self.sigmoid(z)
return a
def backward_propagation(self, x, y):
"""反向傳播."""
nabla_w = [np.zeros(w.shape) for w in self.weights]
nabla_b = [np.zeros(b.shape) for b in self.biases]
a = x
activations = [x]
zs = []
for w, b in zip(self.weights, self.biases):
z = np.dot(w, a) + b
zs.append(z)
a = self.sigmoid(z)
activations.append(a)
delta = self.cost_derivative(activations[-1], y) * self.sigmoid_prime(zs[-1])
nabla_b[-1] = delta
nabla_w[-1] = np.dot(delta, activations[-2].transpose())
for l in range(2, len(self.layers)):
z = zs[-l]
sp = self.sigmoid_prime(z)
delta = np.dot(self.weights[-l+1].transpose(), delta) * sp
nabla_b[-l] = delta
nabla_w[-l] = np.dot(delta, activations[-l-1].transpose())
return (nabla_w, nabla_b)
def train(self, x_train, y_train, epochs, learning_rate):
"""訓練網(wǎng)絡."""
for epoch in range(epochs):
nabla_w = [np.zeros(w.shape) for w in self.weights]
nabla_b = [np.zeros(b.shape) for b in self.biases]
for x, y in zip(x_train, y_train):
delta_nabla_w, delta_nabla_b = self.backward_propagation(np.array([x]).transpose(), np.array([y]).transpose())
nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]
nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
self.weights = [w-(learning_rate/len(x_train))*nw for w, nw in zip(self.weights, nabla_w)]
self.biases = [b-(learning_rate/len(x_train))*nb for b, nb in zip(self.biases, nabla_b)]
def predict(self, x_test):
"""預測."""
y_predictions = []
for x in x_test:
y_predictions.append(self.forward_propagation(np.array([x]).transpose())[0][0])
return y_predictions
def cost_derivative(self, output_activations, y):
"""損失函數(shù)的導數(shù)."""
return output_activations - y
def sigmoid_prime(self, z):
"""Sigmoid 函數(shù)的導數(shù)."""
return self.sigmoid(z) * (1 - self.sigmoid(z))
使用以下代碼示例來實例化和使用這個簡單的神經網(wǎng)絡類:
x_train = [[0, 0], [1, 0], [0, 1], [1, 1]]
y_train = [0, 1, 1, 0]
# 創(chuàng)建神經網(wǎng)絡
nn = NeuralNetwork([2, 3, 1])
# 訓練神經網(wǎng)絡
nn.train(x_train, y_train, 10000, 0.1)
# 測試神經網(wǎng)絡
x_test = [[0, 0], [1, 0], [0, 1], [1, 1]]
y_test = [0, 1, 1, 0]
y_predictions = nn.predict(x_test)
print("Predictions:", y_predictions)
print("Actual:", y_test)
輸出結果:
Predictions: [0.011602156431658403, 0.9852717774725432, 0.9839448924887225, 0.020026540429992387]
Actual: [0, 1, 1, 0]
總結:
優(yōu)點:
- 非線性能力強:ANN能夠處理非線性關系,能夠識別和預測非線性關系的數(shù)據(jù),如圖像和語音等數(shù)據(jù)
- 自適應性高:ANN能夠自動學習數(shù)據(jù)特征并進行調整,能夠適應環(huán)境的變化
- 學習能力強:ANN能夠通過對大量數(shù)據(jù)的學習,對未知數(shù)據(jù)進行預測和分類
- 可并行化處理:ANN的計算過程可以并行處理,能夠在短時間內處理大量數(shù)據(jù)
- 誤差容忍度高:ANN在計算中允許存在一定的誤差,可容忍部分數(shù)據(jù)的失真和丟失
缺點:
- 數(shù)據(jù)需求量大:為了提高預測和分類準確性,ANN需要大量數(shù)據(jù)進行學習和訓練,如果數(shù)據(jù)量不足,預測和分類準確性將下降
- 計算量大:ANN的計算量很大,需要強大的計算設備進行處理
- 參數(shù)設置難度大:ANN的每個層級有多個參數(shù),根據(jù)不同的數(shù)據(jù)需求,需要設置不同的參數(shù),選擇最優(yōu)參數(shù)需要進行大量的試驗和測試
- 可解釋性差:由于其內部結構非常復雜,ANN的結果難以解釋,難以知道決策是如何得出的
- 過擬合現(xiàn)象:為了達到高精度,ANN有可能會依賴于過于細節(jié)的特征,導致對新數(shù)據(jù)的泛化性能降低
目前,人工神經網(wǎng)絡在圖像識別、語音識別、自然語言處理、機器翻譯等領域取得了重要的應用成果。作為一種高度靈活、強大的人工智能算法,ANN在未來的發(fā)展中具有廣闊的應用前景。好了,關于人工神經網(wǎng)絡就簡單介紹到這里,希望對大家有所幫助!
以上就是python人工智能算法之人工神經網(wǎng)絡的詳細內容,更多關于python人工智能算法神經網(wǎng)絡的資料請關注腳本之家其它相關文章!
相關文章
pycharm+django創(chuàng)建一個搜索網(wǎng)頁實例代碼
這篇文章主要介紹了pycharm+django創(chuàng)建一個搜索網(wǎng)頁實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
Python函數(shù)參數(shù)分類使用與新特性詳細分析講解
在聲明函數(shù)的時候,一般會根據(jù)函數(shù)所要實現(xiàn)的功能來決定函數(shù)是否需要參數(shù)。在多數(shù)情況下,我們聲明的函數(shù)都會使用到參數(shù),這篇文章主要介紹了Python函數(shù)參數(shù)2023-01-01

