zoukankan      html  css  js  c++  java
  • P68 03——简单的神经网络实线手写数字识别

    http://bilibili.com/video/BV184411Q7Ng?p=68

     

     

    return:返回的是一个小批次样本的损失值列表。

     

     one-hot编码:一个热编码。例如阿拉伯数字4编码成列向量:[0 0 0 0 1 0 0 0 0 0]

     

     

    准确率怎么来?

    答:在第一批次(mini-batch)训练之后,更新一下网络的权重。在第二批次及以后批次训练的时候,用预测的标签和真实的标签相比较,即可得到本批次的准确率。

    其实第一批次也有准确率,第一批次的初始权重是随机初始化的。

    import tensorflow as tf
    from tensorflow.examples.tutorials.mnist import input_data
    #FLAGS=tf.app.flags.FlAGS
    #tf.app.flags.DEFINE_integer("is_train",1,"指定程序是预测还是训练")
    #is_train=1 #is_train的值设为1,代表是训练
    is_train=0 #is_train的值设为0,代表是训练之后的预测
    def full_connected():
        mnist=input_data.read_data_sets("./data/mnist/input_data/",one_hot=True)
        #建立数据的占位符, x [None,784] y_true [None,10]
        with tf.variable_scope("data"):
            x=tf.placeholder(tf.float32,[None,784])
            y_true=tf.placeholder(tf.int32,[None,10])
        #2、建立一个全连接层的神经网络w [784,10] b [10]
        with tf.variable_scope("fc_model"):
            # 随机初始化权重和偏置
            weight=tf.Variable(tf.random_normal([784,10],mean=0.0,stddev=1.0,name='w'))
            bias=tf.Variable(tf.constant(0.0,shape=[10]))
            #预测None个样本的输出结果[None, 784]*[784,10]+[10]=[None,10]
            y_predict=tf.matmul(x,weight)+bias
        #3、求出所有样本的损失
        with tf.variable_scope("soft_cross"):
            #求平均的交叉熵损失
            loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true,logits=y_predict))
         #4、梯度下降求损失
        with tf.variable_scope("optimizer"):
            train_op=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
        #5、计算准确率
        with tf.variable_scope("acc"):
            equal_list=tf.equal(tf.argmax(y_true,1),tf.argmax(y_predict,1))
            #equal_list is None个样本  [1,0,1,1,0,0,0,1,1,0...]
            accuracy=tf.reduce_mean(tf.cast(equal_list,tf.float32))
        # 收集变量,单个数字值的收集
        tf.summary.scalar("losses",loss)#收集损失
        tf.summary.scalar("acc",accuracy)#收集准确率
        # 高维度变量收集
        tf.summary.histogram("weightes",weight)
        tf.summary.histogram("biases",bias)
    
    
        # 定义一个初始化的变量op
        init_op=tf.global_variables_initializer()
        # 定义一个合并变量的op
        merged=tf.summary.merge_all()
    
        # 创建一个saver
        saver=tf.train.Saver()
    
    
        #开启会话去训练
        with tf.Session() as sess:
            #初始化变量
            sess.run(init_op)
    
            #建立events文件,然后写入
            filewriter=tf.summary.FileWriter("./tmp/summary/test/",graph=sess.graph)
    
            if is_train==1:
    
    
                #迭代不熟去训练,更新参数进行预测
                for i in range(2000):
                    #取出样本的特征值和目标值
                    mnist_x,mnist_y=mnist.train.next_batch(50)
                    #运行train_op训练
                    sess.run(train_op,feed_dict={x:mnist_x,y_true:mnist_y})
    
    
    
                    # 写入每步训练的值
                    summary=sess.run(merged,feed_dict={x:mnist_x,y_true:mnist_y})
    
                    filewriter.add_summary(summary,i)
    
                    print("训练第%d步,准确率为:%f"%(i,sess.run(accuracy,feed_dict={x:mnist_x,y_true:mnist_y})))
    
                #保存模型
                saver.save(sess,"./tmp/ckpt/fc_model")
            else:
                # 加载模型,主要是加载训练之后保存在模型中的weight和bias
                saver.restore(sess,"./tmp/ckpt/fc_model")
                # 如果是0,做预测
                for i in range(100):
                    # 每次测试一张图片
                    x_test,y_test=mnist.test.next_batch(1)
                    print("第%d张图片,手写数字图片目标是:%d,预测结果是:%d"%(
                        i,
                        tf.argmax(y_test,1).eval(),
                        tf.argmax(sess.run(y_predict,feed_dict={x:x_test,y_true:y_test}),1).eval()
                    ))
    
        return None
    
    if __name__ == '__main__':
        full_connected()
    第0张图片,手写数字图片目标是:2,预测结果是:2
    第1张图片,手写数字图片目标是:9,预测结果是:9
    第2张图片,手写数字图片目标是:9,预测结果是:9
    第3张图片,手写数字图片目标是:2,预测结果是:2
    第4张图片,手写数字图片目标是:0,预测结果是:0
    第5张图片,手写数字图片目标是:2,预测结果是:2
    第6张图片,手写数字图片目标是:7,预测结果是:7
    第7张图片,手写数字图片目标是:7,预测结果是:7
    第8张图片,手写数字图片目标是:0,预测结果是:0
    第9张图片,手写数字图片目标是:0,预测结果是:0
    第10张图片,手写数字图片目标是:6,预测结果是:7
    第11张图片,手写数字图片目标是:5,预测结果是:5
    第12张图片,手写数字图片目标是:7,预测结果是:7
    第13张图片,手写数字图片目标是:0,预测结果是:0
    第14张图片,手写数字图片目标是:6,预测结果是:6
    第15张图片,手写数字图片目标是:3,预测结果是:3
    第16张图片,手写数字图片目标是:5,预测结果是:8
    第17张图片,手写数字图片目标是:1,预测结果是:1
    第18张图片,手写数字图片目标是:7,预测结果是:7
    第19张图片,手写数字图片目标是:5,预测结果是:5
    第20张图片,手写数字图片目标是:6,预测结果是:6
    第21张图片,手写数字图片目标是:6,预测结果是:6
    第22张图片,手写数字图片目标是:5,预测结果是:6
    第23张图片,手写数字图片目标是:7,预测结果是:7
    第24张图片,手写数字图片目标是:9,预测结果是:8
    第25张图片,手写数字图片目标是:5,预测结果是:5
    第26张图片,手写数字图片目标是:6,预测结果是:6
    第27张图片,手写数字图片目标是:1,预测结果是:6
    第28张图片,手写数字图片目标是:1,预测结果是:1
    第29张图片,手写数字图片目标是:7,预测结果是:7
    第30张图片,手写数字图片目标是:0,预测结果是:0
    第31张图片,手写数字图片目标是:1,预测结果是:1
    第32张图片,手写数字图片目标是:4,预测结果是:9
    第33张图片,手写数字图片目标是:3,预测结果是:5
    第34张图片,手写数字图片目标是:6,预测结果是:6
    第35张图片,手写数字图片目标是:5,预测结果是:3
    第36张图片,手写数字图片目标是:5,预测结果是:5
    第37张图片,手写数字图片目标是:1,预测结果是:1
    第38张图片,手写数字图片目标是:7,预测结果是:7
    第39张图片,手写数字图片目标是:8,预测结果是:2
    第40张图片,手写数字图片目标是:7,预测结果是:7
    第41张图片,手写数字图片目标是:7,预测结果是:7
    第42张图片,手写数字图片目标是:7,预测结果是:4
    第43张图片,手写数字图片目标是:3,预测结果是:3
    第44张图片,手写数字图片目标是:4,预测结果是:4
    第45张图片,手写数字图片目标是:1,预测结果是:1
    第46张图片,手写数字图片目标是:3,预测结果是:3
    第47张图片,手写数字图片目标是:5,预测结果是:5
    第48张图片,手写数字图片目标是:0,预测结果是:0
    第49张图片,手写数字图片目标是:1,预测结果是:1
    第50张图片,手写数字图片目标是:2,预测结果是:2
    第51张图片,手写数字图片目标是:0,预测结果是:0
    第52张图片,手写数字图片目标是:9,预测结果是:9
    第53张图片,手写数字图片目标是:7,预测结果是:7
    第54张图片,手写数字图片目标是:5,预测结果是:5
    第55张图片,手写数字图片目标是:4,预测结果是:4
    第56张图片,手写数字图片目标是:3,预测结果是:3
    第57张图片,手写数字图片目标是:1,预测结果是:1
    第58张图片,手写数字图片目标是:9,预测结果是:9
    第59张图片,手写数字图片目标是:5,预测结果是:5
    第60张图片,手写数字图片目标是:9,预测结果是:9
    第61张图片,手写数字图片目标是:8,预测结果是:8
    第62张图片,手写数字图片目标是:0,预测结果是:0
    第63张图片,手写数字图片目标是:3,预测结果是:3
    第64张图片,手写数字图片目标是:6,预测结果是:2
    第65张图片,手写数字图片目标是:1,预测结果是:1
    第66张图片,手写数字图片目标是:4,预测结果是:4
    第67张图片,手写数字图片目标是:8,预测结果是:8
    第68张图片,手写数字图片目标是:6,预测结果是:6
    第69张图片,手写数字图片目标是:4,预测结果是:4
    第70张图片,手写数字图片目标是:1,预测结果是:1
    第71张图片,手写数字图片目标是:1,预测结果是:1
    第72张图片,手写数字图片目标是:3,预测结果是:3
    第73张图片,手写数字图片目标是:1,预测结果是:1
    第74张图片,手写数字图片目标是:4,预测结果是:4
    第75张图片,手写数字图片目标是:4,预测结果是:4
    第76张图片,手写数字图片目标是:7,预测结果是:7
    第77张图片,手写数字图片目标是:3,预测结果是:8
    第78张图片,手写数字图片目标是:4,预测结果是:4
    第79张图片,手写数字图片目标是:8,预测结果是:8
    第80张图片,手写数字图片目标是:7,预测结果是:7
    第81张图片,手写数字图片目标是:0,预测结果是:0
    第82张图片,手写数字图片目标是:2,预测结果是:2
    第83张图片,手写数字图片目标是:0,预测结果是:0
    第84张图片,手写数字图片目标是:0,预测结果是:5
    第85张图片,手写数字图片目标是:1,预测结果是:1
    第86张图片,手写数字图片目标是:0,预测结果是:0
    第87张图片,手写数字图片目标是:9,预测结果是:9
    第88张图片,手写数字图片目标是:9,预测结果是:9
    第89张图片,手写数字图片目标是:6,预测结果是:6
    第90张图片,手写数字图片目标是:0,预测结果是:0
    第91张图片,手写数字图片目标是:4,预测结果是:4
    第92张图片,手写数字图片目标是:7,预测结果是:7
    第93张图片,手写数字图片目标是:1,预测结果是:1
    第94张图片,手写数字图片目标是:8,预测结果是:8
    第95张图片,手写数字图片目标是:1,预测结果是:1
    第96张图片,手写数字图片目标是:2,预测结果是:2
    第97张图片,手写数字图片目标是:4,预测结果是:4
    第98张图片,手写数字图片目标是:1,预测结果是:1
    第99张图片,手写数字图片目标是:1,预测结果是:1
  • 相关阅读:
    winform 通过左右键,或enter键做类似Tab键的功能
    向表中插入查询结果
    创建Oracle job的一些注意事项
    多数据库独立主机的配置
    图形码验证
    JavaScript中的trycatchfinally
    ASP.Net生成后台脚本的问题的解决办法
    10个你未必知道的CSS技巧
    学习JQuery的$.Ready()与OnLoad事件比较[转]
    风雨20年:我所积累的20条编程经验[csdn]
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/14157563.html
Copyright © 2011-2022 走看看