Можно ли отправить выходные данные нормализации партии на следующий уровень вместо выходных данных активации? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть автокодер с двумя выходами, и после некоторых изменений первый выход должен использоваться как вход для следующей части автоэнкодера.Я поместил свой код здесь, и я немного запутался, что этот код логически верен или нет.в следующем коде у меня есть один вывод в decoder части с именем act11 выход активации сигмоида, а второй вывод находится в w extraction части с именем pred_W.Я кормлю bncv11 на GaussianNoise вместо act11.Я хочу знать, правильно это или нет?на основе правил обратного распространения и структуры сети возможно ли это сделать?могу ли я просто использовать вывод активации в этом коде act11=Activation('sigmoid',name='imageprim')(bncv11) для вывода модели?все мои вопросы касаются этой части кода:

decoded = Conv2D(1, (5, 5),  padding='same', name='decoder_output',dilation_rate=(2,2))(BNd) 
bncv11=BatchNormalization()(decoded)
act11=Activation('sigmoid',name='imageprim')(bncv11)
decoded_noise = GaussianNoise(0.5)(bncv11)

#----------------------w extraction------------------------------------
convw1 = Conv2D(64, (3,3), activation='relu', padding='same', name='conl1w',dilation_rate=(2,2))(decoded_noise)
watermark_extraction=Model(inputs=[image,wtm],outputs=[act11,pred_w])

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

wtm=Input((28,28,1))
image = Input((28, 28, 1))
conv1 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl1e',dilation_rate=(2,2))(image)
conv2 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl2e',dilation_rate=(2,2))(conv1)
conv3 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl3e',dilation_rate=(2,2))(conv2)
BN=BatchNormalization()(conv3)
encoded =  Conv2D(1, (5, 5), activation='relu', padding='same',name='encoded_I',dilation_rate=(2,2))(BN)


add_const = Kr.layers.Lambda(lambda x: x[0] + x[1])
encoded_merged = add_const([encoded,wtm])

#-----------------------decoder------------------------------------------------
deconv1 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl1d',dilation_rate=(2,2))(encoded_merged)
deconv2 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl2d',dilation_rate=(2,2))(deconv1)
deconv3 = Conv2D(64, (5, 5), activation='relu',padding='same', name='convl3d',dilation_rate=(2,2))(deconv2)
deconv4 = Conv2D(64, (5, 5),  activation='relu',padding='same', name='convl4d',dilation_rate=(2,2))(deconv3)

BNd=BatchNormalization()(deconv3)

decoded = Conv2D(1, (5, 5),  padding='same', name='decoder_output',dilation_rate=(2,2))(BNd) 
bncv11=BatchNormalization()(decoded)
act11=Activation('sigmoid',name='imageprim')(bncv11)
decoded_noise = GaussianNoise(0.5)(bncv11)

#----------------------w extraction------------------------------------
convw1 = Conv2D(64, (3,3), activation='relu', padding='same', name='conl1w',dilation_rate=(2,2))(decoded_noise)
convw2 = Conv2D(64, (3, 3), activation='relu', padding='same', name='convl2w',dilation_rate=(2,2))(convw1)
convw3 = Conv2D(64, (3, 3), activation='relu', padding='same', name='conl3w',dilation_rate=(2,2))(convw2)
convw4 = Conv2D(64, (3, 3), activation='relu', padding='same', name='conl4w',dilation_rate=(2,2))(convw3)
convw5 = Conv2D(64, (3, 3), activation='relu', padding='same', name='conl5w',dilation_rate=(2,2))(convw4)
convw6 = Conv2D(64, (3, 3), activation='relu', padding='same', name='conl6w',dilation_rate=(2,2))(convw5)
pred_w = Conv2D(1, (1, 1), activation='sigmoid', padding='same', name='reconstructed_W',dilation_rate=(2,2))(convw6)  

watermark_extraction=Model(inputs=[image,wtm],outputs=[act11,pred_w])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...