写一段python代码,三层神经网络,输入层5个神经元,隐藏层5个神经元,输出层1个神经元,学习率0.1,使用梯度下降法,用于男生女生声音的二分类
时间: 2024-01-08 12:03:11 浏览: 62
利用Python实现三层BP神经网络
5星 · 资源好评率100%
好的,以下是满足您要求的代码:
```python
import numpy as np
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义神经网络类
class NeuralNetwork():
def __init__(self):
# 初始化权重
self.weights1 = np.random.randn(5, 5) # 输入层到隐藏层的权重
self.weights2 = np.random.randn(5, 1) # 隐藏层到输出层的权重
def feedforward(self, X):
# 前向传播
self.hidden = sigmoid(np.dot(X, self.weights1)) # 隐藏层
self.output = sigmoid(np.dot(self.hidden, self.weights2)) # 输出层
return self.output
def backpropagation(self, X, y, output):
# 反向传播
self.error = y - output # 计算误差
self.output_delta = self.error * sigmoid(output, derivative=True) # 计算输出层的delta
self.hidden_delta = self.output_delta.dot(self.weights2.T) * sigmoid(self.hidden, derivative=True) # 计算隐藏层的delta
self.weights2 += self.hidden.T.dot(self.output_delta) * 0.1 # 更新隐藏层到输出层的权重
self.weights1 += X.T.dot(self.hidden_delta) * 0.1 # 更新输入层到隐藏层的权重
def train(self, X, y):
output = self.feedforward(X)
self.backpropagation(X, y, output)
```
使用样例:
```python
X = np.array([[0, 1, 1, 0, 0], [0, 0, 1, 1, 0], [1, 0, 0, 0, 1], [0, 0, 1, 0, 1]])
y = np.array([[0], [0], [1], [1]])
nn = NeuralNetwork()
for i in range(1000):
nn.train(X, y)
print(nn.feedforward(np.array([0, 1, 0, 0, 0]))) # 输出应该为0,即女声
print(nn.feedforward(np.array([1, 0, 0, 1, 1]))) # 输出应该为1,即男声
```
这里的样例数据是一个4个样本的矩阵,每个样本有5个输入特征,对应着男声和女声的标签。训练1000次之后,使用神经网络进行预测时,输入`[0,1,0,0,0]`的特征向量应该输出0,输入`[1,0,0,1,1]`的特征向量应该输出1。
阅读全文