欢迎访问宙启技术站
智能推送

使用Python实现Sigmoid函数的反向传播算法

发布时间:2023-12-11 04:52:10

Sigmoid函数是一种常用的激活函数,它将输入值映射到0和1之间。在神经网络中,Sigmoid函数常用于解决二分类问题。它的定义如下:

sigmoid(x) = 1 / (1 + e^(-x))

反向传播算法(Backpropagation algorithm)是神经网络中用来更新权重和偏置的一种优化方法。它通过计算损失函数对每个权重和偏置的偏导数来调整这些参数。对于Sigmoid函数,我们需要计算它的导数,以便在反向传播中使用。

以下是使用Python实现Sigmoid函数的反向传播算法的代码示例:

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    return sigmoid(x) * (1 - sigmoid(x))

class NeuralNetwork:
    def __init__(self):
        np.random.seed(0)
        self.weights = np.random.rand(2, 1)
        self.bias = np.random.rand(1, 1)

    def feedforward(self, x):
        return sigmoid(np.dot(x, self.weights) + self.bias)

    def backpropagation(self, x, y, learning_rate):
        # Forward pass
        output = self.feedforward(x)

        # Calculate error
        error = y - output

        # Calculate gradient
        d_weights = np.dot(x.T, error * sigmoid_derivative(output))
        d_bias = np.sum(error * sigmoid_derivative(output))

        # Update weights and bias
        self.weights += learning_rate * d_weights
        self.bias += learning_rate * d_bias

# Example usage
x = np.array([[0.5, 0.3], [0.2, 0.7], [0.4, 0.5], [0.3, 0.8]])
y = np.array([[1], [0], [1], [0]])

nn = NeuralNetwork()

for i in range(1000):
    nn.backpropagation(x, y, 0.1)

# Test the trained model
test_input = np.array([[0.6, 0.4]])
output = nn.feedforward(test_input)
print(output)

在上面的代码中,我们首先定义了Sigmoid函数以及它的导数。接着我们创建了一个简单的神经网络类,该类包含了权重和偏置,并且定义了前向传播和反向传播方法。

在反向传播方法中,我们首先进行了前向传播计算,然后计算输出与期望输出之间的误差。接着利用误差和Sigmoid函数的导数来计算梯度。最后,我们使用学习率来更新权重和偏置。

在使用例子中,我们创建了一个包含4个样本的输入矩阵x和相应的输出矩阵y。我们将这些数据传入神经网络,并使用反向传播算法进行训练。训练完成后,我们使用一个测试样本来检查神经网络的输出。

以上就是使用Python实现Sigmoid函数的反向传播算法的例子。注意,这只是一个简单的示例,实际的神经网络可能包含更多的隐层和更复杂的结构。