TensorFlow北大公开课学习笔记5.3-手写数字识别准确率输出 (只加载数据,不加载图结构)

学习了:

       在mnist数据集上训练模型,输出手写数字识别准确lv,具体就是

       前向(权重函数、偏置函数、前向传播函数,构建网络结构) 

       后向(读入数据、backward(mnist),交叉熵损失函数、正则化、滑动平均、指数下降、实例化saver对象、保存模型)

       test(加载数据,不加载图结构、定义网络结构、实例化带滑动平均的saver对象、 计算准确率)

 

 

结论:

1、w

将 # truncated_normal初始化权重,去掉过大偏离点的正态分布
    w = tf.Variable(tf.truncated_normal(shape, stddev=0.1))

改成:w = tf.Variable(tf.random_normal(shape, mean=0, stddev=0.1))

借鉴的是vgg的初始化方法。明显提高了准确lv!

2、b

     给成0.1还是有提升的,这个0.01是借鉴cs231n的课程中的偏置来说的,所以说哈,可能这个是神经网络,还是简单点,哦初始化好了!(不知道正确么,我的猜测)

3、在backward中加入下面代码即可实现断点续训

上面就显示从第6002次迭代接着训练.....


                                                   正   文 

                          

minist-forward.py

import tensorflow as tf

INPUT_NODE = 784  #输入神经元个数(28*28)
OUTPUT_NODE = 10  #输出神经元个数(10类,0-9)
LAYER1_NODE = 500  #隐藏层的node


# 权重函数
def get_weight(shape, regularizer):

    # truncated_normal初始化权重,去掉过大偏离点的正态分布
    w = tf.Variable(tf.truncated_normal(shape, stddev=0.1))

    # 判断是否正则化,regularizer为空则不正则化
    if regularizer != None: tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))
    # 返回w
    return w


# 偏置函数
def get_bias(shape):

    # 使用tf.zeros初始化权重,全0
    b = tf.Variable(tf.zeros(shape))
    # 返回b
    return b


# 前向传播函数,构建网络结构
def forward(x, regularizer):
    #第一层
    # 调用权重函数
    w1 = get_weight([INPUT_NODE, LAYER1_NODE], regularizer)
    # 调用偏置函数
    b1 = get_bias([LAYER1_NODE])
    # relu函数非线性化
    y1 = tf.nn.relu(tf.matmul(x, w1) + b1)

    #第二层
    w2 = get_weight([LAYER1_NODE, OUTPUT_NODE], regularizer)
    b2 = get_bias([OUTPUT_NODE])
    # 因为后面用到softmax函数,为了使得满足概率分布,从而不用relu函数
    y = tf.matmul(y1, w2) + b2
    # 返回预测的y
    return y

mnist_backwa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值