Python tensorflow加载元图硬编码重塑维度

Python tensorflow加载元图硬编码重塑维度,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我有一个相当复杂的体系结构,我还在进行实验,这个实验的很大一部分涉及调整体系结构,再培训和观察它的性能。为了避免在测试时显式修改架构,将其还原为保存检查点时的确切状态,我正在从检查点目录中的.meta文件加载图形 我对批次大小有问题,这往往会保存在图表中,并且在每次测试一个样本时,在推断时给我带来麻烦,即批次大小=1。第一个问题是我用来输入数据的占位符,我在声明它时通过设置batch\u size=None(第一个维度)解决了这个问题 现在,我的网络有一部分大致基于此,这涉及到相当多的重塑。在培

我有一个相当复杂的体系结构,我还在进行实验,这个实验的很大一部分涉及调整体系结构,再培训和观察它的性能。为了避免在测试时显式修改架构,将其还原为保存检查点时的确切状态,我正在从检查点目录中的
.meta
文件加载图形

我对
批次大小
有问题,这往往会保存在图表中,并且在每次测试一个样本时,在推断时给我带来麻烦,即
批次大小=1
。第一个问题是我用来输入数据的占位符,我在声明它时通过设置
batch\u size=None
(第一个维度)解决了这个问题

现在,我的网络有一部分大致基于此,这涉及到相当多的重塑。在培训时一切正常,但如果我尝试加载
.meta
更改批大小,我会遇到以下错误:

InvalidArgumentError (see above for traceback): Input to reshape is a tensor with 98304 values, but the requested shape has 1572864
[[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:localhost/replica:0/task:0/gpu:0"](g_transformer/_transform/concat, pack_5)]]
[[Node: g_transformer_1/_transform/Reshape_6/_333 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_520_g_transformer_1/_transform/Reshape_6", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
其中
98304
1572864/16
,其中16为训练批量大小。一些帖子通过将重塑的第一个维度设置为
-1
,修复了类似的问题,这是由于其他维度中的其他
-1
,我在这里无法做到的

所以,问题是:我使用它来加载经过训练的模型

self.loader = tf.train.import_meta_graph(meta)
self.loader.restore(self.sess, os.path.join(fn, ckpt_name))
但是,如何防止元图硬编码重塑维度,从而有效地防止我在测试时更改批量大小

编辑:一些进一步的实验。如果我加载图形并获取导致问题的节点

 a = g.get_tensor_by_name('g_transformer_1/_transform/Reshape_6:0')
它说:

<tf.Tensor 'g_transformer_1/_transform/Reshape_6:0' shape=(?, 128, 384, ?) dtype=float32>

正是我想要的,特别是第一个,因为它是控制批量大小的。
但是,如果我对该变量进行求值,并输入第一个维度与训练中使用的维度不完全相同的内容,则会出现前面提到的形状错误

我现在遇到了一个类似的问题。你解决过这个问题吗?如果是,解决方案是什么?