我使用的是Inception Score,这是生成模型(尤其是GANs社区)中非常重要的评估指标。它涉及pre-trained model。但是它的静态批处理大小为1,这使得推论极其缓慢。
因此,我们需要将静态批处理大小修改为“无”以加快速度。
它曾经由以下代码处理,即通过tensor._shape = new_shape更改张量形状。
ops = self.inception_graph.get_operations()
for op_idx, op in enumerate(ops):
for o in op.outputs:
shape = o.get_shape()
shape = [s.value for s in shape]
new_shape = []
for j, s in enumerate(shape):
if s == 1 and j == 0:
new_shape.append(None)
else:
new_shape.append(s)
#o._shape = tf.TensorShape(new_shape)
以上操作仅适用于tensorflow 1.5及更早版本。但是对于后一种版本(例如tensorflow 1.9),不再允许使用o._shape = tf.TensorShape(new_shape),并且set_shape()函数仅合并形状,但不支持将已知元素修改为None。
tensorflow GitHub 5680中存在一个相关问题。
故意没有办法使张量的形状不太具体。 这使TensorFlow使用当前的静态形状安全 张量在以后的形状推论中,也专门用于 特定的形状。
在这里重置形状似乎是必要的,而且我想知道如何在预训练的初始模型中将静态批次大小1修改为“无”。
当前迫使我使用tensorflow直到1.5版本。非常感谢!