Потеря tf.keras от двух изображений в сериале - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу использовать метод обучения стабильности на бумаге и применить его к очень простому CNN.
Принципиальная архитектура определяется следующим образом:

Figure 1
Как показано на рисунке, вы вычисляете потери на основе вывода f (I) для входного изображения I и на выходе f ( I ') для возмущенного изображения I' .
Мой вопрос будет состоять в том, как сделать это правильным способом, не имея двух экземпляров DNN, так как я тренируюсь на большом 3D картинки. Другими словами: как я могу обработать два изображения последовательно и вычислить потери на основе этих двух изображений?
Я использую tf2 с керасом.

1 Ответ

0 голосов
/ 28 апреля 2020
  1. Сначала вы можете записать свой DNN как tf.keras Модель.

  2. После этого вы можете написать другую модель, которая принимает два входных изображения, применяет некоторые Гауссовский шум одному, передает их DNN.

  3. Разработка пользовательской функции потерь, которая находит правильные потери на двух выходах.

Вот демонстрационный код:

from tensorflow.keras.layers import Input, Dense, Add, Activation, Flatten
from tensorflow.keras.models import Model
import tensorflow as tf
import numpy as np
import random


from tensorflow.python.keras.layers import Input, GaussianNoise, BatchNormalization

# shared DNN, this is the base model with a feature-space output, there is only once instance of the model
ip = Input(shape=(32,32,1)) # same as original inputs
f0 = Flatten()(ip)
d0 = Dense(10)(f0) # 10 dimensional feature embedding
dnn = Model(ip, d0)

# final model with two version of images and loss

input_1 = Input(shape=(32,32,1))
input_2 = Input(shape=(32,32,1))

g0 = GaussianNoise(0.5)(input_2)  # only input_2 passes through gaussian noise layer, you can design your own custom layer too

# passing the two images to same DNN

path1 = dnn(input_1) # no noise
path2 = dnn(g0) # noise

model = Model([input_1, input_2], [path1, path2])

def my_loss(y_true, y_pred):
  # calculate your loss based on your two outputs path1, path2
  pass

model.compile('adam', my_loss)
model.summary()

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