利用Python创建一个输入层含有2个节点、隐藏层含有2个节点、输出层含有1个节点的神经网络。[1]利用随机函数初始化所有的权重和偏置; [2]使用S型激活函数; [3]可视化实现epoch1000次后,loss值的变化曲线。
时间: 2023-06-15 08:03:48 浏览: 98
python实现神经网络,从入门到精通,CNN卷积神经网络,循环神经网络网络 使用pytorch库实现
好,这里是创建一个输入层含有2个节点、隐藏层含有2个节点、输出层含有1个节点的神经网络的代码:
```python
import numpy as np
# sigmoid 激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 初始化权重和偏置
def init_network():
network = {}
network['W1'] = np.random.rand(2, 2)
network['b1'] = np.random.rand(1, 2)
network['W2'] = np.random.rand(2, 1)
network['b2'] = np.random.rand(1, 1)
return network
# 前向传播
def forward(network, x):
W1, b1, W2, b2 = network['W1'], network['b1'], network['W2'], network['b2']
a1 = np.dot(x, W1) + b1
z1 = sigmoid(a1)
a2 = np.dot(z1, W2) + b2
y = sigmoid(a2)
return y
# 计算损失函数值
def loss(network, x, t):
y = forward(network, x)
return 0.5 * np.sum((y - t) ** 2)
# 可视化损失函数值的变化曲线
import matplotlib.pyplot as plt
def plot_loss(loss_list):
x = np.arange(len(loss_list))
plt.plot(x, loss_list)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()
# 训练神经网络
def train(network, x, t, learning_rate=0.1, epochs=1000):
loss_list = []
for i in range(epochs):
# 前向传播
y = forward(network, x)
# 反向传播
delta2 = (y - t) * y * (1 - y)
delta1 = np.dot(delta2, network['W2'].T) * sigmoid(a1) * (1 - sigmoid(a1))
# 更新权重和偏置
network['W2'] -= learning_rate * np.dot(z1.T, delta2)
network['b2'] -= learning_rate * np.sum(delta2, axis=0)
network['W1'] -= learning_rate * np.dot(x.T, delta1)
network['b1'] -= learning_rate * np.sum(delta1, axis=0)
# 记录损失函数值
loss_list.append(loss(network, x, t))
plot_loss(loss_list)
# 测试神经网络
network = init_network()
x = np.array([[1, 2]])
t = np.array([[0.5]])
train(network, x, t)
```
在这个代码中,我们使用 `numpy` 库来实现了神经网络的前向传播、反向传播和权重更新等步骤。同时,我们还使用 `matplotlib` 库可视化了损失函数值的变化曲线。如果想要运行这个代码,可以把它复制到一个 `.py` 文件中,然后在命令行中运行 `python 文件名.py` 即可。
阅读全文