Conv2d неправильные размеры на Keras - PullRequest
0 голосов
/ 14 апреля 2019

Я новичок в Keras и пытаюсь использовать сверточные авто-кодеры для сжатия изображений.

В частности, я сжимаю изображения всех размеров (365 929).Поскольку я работаю с массивными двумерными массивами для изображений, я добавляю измерение, чтобы сделать их тензорами.

При заполнении сети изображениями с этим кодом:

X,X_test=train_test_split(images,test_size=0.1)
# Adds 1D to each matrix, so to have a tensor.
X=np.array([np.expand_dims(i,axis=2) for i in X]) 
# X is (1036, 365, 929, 1) now
X_test=np.array([np.expand_dims(i,axis=2) for i in X_test])
inputs = Input(shape=(365, 929, 1))
h = Conv2D(4,(3,3),activation='relu',padding="same")(inputs)
encoded = MaxPooling2D(pool_size=2,padding="same")(h)
h = Conv2D(4,(3,3),activation='relu',padding="same")(encoded)
h = UpSampling2D((2,2))(h)
outputs = Conv2D(1,(3,3),activation='relu',padding="same")(h)

model = Model(inputs=inputs, output=outputs)
model.compile(optimizer='adam', loss='mse')
model.fit(X, X, batch_size=64, nb_epoch=5, validation_split=.33)

Я получаюследующая ошибка:

ValueError: Error when checking target: expected conv2d_3 to have shape (366, 930, 1) but got array with shape (365, 929, 1)

Как я могу решить эту проблему?Как я могу изменить CNN для получения изображений с неравномерными размерами?

1 Ответ

1 голос
/ 14 апреля 2019

Ваша проблема заключается в UpSampling2D. Вы можете асимметрично дополнить изображение нулями, а затем обрезать изображение до исходного размера, как описано здесь . Для облегчения отладки вы можете использовать print(model.Summary()), чтобы проверить размеры всех слоев.

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