用python写一个三层神经网络
时间: 2023-06-02 07:04:15 浏览: 138
最简单的三层神经网络Matlab实现
5星 · 资源好评率100%
好的,我可以为您提供一些基本的三层神经网络的Python代码。首先,您需要导入所需的库:
```python
import numpy as np
import matplotlib.pyplot as plt
```
接下来,您可以定义一些超参数,例如神经元数量、学习速率和迭代次数:
```python
input_size = 2 # 输入层神经元数量
hidden_size = 4 # 隐藏层神经元数量
output_size = 1 # 输出层神经元数量
lr = 0.05 # 学习速率
epochs = 2000 # 迭代次数
```
然后,您可以生成一些输入和输出数据:
```python
# 生成随机输入数据
X = np.random.randint(0, 2, size=(1000, input_size))
# 使用异或逻辑生成输出数据
y = np.logical_xor(X[:,0], X[:,1]).reshape(-1, 1)
```
接下来是网络构建的代码:
```python
# 随机生成权重和偏置
w1 = np.random.randn(input_size, hidden_size)
b1 = np.zeros((1, hidden_size))
w2 = np.random.randn(hidden_size, output_size)
b2 = np.zeros((1, output_size))
# 定义sigmoid激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 迭代训练网络
for i in range(epochs):
# 前向传播
h = sigmoid(np.dot(X, w1) + b1)
y_pred = sigmoid(np.dot(h, w2) + b2)
# 计算损失
loss = np.square(y_pred - y).mean()
# 反向传播
dy_pred = 2 * (y_pred - y)
dw2 = np.dot(h.T, dy_pred * y_pred * (1 - y_pred))
db2 = np.sum(dy_pred * y_pred * (1 - y_pred), axis=0, keepdims=True)
dh = np.dot(dy_pred * y_pred * (1 - y_pred), w2.T)
dw1 = np.dot(X.T, dh * h * (1 - h))
db1 = np.sum(dh * h * (1 - h), axis=0)
# 更新权重和偏置
w2 -= lr * dw2
b2 -= lr * db2
w1 -= lr * dw1
b1 -= lr * db1
# 打印损失
if i % 100 == 0:
print("Epoch %d | Loss: %.4f" % (i, loss))
```
最后,您可以使用该网络对新数据进行预测:
```python
# 预测新数据
h = sigmoid(np.dot(X_test, w1) + b1)
y_pred = sigmoid(np.dot(h, w2) + b2)
```
这就是一个基本的三层神经网络的Python代码,希望对您有所帮助!
阅读全文