как вызвать предварительно обученную модель декодера в пользовательской функции потерь в keras? - PullRequest
0 голосов
/ 25 мая 2020

Я обучил модель автокодировщика раньше и сохранил модель декодера. Затем я обучаю новую модель, обозначенную как «netA», я хочу использовать модель декодера в пользовательской функции потерь. и попытался, но получил ошибку, там был мой код и информация об ошибке:

def custom_loss(y_true,y_pred):
   a = decoder(y_pred)
   b = decoder(y_true)
   c  = K.mean(K.square(a-b))
return c
input_feature = 409
output_feature = 256

model = Sequential()
model.add(Dense(256, activation = 'relu',input_shape=(input_feature,)))
model.add(Dense(128, activation = 'relu'))


model.add(Dense(64))
model.add(BatchNormalization())
model.add(Activation('relu'))

model.add(Dense(128,activation='relu'))
model.add(Dense(output_feature,activation='sigmoid'))

model.summary()
model.compile(optimizer = Adam(lr = 1e-4),loss=custom_loss, metrics = ['mse'])

history = model.fit(x_train_pca_scale, y_train_scale_coding, epochs = 200, batch_size = 32, verbose= 2,validation_data = (x_test_pca_scale, y_test_scale_coding))

ошибка:

AssertionError Traceback (последний вызов последний) в модели 23 24 .summary () ---> 25 model.compile (optimizer = Adam (lr = 1e-4), loss = custom_loss, metrics = ['mse']) 26 #checkpointer = ModelCheckpoint (filepath = '/ home / lidan / 3DFacePrediction / gene.face.autoencoder / gene.face.min.val_loss.hd5 ', monitor =' val_loss ', verbose = 1, mode =' min ', save_best_only = True) 27

~ / software / anaconda3 / lib / python3 .7 / site-packages / keras / backend / tensorflow_backend.py в symbolic_fn_wrapper (* args, ** kwargs) 73, если _SYMBOLIC_SCOPE.value: 74 с get_graph (). as_default (): --- > 75 return fun c (* args, ** kwargs) 76 else: 77 return fun c (* args, ** kwargs)

~ / software / anaconda3 / lib / python3. 7 / site-packages / keras / engine / training.py в компиляции (self, optimizer, loss, metrics, loss_weights, sample_weight_mode, weighted_metrics, target_tensors, ** kwargs) 227 # loss_weight_2 * output_2_los s_fn (...) + 228 # потери слоя. -> 229 self.total_loss = self._prepare_total_loss (masks) 230 231 # Функции для обучения, тестирования и прогнозирования будут

~ / software / anaconda3 / lib / python3 .7 / site-packages / keras /engine/training.py в _prepare_total_loss (self, masks) 690 691 output_loss = loss_fn (-> 692 y_true, y_pred, sample_weight = sample_weight) 693 694 если len (self.outputs)> 1:

~ /software/anaconda3/lib/python3.7/site-packages/keras/losses.py в call (self, y_true, y_pred, sample_weight) 69 scope_name = 'lambda' if self.name = = '' else self.name 70 с K.name_scope (scope_name): ---> 71 loss = self.call (y_true, y_pred) 72 return loss_utils.compute_weighted_loss (73 потерь, sample_weight, reduce = self.reduction)

~ / software / anaconda3 / lib / python3 .7 / site-packages / keras / loss.py в вызове (self, y_true, y_pred) 130 значений потерь на выборку. 131 "" "-> 132 return self.fn (y_true, y_pred, ** self._fn_kwargs) 133 134 def get_config (self):

в custom_loss (y_true, y_pred) 3 def custom_loss (y_true, y_pred): 4 a = декодер (y_pred) ----> 5 b = декодер (y_true) 6 c = K.mean (K.square (ab)) 7 return c

~ /software/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py в symbolic_fn_wrapper (* args, ** kwargs) 73, если _SYMBOLIC_SCOPE.value: 74 с get_graph (). as_default (): ---> 75 return fun c (* args, ** kwargs) 76 else: 77 return fun c (* args, ** kwargs)

~ / software / anaconda3 / lib / python3 .7 / site-packages / keras / engine / base_layer.py in call (self, inputs, ** kwargs) 487 # Фактически вызываем слой, 488 # собираем выходные данные, маска ( s) и формы. -> 489 output = self.call (inputs, ** kwargs) 490 output_mask = self.compute_mask (inputs, previous_mask) 491

~ / software / anaconda3 / lib /python3.7/site-packages/keras/engine/network.py в вызове (себя, входы, маска) 581 ret urn self._output_tensor_cache [cache_key] 582 else: -> 583 output_tensors, _, _ = self.run_internal_graph (входы, маски) 584 return output_tensors 585

~ / software / anaconda3 / lib / python3 .7 / site-packages / keras / engine / network.py в run_internal_graph (self, input, masks) 796 input_shapes = unpack_singleton (797 [x._keras_shape для x в computed_tensors]) -> 798 shape = to_list (layer.compute_output_shape (input_shapes)) 799 uses_learning_phase = any (800 [x._uses_learning_phase для x в computed_tensors])

~ / программное обеспечение /anaconda3/lib/python3.7/site-packages/keras/layers/core.py в compute_output_shape (self, input_shape) 915 def compute_output_shape (self, input_shape): 916 assert input_shape и len (input_shape)> = 2 - -> 917 assert input_shape [-1] 918 output_shape = list (input_shape) 919 output_shape [-1] = self.units

AssertionError:

Я был сбит с толку информацией об ошибке , потому что модель декодера хорошо работала в y_pred и терпела неудачу в y_true.

Может ли кто-нибудь помочь мне решить эту проблему или просто дать мне другой способ поместить сохраненную модель декодера в функцию потери? Большое спасибо!

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