错误FailedPreconditionError (see above for traceback): Attempting to use uninitialized value Variable

在运行python的tensorflow程序时,出现了:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value Variable

未初始化?说明在训练网络参数的时候,放进去的变量没有经过初始化。

然后我查看了一下代码:

    with tf.Session() as sess:
        ckpt = tf.train.get_checkpoint_state(MODEL_SAVE_PATH)
        if ckpt and ckpt.model_checkpoint_path:  # 先判断是否有模型
            saver.restore(sess, ckpt.model_checkpoint_path)  # 恢复模型到当前会话
            #可以观察到当前的会话已经包含当前的正确globalstep了
            currentstep = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]
        for i in range(STEPS):
            xs,ys = mnist.train.next_batch(BATCH_SIZE)
            _,loss_value,step = sess.run([train_op,loss,global_step],feed_dict={x:xs,y_:ys})
            if i % 1000 == 0:
                print("After " + str(i+int(currentstep)) + " steps, loss is: " + str(loss_value))
                saver.save(sess,os.path.join(MODEL_SAVE_PATH,MODEL_NAME),global_step=i+int(currentstep))

发现了自己写的一个bug,即如果有模型就加载模型,然后继续训练。

但是如果没有模型的时候,不就相当于直接拿没有初始化过的变量进去训练了吗?

所以需要添加几行:

        else:
            init_op = tf.global_variables_initializer()
            sess.run(init_op)
            currentstep="0"

即如果没有模型的时候,就用初始化器进行初始化。

错误解决。

牢记,训练模型之前一定要初始化网络参数。

你可能感兴趣的:(机器学习,出错专栏,python)