我是靠谱客的博主 平淡魔镜,最近开发中收集的这篇文章主要介绍机器学习实战:TensorFlow构建简单的神经网络架构,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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构建简单的神经网络架构所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部