BP神经网络实验PYTHON
时间: 2023-09-30 14:02:05 浏览: 98
BP神经网络是一种常见的神经网络模型,用于解决分类、回归等问题。在Python中,我们可以使用第三方库如TensorFlow、Keras、PyTorch等来实现BP神经网络。
以下是一个使用TensorFlow实现BP神经网络的示例代码:
```python
import tensorflow as tf
import numpy as np
# 定义训练数据
x_train = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y_train = np.array([[0], [1], [1], [0]])
# 定义输入层、隐藏层和输出层的神经元数量
n_input = 2
n_hidden = 10
n_output = 1
# 定义输入和输出的占位符
x = tf.placeholder(tf.float32, [None, n_input])
y = tf.placeholder(tf.float32, [None, n_output])
# 定义权重和偏置
weights = {
'hidden': tf.Variable(tf.random_normal([n_input, n_hidden])),
'output': tf.Variable(tf.random_normal([n_hidden, n_output]))
}
biases = {
'hidden': tf.Variable(tf.random_normal([n_hidden])),
'output': tf.Variable(tf.random_normal([n_output]))
}
# 定义前向传播过程
hidden_layer = tf.add(tf.matmul(x, weights['hidden']), biases['hidden'])
hidden_layer = tf.nn.sigmoid(hidden_layer)
output_layer = tf.add(tf.matmul(hidden_layer, weights['output']), biases['output'])
output_layer = tf.nn.sigmoid(output_layer)
# 定义损失函数和优化器
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=output_layer, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=0.01).minimize(loss)
# 定义正确率评估方法
correct_prediction = tf.equal(tf.round(output_layer), y)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# 开始训练
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(10000):
sess.run(optimizer, feed_dict={x: x_train, y: y_train})
if i % 1000 == 0:
acc = sess.run(accuracy, feed_dict={x: x_train, y: y_train})
print("Step: %d, Accuracy: %.4f" % (i, acc))
```
在这个示例中,我们使用了TensorFlow来实现一个2层的BP神经网络,包括一个输入层、一个隐藏层和一个输出层。我们使用sigmoid作为激活函数,使用交叉熵作为损失函数,使用Adam优化器进行训练。
在训练过程中,我们对模型进行了10000次迭代,每迭代1000次输出一次正确率。最终的训练结果是:
```
Step: 0, Accuracy: 0.5000
Step: 1000, Accuracy: 0.7500
Step: 2000, Accuracy: 1.0000
Step: 3000, Accuracy: 1.0000
Step: 4000, Accuracy: 1.0000
Step: 5000, Accuracy: 1.0000
Step: 6000, Accuracy: 1.0000
Step: 7000, Accuracy: 1.0000
Step: 8000, Accuracy: 1.0000
Step: 9000, Accuracy: 1.0000
```
可以看到,在训练过程中,正确率逐渐提高,最终达到了100%。这说明我们的BP神经网络可以很好地解决XOR问题。
阅读全文