搭建神经网络之手写体识别

在搭建神经网络进行手写体识别时,遇到了TensorFlow的FailedPreconditionError,具体表现为尝试使用未初始化的值。错误源于变量beta1_power_4未初始化。通过将全局变量初始化操作`tf.global_variables_initializer()`提前,可以有效解决问题,确保在运行时所有变量已正确初始化。
摘要由CSDN通过智能技术生成
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
"""
1.改变初始化的方式
采用的是MSRA初始化:服从动态方差的独立高斯分布(0,np.sqrt(2/n)),
n代表的就是前一层的输入的节点。
如果采用全0的初始化,又用relu函数激活会导制准确率很低大概10%左右(具体解释根据反向传播)
"""
def get_weight(shape, stddev):
    return tf.Variable(tf.truncated_normal(shape=shape, stddev=stddev, mean=0, seed=1))
def get_bias(shape):
    return tf.Variable(tf.constant(0.01, shape=shape))
"""
2.激活函数
relu函数更利于反向传播
"""
def activation(x):
    return tf.nn.relu(x)
"""
3.改变隐层的数量
第一个隐层的神经元的个数和输入的维数差不多
第二个隐层根据具体的情况而定。
"""
def forward(x):
    w_1 = get_weight([784, 100], np.sqrt(2/784))
    b_1 = get_bias([100])
    y_1 = activation(tf.matmul(x, w_1)+ b_1)
    w_2 = get_weight([100, 10], np.sqrt(2/100))
    b_2 = get_bias([10])
    y_2 = tf.matmul(y_1, w_2)+b_2
    return w_1, w_2, y_2
def backward():
    init_learning_rate = 1e-2
    data_dir = "./mnist/input_data"
    mnist = input_data.read_data_sets(data_dir, one_hot=True)
    x = tf.placeholder(tf.float32, [None, 784])
    y_ = tf.placeholder(tf.float32, [None, 10])
    w_1,w_2,y_2 = forward(x)
    # div就是求两个数的商
    epoch_steps = tf.to_int64(tf.div(60000, tf.shape(x)[0]))
    # 记录当前共运行了多少轮
    global_st
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值