使用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函数的反向传播算法的例子。注意,这只是一个简单的示例,实际的神经网络可能包含更多的隐层和更复杂的结构。
