Tensorflow-修改受训网络的批量大小

时间:2018-12-25 03:20:01

标签: tensorflow

我正在尝试使用训练有素的网络来预测新图像。网络使用tf.placeholder,我对argmax的输出层感兴趣。为了训练网络,我使用了32个大小的批次,但是对于新的推论,我感兴趣的是一张一张地评估图像。

据我所知,解决此问题的方法是将占位符的第一维设置为“无”,例如

x_pl = tf.placeholder(tf.float32, shape=[None,224,224,3])

但是,出现问题是因为我使用的网络是由另一个开发人员提供的,该开发人员使用了一些层,当我将batch_size设置为None时,它崩溃了,直到准备tf.nn.conv2d_transpose层时没有大小不兼容。

我的问题是:是否可以将预先训练的网络切成固定的批次大小?

训练后,我使用以下方法保存模型:

inputs = { x_pl.name: x_pl} 
outputs = { argmax.name: argmax }
tf.saved_model.simple_save( sess, model_path, inputs, outputs )

然后,在另一个脚本中,我通过调用来加载它:

tf.saved_model.loader.load(
        sess2,
        [tag_constants.SERVING],
        model_path,
    )

inference_graph = tf.get_default_graph()

x_pl = inference_graph.get_tensor_by_name("Placeholder:0")
argmax = inference_graph.get_tensor_by_name("ArgMax:0")

问题是x_pl和argmax的大小都为[32,....]。我尝试了tf.slice,tf.split,tf.stride_slice ...,但是当我评估仅由一个图像提供的argmax时,脚本崩溃,提示我应该向PlaceHolder提供一批32张图像。

对我来说似乎很奇怪,我无法对单个预测进行后处理以获得网络,但是我只能找到上述将None放在占位符中的解决方案。可以按照我说的做吗?还是唯一的解决方案是重新编码整个网络?

0 个答案:

没有答案