Изменить размер Тензор, чтобы объединить с другим слоем - PullRequest
0 голосов
/ 13 апреля 2020

Я следую этой архитектуре ниже из бумаги

enter image description here

Теперь мне нужно объединить слои других. Я пытался объединить слой Conv_10 с Deconv_1, но получил ошибку относительно размеров тензоров. Поэтому мне нужно преобразовать слой Conv_10 из (3,44,44) в (3,34,34). Как я могу это сделать?

Текущая реализация этой сети доступна здесь: https://gist.github.com/brunojus/1a99b9d306b5b2f6853964fc972ebac3

Фактическая ошибка: ValueError: A Concatenate layer требуются входные данные с соответствующими формами, за исключением оси concat. Получил входные формы: [(Нет, 34, 34, 3), (Нет, 44, 44, 3)]

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете использовать keras.layers.Reshape(target_shape), чтобы изменить форму вывода слоя, но критерий состоит в том, что общее количество элементов в целевой фигуре после изменения формы должно быть равно общему количеству элементов во входной форме.

Но ваши целевые измерения формы (Нет, 34, 34, 3) не позволяют хранить все данные из входных измерений (Нет, 44, 44, 3). Однако вы можете потерять информацию из (Нет, 44, 44, 3), чтобы изменить ее форму (Нет, 34, 34, 3), но это не идеальный способ, поскольку пространственная информация теряется.

Однако вы можете выполнить заполнение нулями, чтобы изменить меньшую выходную форму слоя .ie (None, 34, 34, 3), чтобы сопоставить его с (None, 44, 44, 3) и затем объединить. ZeroPadding2D может добавлять строки и столбцы нулей сверху, снизу, слева и справа от тензора изображения.

Пример: Я использовал слои Conv2D, имеющие ту же форму, как вы упоминали в вопросе .ie [(Нет, 34, 34, 3), (Нет, 44, 44, 3)]

from keras.models import Model
from keras.layers import Input, concatenate, Conv2D, ZeroPadding2D
from keras.optimizers import Adagrad
import tensorflow.keras.backend as K

input_img1 = Input(shape=(44,44,3))
x1 = Conv2D(3, (3, 3), activation='relu', padding='same')(input_img1)

input_img2 = Input(shape=(34,34,3))
x2 = Conv2D(3, (3, 3), activation='relu', padding='same')(input_img2)
# Zero Padding of 5 at the top, bottom, left and right side of an image tensor
x3 = ZeroPadding2D(padding = (5,5))(x2)

# Concatenate works as layers have same size output
x4 = concatenate([x1,x3])

output = Dense(18, activation='relu')(x4)

model = Model(inputs=[input_img1,input_img2], outputs=output)

model.summary()

Выход -

Model: "model_19"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_85 (InputLayer)           (None, 34, 34, 3)    0                                            
__________________________________________________________________________________________________
input_84 (InputLayer)           (None, 44, 44, 3)    0                                            
__________________________________________________________________________________________________
conv2d_67 (Conv2D)              (None, 34, 34, 3)    84          input_85[0][0]                   
__________________________________________________________________________________________________
conv2d_66 (Conv2D)              (None, 44, 44, 3)    84          input_84[0][0]                   
__________________________________________________________________________________________________
zero_padding2d_11 (ZeroPadding2 (None, 44, 44, 3)    0           conv2d_67[0][0]                  
__________________________________________________________________________________________________
concatenate_27 (Concatenate)    (None, 44, 44, 6)    0           conv2d_66[0][0]                  
                                                                 zero_padding2d_11[0][0]          
__________________________________________________________________________________________________
dense_44 (Dense)                (None, 44, 44, 18)   126         concatenate_27[0][0]             
==================================================================================================
Total params: 294
Trainable params: 294
Non-trainable params: 0
__________________________________________________________________________________________________
...