tensorflow实现一个3层的BP神经网络
时间: 2024-02-25 15:59:34 浏览: 23
好的,以下是一个基于TensorFlow实现的3层BP神经网络的代码:
```python
import tensorflow as tf
# 定义神经网络的参数
input_size = 784
hidden_size = 256
output_size = 10
learning_rate = 0.01
# 定义占位符
x = tf.placeholder(tf.float32, [None, input_size])
y = tf.placeholder(tf.float32, [None, output_size])
# 定义权重和偏置
W1 = tf.Variable(tf.random_normal([input_size, hidden_size]))
b1 = tf.Variable(tf.random_normal([hidden_size]))
W2 = tf.Variable(tf.random_normal([hidden_size, output_size]))
b2 = tf.Variable(tf.random_normal([output_size]))
# 定义模型
hidden_layer = tf.nn.relu(tf.matmul(x, W1) + b1)
output_layer = tf.matmul(hidden_layer, W2) + b2
# 定义损失函数
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=output_layer, labels=y))
# 定义优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)
# 定义准确率计算方法
correct_pred = tf.equal(tf.argmax(output_layer, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
# 初始化变量
init = tf.global_variables_initializer()
# 开始训练模型
with tf.Session() as sess:
sess.run(init)
for i in range(1000):
batch_x, batch_y = # 从数据集中取出batch_size个数据
sess.run(optimizer, feed_dict={x: batch_x, y: batch_y})
if i % 100 == 0:
acc = sess.run(accuracy, feed_dict={x: batch_x, y: batch_y})
print("Step " + str(i) + ", Accuracy= {:.3f}".format(acc))
```
这段代码实现了一个包含一个输入层、一个隐藏层和一个输出层的BP神经网络,其中输入层大小为784,即MNIST数据集中的图片像素数;隐藏层大小为256,输出层大小为10,即MNIST数据集中的数字类型。通过定义损失函数和优化器,使用梯度下降算法进行模型训练。