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>
而?
正是我想要的,特别是第一个,因为它是控制批量大小的。
但是,如果我对该变量进行求值,并输入第一个维度与训练中使用的维度不完全相同的内容,则会出现前面提到的形状错误 我现在遇到了一个类似的问题。你解决过这个问题吗?如果是,解决方案是什么?