创建形状与用于自定义损失函数的模型输出相同的形状的keras张量

时间:2019-09-24 02:26:40

标签: python tensorflow keras loss-function

我有一个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相同?

1 个答案:

答案 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可以匹配形状,并且将在整个批次大小中重复张量。