Ошибка несовместимых фигур только при использовании Keras Sequential - PullRequest
0 голосов
/ 19 апреля 2019

Я студент, работающий над воссозданием статьи «Фотореалистичное сверхвысокое разрешение для одного изображения с использованием генерирующей состязательной сети» с использованием TensorFlow. При попытке проверить сеть после завершения обучения я получаю сообщение об ошибке несовместимых фигур (хотя это сработало для обучения). Кажется, эта ошибка связана с Keras Sequential.

Конец ошибки дает:

File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [24,24,64] vs. [16,256,256,64] [Op:Mul] name: generator/sequential/p_re_lu/mul/

Если входная форма обучения равна (16,24,24,3), а входная форма тестирования равна (1,256,256,3). Первые слои в сети - это слой tf.keras.layers.Conv2D(64, 9, strides=1, padding='same'),.

Я отделил некоторые слои от последовательных и напечатал выходные формы для проверки. Слои, которые я оставил в последовательных блоках, выдают ту же ошибку, в то время как разделенные работают нормально

выход:

x_in: (16, 24, 24, 3)
x1: (16, 24, 24, 64)
x2a: (16, 24, 24, 64)
x2: (16, 24, 24, 64)
x3: (16, 24, 24, 64)
x4: (16, 48, 48, 256)
x5: (16, 96, 96, 256)
x_out: (16, 96, 96, 3)
x_in: (1, 256, 256, 3)
x1: (1, 256, 256, 64)
x2a: (1, 256, 256, 64)
Traceback (most recent call last):
  File "srgan.py", line 249, in <module> ...

Последовательный блок:

        self.residual = tf.keras.Sequential([
            Residual(cfg, num_filters),
            Residual(cfg, num_filters),
            Residual(cfg, num_filters),
            Residual(cfg, num_filters),
        ])

Функция вызова

def call(self, x_in):

        print(f'x_in: {x_in.shape}')

        x1a = tf.keras.layers.Conv2D(64, 9, strides=1, padding='same')(x_in)
        x1 = tf.keras.layers.PReLU()(x1a)
        #x1 = self.start(x_in)
        print(f'x1: {x1.shape}')   
        x2a = Residual(self.cfg, 64)(x1) 
        print(f'x2a: {x2a.shape}')   
        x2 = self.residual(x1)

Я ожидаю, что последовательный будет работать так же, как разделенные слои. Я что-то упустил или это ошибка?

edit1: Когда я сказал, что разделил слои, я имел в виду перемещение слоев за пределы последовательного.

Я удалил их все и попробовал модель снова. Ошибка теперь для tf.keras.layers.PReLU(), что имеет смысл, поскольку упомянутая ошибка name: generator/sequential/p_re_lu/mul/

Странно, что это приводит к ошибке сравниваемых фигур

Вот краткое изложение модели

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              multiple                  15616     
_________________________________________________________________
p_re_lu (PReLU)              multiple                  36864     
_________________________________________________________________
residual (Residual)          multiple                  111232    
_________________________________________________________________
residual_1 (Residual)        multiple                  111232    
_________________________________________________________________
residual_2 (Residual)        multiple                  111232    
_________________________________________________________________
residual_3 (Residual)        multiple                  111232    
_________________________________________________________________
conv2d_9 (Conv2D)            multiple                  331840    
_________________________________________________________________
batch_normalization_v2_8 (Ba multiple                  256       
_________________________________________________________________
conv2d_transpose (Conv2DTran multiple                  147712    
_________________________________________________________________
p_re_lu_5 (PReLU)            multiple                  589824    
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr multiple                  590080    
_________________________________________________________________
p_re_lu_6 (PReLU)            multiple                  2359296   
_________________________________________________________________
conv2d_10 (Conv2D)           multiple                  6915      
=================================================================
Total params: 4,523,331
Trainable params: 4,522,179
Non-trainable params: 1,152

1 Ответ

0 голосов
/ 19 апреля 2019

Как выяснилось, вам нужно повторно инициализировать модель следующим образом. Не загружается ли загрузка в нетерпеливом TensorFlow прямо сейчас?

Есть несколько способов сделать это, объясненный в ответе на вопрос в ссылке выше.

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