请写一段有三个输入单元,六个中间单元,一个输出单元的三层BP神经网络的代码
时间: 2023-02-20 15:27:58 浏览: 43
# 代码
import numpy as np
# 设置输入、中间、输出单元数
input_units = 3
hidden_units = 6
output_units = 1
# 设置学习率
learning_rate = 0.5
# 初始化输入层、隐藏层、输出层的权重
w_in = np.random.randn(input_units, hidden_units)
w_out = np.random.randn(hidden_units, output_units)
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义梯度下降函数
def grad_descent(x, y, w_in, w_out, learning_rate):
# 前向传播
z_in = np.dot(x, w_in)
z_out = np.dot(z_in, w_out)
a_out = sigmoid(z_out)
# 计算损失
loss = 0.5 * np.mean(np.square(y - a_out))
# 反向传播
delta_out = (y - a_out) * a_out * (1 - a_out)
delta_in = np.dot(delta_out, w_out.T) * z_in * (1 - z_in)
# 更新权重
w_out += learning_rate * np.dot(z_in.T, delta_out)
w_in += learning_rate * np.dot(x.T, delta_in)
return w_in, w_out, loss
# 训练模型
for i in range(100):
w_in, w_out, loss = grad_descent(x, y, w_in, w_out, learning_rate)
if (i+1) % 10 == 0:
print("第{}次迭代,损失为:{}".format(i+1, loss))