python - 为自定义损失函数创建形状与模型输出相同的 keras 张量
问题描述
我有一个 keras 模型,最后一层的输出形状是(None,574,6)
,这None
是我输入模型的批量大小。
我还有一个名为anchors
shape的 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
由于batch_size未知,上述代码出现以下错误。
InvalidArgumentError:尺寸必须相等,但输入形状为 [?,574,6]、[576,4] 的“sub_6”(操作:“Sub”)的尺寸为 574 和 576。
在处理上述异常的过程中,又出现了一个异常:
我怎样才能重复anchor_tensor
None
几次以使其形状与 相同y_pred
?
解决方案
Tensorflow 很容易做它所谓的“广播”,如果可能的话,它会自动重复丢失的元素。但要做到这一点,它必须首先确认形状允许这样做。
确保形状兼容的最安全方法是使它们具有相同的长度,并且在您希望它重复的维度中具有值 1。
所以,它很简单:
anchor_tensor = K.expand_dims(anchor_tensor, axis=0) #new shape is (1, 576, 4)
result = y_pred - anchor tensor
现在,Tensorflow 可以匹配形状,并将重复整个批量大小的张量。
推荐阅读
- python - 如何在 python dm-script 中获取当前文件路径
- android - 如何从 Retrofit、RxJava、Android 中的所有请求中发出多个请求和响应
- python - 如何在python中解决geopandas执行问题?
- html - 我们可以在 url - django 中传递两个参数吗?
- git - Git merge reverted, not merge all files in future merge
- javascript - ASP.NET Core - 如何将 Javascript 变量从视图传递到控制器
- java - 链接上的反向 ArrayList
- r - 尝试使用 dplyr 仅滞后一些变量
- python - Tkinter 调用函数时显示图片
- python - Python 'int' 对象不可下标 - 转换无法按预期工作