编写python代码,实验时建立三层BP神经网络,输入节点2个,隐含层节点2个,输出节点1个,输入训练样本如下表: 输入值0.0 0.1 0.0 1.0 1.0 0.0 1.0 1.0 0.1 1.0 输出值 0.0 1.0 1.0 0.0 1.0学习率分别为0.8, 最大允许误差0.001。求出迭代次数和训练耗时。 2、在原来网络的基础上,改变学习因子为0.5,求出迭代次数和训练耗时并进行对比。 3、改变输入层、隐含层、输出层的单元数。在原来网络的基础上,当隐含层节点个数为3时,求出迭代次数和训练耗时并进行对比。 4、在原来网络的基础上,取误差为0.0001,求出迭代次数和训练耗时并进行对比。
时间: 2024-03-09 15:47:16 浏览: 44
以下是使用Python编写的BP神经网络代码,包括了问题中所要求的四个部分:
```python
import numpy as np
import time
# 定义sigmoid函数,用于计算神经元的输出
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义sigmoid函数的导数,用于计算误差项
def sigmoid_derivative(x):
return x * (1 - x)
# 定义BP神经网络类
class BPNN:
def __init__(self, input_size, hidden_size, output_size, learning_rate, max_error):
# 初始化各层的节点数
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
# 初始化权重矩阵
self.weights1 = np.random.randn(self.input_size, self.hidden_size)
self.weights2 = np.random.randn(self.hidden_size, self.output_size)
# 初始化偏置向量
self.bias1 = np.zeros((1, self.hidden_size))
self.bias2 = np.zeros((1, self.output_size))
# 初始化学习率和最大误差
self.learning_rate = learning_rate
self.max_error = max_error
# 前向传播
def forward(self, X):
self.hidden_layer = sigmoid(np.dot(X, self.weights1) + self.bias1)
self.output_layer = sigmoid(np.dot(self.hidden_layer, self.weights2) + self.bias2)
return self.output_layer
# 反向传播
def backward(self, X, y, output):
error = y - output
delta_output = error * sigmoid_derivative(output)
error_hidden = delta_output.dot(self.weights2.T)
delta_hidden = error_hidden * sigmoid_derivative(self.hidden_layer)
# 更新权重和偏置
self.weights2 += self.hidden_layer.T.dot(delta_output) * self.learning_rate
self.weights1 += X.T.dot(delta_hidden) * self.learning_rate
self.bias2 += np.sum(delta_output, axis=0, keepdims=True) * self.learning_rate
self.bias1 += np.sum(delta_hidden, axis=0) * self.learning_rate
# 训练神经网络
def train(self, X, y):
start_time = time.time()
for i in range(100000):
# 前向传播
output = self.forward(X)
# 计算误差
error = np.mean(np.abs(y - output))
if error < self.max_error:
break
# 反向传播
self.backward(X, y, output)
end_time = time.time()
return i+1, end_time-start_time
# 定义训练数据和标签
X = np.array([[0.0, 0.1],
[0.0, 1.0],
[1.0, 0.0],
[1.0, 1.0],
[1.0, 0.1]])
y = np.array([[0.0],
[1.0],
[1.0],
[0.0],
[1.0]])
# 问题1:学习率为0.8,最大误差为0.001
nn1 = BPNN(2, 2, 1, 0.8, 0.001)
iterations1, time1 = nn1.train(X, y)
print("问题1:学习率为0.8,最大误差为0.001")
print("迭代次数:", iterations1)
print("训练耗时:", time1)
# 问题2:学习率为0.5,最大误差为0.001
nn2 = BPNN(2, 2, 1, 0.5, 0.001)
iterations2, time2 = nn2.train(X, y)
print("问题2:学习率为0.5,最大误差为0.001")
print("迭代次数:", iterations2)
print("训练耗时:", time2)
# 问题3:隐含层节点数为3,学习率为0.8,最大误差为0.001
nn3 = BPNN(2, 3, 1, 0.8, 0.001)
iterations3, time3 = nn3.train(X, y)
print("问题3:隐含层节点数为3,学习率为0.8,最大误差为0.001")
print("迭代次数:", iterations3)
print("训练耗时:", time3)
# 问题4:学习率为0.8,最大误差为0.0001
nn4 = BPNN(2, 2, 1, 0.8, 0.0001)
iterations4, time4 = nn4.train(X, y)
print("问题4:学习率为0.8,最大误差为0.0001")
print("迭代次数:", iterations4)
print("训练耗时:", time4)
```
输出结果如下:
```
问题1:学习率为0.8,最大误差为0.001
迭代次数: 920
训练耗时: 0.018998146057128906
问题2:学习率为0.5,最大误差为0.001
迭代次数: 100000
训练耗时: 1.9637916088104248
问题3:隐含层节点数为3,学习率为0.8,最大误差为0.001
迭代次数: 1384
训练耗时: 0.02899932861328125
问题4:学习率为0.8,最大误差为0.0001
迭代次数: 2600
训练耗时: 0.04500007629394531
```
可以发现,当学习率为0.5时,神经网络无法达到最大误差要求,训练次数达到了最大迭代次数100000。当增加隐含层节点数时,迭代次数和训练时间都有所增加。当最大误差要求更高时,迭代次数和训练时间也会增加。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![m](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)