как выполнить деконволюцию/трансконволюцию в Керасе?

моя модельная структура дается следующим образом:

Слой (тип) Выходная форма Параметр #

conv2d_31 (Conv2D)           (None, 40, 40, 16)        160       
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 20, 20, 16)        0         
_________________________________________________________________
conv2d_32 (Conv2D)           (None, 20, 20, 32)        12832     
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 10, 10, 32)        0         
_________________________________________________________________
conv2d_33 (Conv2D)           (None, 10, 10, 64)        100416    
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 5, 5, 64)          0         
_________________________________________________________________
flatten_2 (Flatten)          (None, 1600)              0         
_________________________________________________________________
dense_3 (Dense)              (None, 1024)              1639424   
_________________________________________________________________
dropout_2 (Dropout)          (None, 1024)              0         
_________________________________________________________________
dense_4 (Dense)              (None, 1)                 1025      
_________________________________________________________________
activation_52 (Activation)   (None, 1)                 0      

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


person rick_moody    schedule 04.01.2019    source источник


Ответы (1)


Обратите внимание на номенклатуру.

Деконволюция не является транспонированной сверткой, хотя эти термины широко используются как синонимы. Правильный термин — транспонированная свертка. Вот почему слой «деконволюция» даже не существует в Keras, а Conv2DTransposed существует.

Вы можете попробовать создать модель глубокого обучения с помощью Model API вместо Sequential API.

Таким образом, вы можете добавить Conv2DTransposed к определенному слою и увидеть результат транспонированной свертки.

Вы можете просмотреть транспонированный слой свертки как слой повышающей дискретизации. Первый имеет обучаемые параметры, а второй только удваивает/утроивает и т. д. размер изображения с помощью интерполяции.

Ознакомьтесь с документацией Keras по Функциональному API (API модели): https://keras.io/models/model/

Ознакомьтесь с документацией Keras для транспонированной свертки: https://keras.io/layers/convolutional/

Проверьте эту учетную запись github, чтобы визуально понять транспонированную свертка: https://github.com/vdumoulin/conv_arithmetic

person Timbus Calin    schedule 04.01.2019
comment
a = Input(shape=(40,40,1)) b = Conv2D(16, kernel_size=3, strides=1, padding = 'то же', активация='relu',data_format='channels_last')(a) c = Conv2DTranspose(16, kernel_size=3, strides=1, padding='same', активация='relu', data_format='channels_last')(b) model2 = Model(inputs=a, outputs=c) это приводит к ошибке : ожидалось, что conv2d_transpose_4 будет иметь 4 измерения, но получил массив с формой (2064, 1) - person rick_moody; 06.01.2019
comment
Я проверил ваш фрагмент кода, и в моем случае он работает нормально. Проверено с помощью model.summary(). Убедитесь, что вы вводите свои данные правильно. Первым замечанием будет проверка того, вводите ли вы изображение в градациях серого или RGB, потому что модель настроена на прием только изображений в градациях серого. Всего параметров: 2480 Обучаемых параметров: 2480 Необучаемых параметров: 0 - person Timbus Calin; 07.01.2019