byjhh15768 2018-07-02 02:43 采纳率: 100%
浏览 8210
已采纳

关于Tensorflow的minst数字识别出现name XXX is not defined的问题

 def train(mnist):
    x = tf.placeholder(tf.float32, [None, INPUT_NODE], name='x-input')
    y_ = tf.placeholder(tf.float32, [None, OUTPUT_NODE], name='y-input')
    weights1 = tf.Variable(
        tf.truncated_normal([INPUT_NODE, LAYER1_NODE], stddev=0.1))
    biases1 = tf.Variable(tf.constant(0.1, shape=[LAYER1_NODE]))
    weights2 = tf.Variable(
        tf.truncated_normal([LAYER1_NODE, OUTPUT_NODE], stddev=0.1))
    biases2 = tf.Variable(tf.constant(0.1, shape=[OUTPUT_NODE]))

    #计算向前传播y的输出值,此处首次向前传播计算,不必使用滑动平均值来进行权值优化,固填为None
    y = inference(x, None, weights1, biases1, weights2, biases2)

    #存储训练轮数,变量为不可训练的变量
    global_step = tf.Variable(0, trainable=False)

    #给定滑动平均衰减率和训练轮数的变量,初始化滑动平均类,给定训练轮数可以加快早期
    #变量训练速度
    variable_averages = tf.train.ExponentialMovingAverage(
        MOVING_AVERAGE_DECAY, global_step)                  #创建指数移动平均类

    #在所有代表神经网络参数的变量上使用滑动平均,这个集合元素是所有没有指定
    #trainable = False 的参数
    variable_averages_op = variable_averages.apply(
        tf.trainable_variables())                           #将上类作用于当前所有可训练变量

    #计算使用滑动平均的Y值,这里调用之前定义的inference函数,获取参数
    average_y = inference(x, variable_averages, weights1, biases1, weights2, biases2)

    #计算交叉熵,作为刻画真实值y与预测值y_之间的差距
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
      logits=y, labels=tf.argmax(y_, 1))
    #计算当前BATCH中所有样例的交叉熵平均值
    corss_entropy_mean = tf.reduce_mean(cross_entropy)

    #计算L2正则化损失函数
    regularizer = tf.contrib.layers.l2_regularizer(REGULARIZATION_RATE)
    #计算模型正则化损失
    regularization = regularizer(weights1) + regularizer(weights2)
    #总损失为交叉熵与正则化的和
    loss = cross_entropy_mean + regularization

    #衰减学习率
    global learning_rate
    learning_rate = tf.train.exponential_decay(
        LEARNING_RATE_BASE, global_step, mnist.train.num_examples / BATCH_SIZE, LEARNING_RATE_DECAY)

#最小化loss
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_step)

with tf.control_dependencies([train_step, Variables_averages_op]):
    train_op = tf.no_op(name='train')

可以看到在前面的train函数中定义了learning_rate局部变量,但是在外部调用时出现变量未定义的报错,我定义全局变量也没有用图片说明

  • 写回答

3条回答 默认 最新

  • 清风不识字12138 2018-07-02 08:42
    关注

    你虽然在train()函数中将

     learning_rate
    

    设为了全局变量,但是你在

    train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_step)

    这条语句执行前并没有调用train()函数,你那条将learning_rate 设置为全局变量的语句相当于没有执行,所以会报错。
    解决方案就是在之前调用一下train()函数,然后再执行该语句。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置