Как я могу использовать layer.Timedistributed для обработки двух входных данных в Keras? - PullRequest
0 голосов
/ 06 марта 2020

Моя версия Keras - 2.2.5, тензор потока - 1.15, python - 3.6.

Теперь я хочу преобразовать Retin aNet в распределенную по времени сеть для обработки некоторых трехмерных данных, но я обнаружил, что когда я использую 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 распаковывает входы и вводит их, поэтому я хочу, чтобы Timedistributed обработать два ввода раздельно и ввести их в layer.UpsampleLike, как я могу это сделать?

...