【发布时间】:2020-03-06 11:45:27
【问题描述】:
我的 Keras 版本是 2.2.5,tensorflow 是 1.15,python 是 3.6。
现在,我想将 RetinaNet 转换为时间分布式网络来处理一些 3d 数据,但我发现当我使用 keras.layter.Timedistributed 时,我发现它无法处理具有两个输入的层,例如:
layers.UpsampleLike(name='P5_upsampled')([P5, C4])
P5 的形状是(?, ?, x, y, 256),C4 的形状是(?, ?, a, b, 1024)。因为x,y和a,b不同,P5需要加上C4,所以我需要调整P5的图片大小。这就是layer.UpsamleLike() 的剂量。我使用的代码是这样的:
P5 = keras.layers.TimeDistributed(keras.layers.Conv2D(feature_size, kernel_size=1, strides=1, padding='same'), name='C5_reduced')(C5)
P5_upsampled = keras.layers.TimeDistributed(layers.UpsampleLike(), name='P5_upsampled')([P5, C4])
layer.UpsampleLike 是:
class UpsampleLike(keras.layers.Layer):
""" Keras layer for upsampling a Tensor to be the same shape as another Tensor.
"""
def call(self, inputs, **kwargs):
source, target = inputs
target_shape = keras.backend.shape(target)
if keras.backend.image_data_format() == 'channels_first':
source = backend.transpose(source, (0, 2, 3, 1))
output = backend.resize_images(source, (target_shape[2], target_shape[3]), method='nearest')
output = backend.transpose(output, (0, 3, 1, 2))
return output
else:
return tensorflow.compat.v1.image.resize_images(source, (target_shape[1], target_shape[2]), method=tensorflow.image.ResizeMethod.NEAREST_NEIGHBOR)
我认为Timedistributed层是对输入进行unstack并输入它们,所以我希望Timedistributed将两个输入分开处理并输入到layer.UpsampleLike,我该怎么做?
【问题讨论】:
-
两个输入 P5 和 C4 的形状是什么?是否可以将 TimeDistributed 单独应用于每个张量?您能否分享您的模型层或相应的代码,说明您需要时间分布式包装器的位置或方式?
-
我添加我的代码并解释更多
标签: python keras keras-layer