当测试中的batch_size与training中的batch_size不同时,tensorflow恢复变量

时间:2016-12-28 23:17:26

标签: tensorflow deep-learning

我是TensorFlow的新手。我已经用我的训练数据成功训练了inception_v3模型;现在我想预测几个图像的输出,但它们的数量与训练中的batch_size不同。我这样做了:

from tensorflow.contrib.slim.nets import inception_v3 as inception
checkpoint_dir =os.path.join('runs', configure_name, 'checkpoints')
checkpoint_file = tf.train.latest_checkpoint(checkpoint_dir)
graph = tf.Graph()
with graph.as_default():
    session_conf = tf.ConfigProto(
      allow_soft_placement=True,
      log_device_placement=False)
    sess = tf.Session(config=session_conf)
    with sess.as_default():
        # Load the saved meta graph and restore variables
        saver = tf.train.import_meta_graph("{}.meta".format(checkpoint_file))
        saver.restore(sess, checkpoint_file)

        x = tf.placeholder(tf.float32, [batch_size,input_size,input_size,num_channels], name='images')
        _, end_points = inception.inception_v3(x,num_classes=num_classes, is_training=False)
        outputs = end_points['Predictions']        

        scores = sess.run(outputs, feed_dict={x: x_eval})
        predictions = np.argmax(scores,axis=1)

它给我的错误如下:

FailedPreconditionError: Attempting to use uninitialized value InceptionV3/Conv2d_1a_3x3/weights_1

似乎“输出”中的模型参数没有成功输入,但我不知道该怎么做。有任何想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

这里你明确设置了输入占位符x batch_size的第一个dim,所以每次你需要使用相同的dim来提供numpy.array类型张量时,你的程序就会出错。

解决方案可以设置任何占位符(输入和标签)None的第一个暗淡,以便在训练和验证期间此暗淡可以是任何int或不同

更新:

如果您已经使用固定的第一个昏暗的占位符输入(和标签)训练了您的模型,则可以在使用tf.train.import_meta_graph(grapg_def=your_graph_def, input_map={'your_train_input_placedholer_name':new_placeholder})恢复此图表时对其进行更改 这里new_placeholder是您使用不固定的第一个暗淡创建的占位符。