概述
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('data/',one_hot=True)
#先定义好网络模型中的各个层的神经单元数,本章节的网络模型是四层,第一层输入层,第二层和第三层都是神经元,第四层为输出层
n_input = 784
hidden_1 = 256
hidden_2 = 128
n_class = 10
#数据。placeholder函数为x和y占位,并且数据类型为float。None表示不明确数据集个数。
x = tf.placeholder("float",[None,n_input])
y = tf.placeholder("float",[None,n_class])
#定义网络模型中的权重参数w和b
#stddev表示标准差不设置参数 stddev 的话,训练精度最多只能到20%左右,即使调整优化器的学习了到很大,训练精度也不会超过 20%参数 stddev 用于设置正太分布被截断前的标准差,
#设置了stddev=0.1后,训练精度就达到达到 99.2% 以上
weights = {
'w1':tf.Variable(tf.random_normal([n_input,hidden_1],stddev=0.1)),#w1的维度是根据输入层的特征数和第一层神经元数决定
'w2':tf.Variable(tf.random_normal([hidden_1,hidden_2],stddev=0.1)),#w2的维度是根据第一层神经元数和第二层神经元数决定
'out':tf.Variable(tf.random_normal([hidden_2,n_class],stddev=0.1))
}
biases = {
'b1':tf.Variable(tf.random_normal([hidden_1])),#b1是根据第一层神经元数决定的
'b2':tf.Variable(tf.random_normal([hidden_2])),#b2是根据第一层神经元数决定的
'out':tf.Variable(tf.random_normal([n_class]))
}
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)
#计算损失
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred,labels=y))
#使用梯度下降方法求解最小值就是得到的优化值
optm = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(loss)
#准确率
corr = tf.equal(tf.argmax(pred,1),tf.argmax(y,1))#equal是判断预测得到的结果和真实y之间结果是否相同
acc = tf.reduce_mean(tf.cast(corr,"float"))#tf.cast函数将布尔值转换成float
#初始化
init = tf.global_variables_initializer()
print("函数已准备就绪")
#模型迭代次数50次
training_epoch = 50
#块大小
batch_size = 100
#展示
display_step = 4
sess = tf.Session()
sess.run(init)
for epoch in range(training_epoch):
avg_loss = 0
num_batch = int(mnist.train.num_examples/batch_size)#这边是整个数据集进行分块
for i in range(num_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_loss = avg_loss + sess.run(loss,feed_dict=feeds)#这边得到的avg_loss是这个块的数据得到的平均损失,for循环中假设600个块,会将每个块的平均损失进行相加
num_avg_loss = avg_loss/num_batch#计算epoch一次中的整个的平均损失
if (epoch+1)%display_step ==0:
print("Ecopch: %03d/%03d cost: %.9f" % (epoch, training_epoch, num_avg_loss))
feeds = {x:batch_xs,y:batch_ys}
training_acc = sess.run(acc,feed_dict=feeds)#本次epoch中最后一个块的准确率
print("本次Epoch: %03d中最后一个块的准确率:TRAIN ACCURACY: %.3f" % (epoch,training_acc))
feeds = {x:mnist.test.images,y:mnist.test.labels}
test_acc = sess.run(acc,feed_dict=feeds)#放入测试数据,查看本次epoch中测试集的准确率
print("本次Epoch: %03d中测试集的准确率:TSET ACCURACY: %.3f" % (epoch,test_acc))
print("OPTIMIZATION FINISHED")
最后
以上就是平淡魔镜为你收集整理的机器学习实战:TensorFlow构建简单的神经网络架构的全部内容,希望文章能够帮你解决机器学习实战:TensorFlow构建简单的神经网络架构所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复