Python 实现 BP 神经网络测试 Momentum 函数
以下是一个简单的 Python 代码实现,使用 Momentum 函数进行 BP 神经网络训练和测试:
import numpy as np
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
# 初始化权重和偏置
self.W1 = np.random.randn(self.input_size, self.hidden_size)
self.b1 = np.random.randn(self.hidden_size)
self.W2 = np.random.randn(self.hidden_size, self.output_size)
self.b2 = np.random.randn(self.output_size)
# 初始化动量
self.vW1 = np.zeros((self.input_size, self.hidden_size))
self.vb1 = np.zeros(self.hidden_size)
self.vW2 = np.zeros((self.hidden_size, self.output_size))
self.vb2 = np.zeros(self.output_size)
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def forward(self, X):
# 向前传播
self.z1 = np.dot(X, self.W1) + self.b1
self.a1 = self.sigmoid(self.z1)
self.z2 = np.dot(self.a1, self.W2) + self.b2
y_hat = self.sigmoid(self.z2)
return y_hat
def backward(self, X, y, y_hat, lr, momentum):
# 反向传播
delta2 = (y - y_hat) * y_hat * (1 - y_hat)
dW2 = np.dot(self.a1.T, delta2)
db2 = np.sum(delta2, axis=0)
delta1 = delta2.dot(self.W2.T) * self.a1 * (1 - self.a1)
dW1 = np.dot(X.T, delta1)
db1 = np.sum(delta1, axis=0)
# 更新权重和偏置
self.vW2 = momentum * self.vW2 + lr * dW2
self.vb2 = momentum * self.vb2 + lr * db2
self.W2 += self.vW2
self.b2 += self.vb2
self.vW1 = momentum * self.vW1 + lr * dW1
self.vb1 = momentum * self.vb1 + lr * db1
self.W1 += self.vW1
self.b1 += self.vb1
def train(self, X, y, lr, momentum, epochs):
for i in range(epochs):
y_hat = self.forward(X)
self.backward(X, y, y_hat, lr, momentum)
def predict(self, X):
y_hat = self.forward(X)
return np.round(y_hat)
# 测试代码
X = np.array([[0,0,1], [0,1,1], [1,0,1], [1,1,1]])
y = np.array([[0], [1], [1], [0]])
nn = NeuralNetwork(3, 4, 1)
nn.train(X, y, lr=0.1, momentum=0.9, epochs=10000)
print(nn.predict(X))
原文地址: https://www.cveoy.top/t/topic/nu3B 著作权归作者所有。请勿转载和采集!