将下面的神经网络编程实现,其中隐含层和输出层的激沽函数都是sigmoid函数,不限编
时间: 2024-04-30 10:21:42 浏览: 89
以下是Python代码实现一个具有一个隐含层的神经网络,其激活函数为sigmoid函数:
```python
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(input_size, hidden_size)
self.b1 = np.zeros((1, hidden_size))
self.W2 = np.random.randn(hidden_size, output_size)
self.b2 = np.zeros((1, 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
self.a2 = self.sigmoid(self.z2)
return self.a2
def sigmoid_derivative(self, x):
return x * (1 - x)
def backward(self, X, y, output):
# 反向传播
self.error = y - output
self.delta2 = self.error * self.sigmoid_derivative(output)
self.a1_error = np.dot(self.delta2, self.W2.T)
self.delta1 = self.a1_error * self.sigmoid_derivative(self.a1)
# 更新权重矩阵和偏置向量
self.W1 += np.dot(X.T, self.delta1)
self.b1 += np.sum(self.delta1, axis=0, keepdims=True)
self.W2 += np.dot(self.a1.T, self.delta2)
self.b2 += np.sum(self.delta2, axis=0, keepdims=True)
def train(self, X, y, n_epochs):
# 训练神经网络
for i in range(n_epochs):
output = self.forward(X)
self.backward(X, y, output)
```
其中,`input_size`、`hidden_size`和`output_size`分别表示输入层、隐含层和输出层的节点数。`W1`、`b1`、`W2`和`b2`分别表示输入层到隐含层的权重矩阵、隐含层的偏置向量、隐含层到输出层的权重矩阵和输出层的偏置向量。`sigmoid`函数表示sigmoid激活函数,`sigmoid_derivative`函数表示sigmoid激活函数的导数。`forward`函数表示前向传播,`backward`函数表示反向传播,`train`函数表示训练神经网络。
阅读全文