我有一个keras模型,最后一层的输出形状是(None,574,6)
,其中None
是我输入模型的批量大小。
我还有一个名为anchors
的2D numpy数组,形状为(574,6)
。
我想要的是每个数据的输出减去numpy数组元素的取值。
import keras.backend as K
anchor_tensor = K.cast(anchors, tf.float32)
print(K.int_shape(anchor_tensor))
#(576, 4)
print(K.int_shape(y_pred))
#(None, 574, 6)
y_pred - anchor_tensor
由于不明批处理大小,上述代码发生了以下错误。
InvalidArgumentError:尺寸必须相等,但分别为574和576 输入形状为[?,574,6],[576,4]的'sub_6'(op:'Sub')。
在处理上述异常期间,发生了另一个异常:
如何重复anchor_tensor
None
次以使其形状与y_pred
相同?
答案 0 :(得分:1)
Tensorflow将轻松进行所谓的“广播”,如果可能的话,它会自动重复丢失的元素。但是要做到这一点,必须先确认形状是否允许。
确保形状兼容的最安全方法是,使形状具有相同的长度,并在要重复的尺寸中具有值1。
所以,它很简单:
anchor_tensor = K.expand_dims(anchor_tensor, axis=0) #new shape is (1, 576, 4)
result = y_pred - anchor tensor
现在Tensorflow可以匹配形状,并且将在整个批次大小中重复张量。