ConvLSTM2D после слоя Conv2D в keras или tensorflow - PullRequest
1 голос
/ 17 июня 2020

Процесс выглядит следующим образом: x(batch, time, w, h, c) => Reshape => (batch*time, w, h, c) => Conv2D => Reshape => (batch,time, w, h, c') => ConvLstm2d => ...

The tf.keras.layers.Reshape можно изменить только часть, отличную от batch_size, которую я не могу извлечь time из предыдущего измененного размера (batch*time,w,h,c).

Есть ли достойный способ достичь такой модели?

1 Ответ

1 голос
/ 17 июня 2020

Вы правы, tf.keras не поддерживает пакетное изменение размеров - если вам нужен слой, который будет делать это, но при этом работает с tf.keras, просто напишите собственный слой

class BatchAwareReshape(tf.keras.layers.Layer):
    def __init__(self, shape, **kwargs):
        super().__init__(**kwargs)

        self._shape = shape

    def call(self, inputs):
        return tf.reshape(inputs, self._shape)

Поскольку tf.reshape знает размер партии, теперь вы можете вызвать слой BatchAwareReshape(shape=(batch*time, w, h, c)) внутри своей модели, и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...