以下是一个简单的 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))
Python 实现 BP 神经网络测试 Momentum 函数

原文地址: https://www.cveoy.top/t/topic/nu3B 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录