临时合并Keras中的batch维度
Temporarily merge the batch dimension in Keras
我有一个 Keras 模型,输入形状为 [None, 500, 500, 3]
,输出形状为 [None, 1]
。现在,我想制作一个包装器模型,其输入形状为 [None, 48, 500, 500, 3]
,输出形状为 [None, 48]
。
要做到这一点,最简单的方法是在第二个轴上迭代 48 次并应用第一个模型,然后使用 Keras 的 Concatenate
层来获得所需的形状。
model_outputs = []
for i in range(inputs.shape[1]):
im_block = inputs[:, i]
model_outputs += [self.model(im_block)]
return Concatenate()(model_outputs)
然而,这使得图表变得相当复杂。所以我想改为执行以下操作:
[None, 48, 500, 500, 3]
-> [None*48, 500, 500, 3]
(apply the model)
-> [None*48, 1]
-> [None, 48, 1]
我的尝试是
outputs = tf.reshape(inputs, (inputs[0] * inputs[1], *inputs[2:]))
outputs = self.model(outputs)
outputs = tf.reshape(outputs, (inputs[0], inputs[1]))
return outputs
但这给了我
TypeError: Cannot iterate over a tensor with unknown first dimension.
有办法吗?
这应该有效:
inp = tf.reshape(inp, (-1, 500, 500, 3))
res = model(inp)
res = tf.reshape(res, (-1, 48))
我有一个 Keras 模型,输入形状为 [None, 500, 500, 3]
,输出形状为 [None, 1]
。现在,我想制作一个包装器模型,其输入形状为 [None, 48, 500, 500, 3]
,输出形状为 [None, 48]
。
要做到这一点,最简单的方法是在第二个轴上迭代 48 次并应用第一个模型,然后使用 Keras 的 Concatenate
层来获得所需的形状。
model_outputs = []
for i in range(inputs.shape[1]):
im_block = inputs[:, i]
model_outputs += [self.model(im_block)]
return Concatenate()(model_outputs)
然而,这使得图表变得相当复杂。所以我想改为执行以下操作:
[None, 48, 500, 500, 3]
-> [None*48, 500, 500, 3]
(apply the model)
-> [None*48, 1]
-> [None, 48, 1]
我的尝试是
outputs = tf.reshape(inputs, (inputs[0] * inputs[1], *inputs[2:]))
outputs = self.model(outputs)
outputs = tf.reshape(outputs, (inputs[0], inputs[1]))
return outputs
但这给了我
TypeError: Cannot iterate over a tensor with unknown first dimension.
有办法吗?
这应该有效:
inp = tf.reshape(inp, (-1, 500, 500, 3))
res = model(inp)
res = tf.reshape(res, (-1, 48))