神经网络代码实现(TensorFlow版)(python)

本文通过使用TensorFlow框架实现双层神经网络,对MNIST数据集进行分类任务。文章详细介绍了网络结构的设计,包括两层隐层的神经元数量、权重与偏置的初始化,以及使用Sigmoid激活函数和Softmax交叉熵损失函数。通过20个训练周期,展示了训练和测试的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文使用Tensorflow框架来实现双层神经网络,对数据进行处理,实现分类任务。可以通过代码对神经网络以及TensorFlow进行一定的了解,方便初学者能够更好的理解。

代码如下:

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
# 调用数据集
mnist = input_data.read_data_sets('data/', one_hot=True)

# 定义参数
n_hidden_1 = 256  # 第一层隐层的神经元个数为256
n_hidden_2 = 128  # 第二次隐层的神经元个数为128
n_input = 784  # 图像为28*28 =784 大小
n_classes = 10  # 10分类任务,输出为10

# 占位符 输入x和输出y
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])

# 初始化权值和偏差
stddev = 0.1  # 样本标准差
weights = {
    'w1': tf.Variable(tf.random_normal([n_input, n_hidden_1], stddev=stddev)),
    'w2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2], stddev=stddev)),
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes], stddev=stddev))
}
biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}
print("NETWORK READY")

##################################################前向传播#########################################################
# 计算前向传播
def multilayer_perceptron(_x, _weights, _biases):
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(_x, _weights['w1']), _biases['b1']))
    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['w2']), _biases['b2']))
    return tf.matmul(layer_2, _weights['out']) + _biases['out']

#################################################反向传播###########################################################
# 预测值
pred = multilayer_perceptron(x, weights, biases)
# 交叉熵损失函数
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=pred))
# 优化器 梯度下降
optm = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
# 准确率
corr = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
# 转化float类型,计算出精度
accr = tf.reduce_mean(tf.cast(corr, "float"))



# 全局变量初始化
init = tf.global_variables_initializer()
# 初始化参数
training_epochs = 20
batch_size = 100
display_step = 4
avg_cost = 0
# batch_xs, batch_ys = mnist.train.next_batch(batch_size)
# total_batch = int(mnist.train.num_examples / batch_size)
with tf.Session() as sess:
    sess.run(init)

    for epoch in range(training_epochs):
        total_batch = int(mnist.train.num_examples/batch_size)
        for i in range(total_batch):
            batch_xs, batch_ys = mnist.train.next_batch(batch_size)
            feeds = {x: batch_xs, y: batch_ys}
            sess.run(optm, feed_dict=feeds)
            avg_cost += sess.run(cost, feed_dict=feeds)
        avg_cost = avg_cost / total_batch

        # 显示
        if (epoch+1) % display_step == 0:
            print("Epoch:%03d/%03d cost: %.9f" % (epoch, training_epochs, avg_cost))
            feeds = {x: batch_xs, y: batch_ys}
            train_acc = sess.run(accr, feed_dict=feeds)
            print("TRAIN ACCURACY: %.3f" % (train_acc))
            feeds = {x: mnist.test.images, y: mnist.test.labels}
            test_acc = sess.run(accr, feed_dict=feeds)
            print("TEST ACCURACY: %.3f" % (test_acc))

print("OPTIMIZATION FINISHED")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值