Я обнаружил некоторую странную активность, используя функцию add_loss в сравнении модели Keras с использованием loss = 'что-то вроде mse' в функции компиляции, когда я кодировал упражнения для авто-кодировщика.
Та же модель, которая используетДля потери в функции компиляции требуются y_train и y_test (если я использую validation_data) как обычно, но add_loss (mse (входы, выходы)) выдает ошибку, если я предоставляю данные y (y_train / y_test).
Вотпростой код, который я сделал, чтобы обучить mnist, сглаженный до 784 dim от 28 x 28.
общее тело примера кода следующее:
encode_dim = 32
inputs = Input(shape=(784,))
encoded = Dense(128, activation='relu')(inputs)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(encode_dim, activation='relu')(encoded)
encoder = Model(inputs=inputs, outputs=encoded)
print(encoder.summary())
encoded_inputs = Input(shape=(encode_dim, ))
decoded = Dense(64, activation='relu')(encoded_inputs)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='sigmoid')(decoded)
decoder = Model(inputs=encoded_inputs, outputs=decoded)
print(decoder.summary())
outputs = decoder(encoder(inputs))
ae = Model(inputs, outputs)
print(ae.summary())
с предоставлением потери по имени в функции компиляции будет выглядеть следующим образом:
ae.compile(optimizer='adam', loss='mse')
ae.fit(x_train, y_train, epochs=1, batch_size=256)
будет работать, 2. но в случае ниже:
ae_loss = mse(inputs, outputs)
ae.add_loss(ae_loss )
ae.compile(optimizer='adam')
ae.fit(x_train, y_train, epochs=1, batch_size=256)
будетвыдайте ошибку, как показано ниже:
Функция отслеживания ошибок ValueError (последний последний вызов) в 1test_flat, y_test = x_test_flat, ----> 3 эпохи = 1, batch_size = 1024, verbose = 1) 4 deep_vaestyle_model2.test (x_test = x_test_flat)
в поезде (self, x_train, y_train, x_test,y_test, epochs, batch_size, verbose) 16 histogram_freq = 0, 17 write_graph = True, ---> 18 write_grads = True, 19 # batch_size = batch_size, 20 # write_images = True
d: \ igs_projects \ realtime_eeg_anzer\ venv \ lib \ site-packages \ keras \ engine \ training.py вписывается (self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, ** kwargs) 950 sample_weight = sample_weight, 951 class_weight = class_weight, -> 952 batch_size = batch_size) 953 # Подготовить данные проверки.954 do_validation = False
d: \ igs_projects \ realtime_eeg_analyzer \ venv \ lib \ site-packages \ keras \ engine \ training.py в _standardize_user_data (self, x, y, sample_weight, class_weight, check_array_lengths, batch_ize)feed_output_shapes, 788 check_batch_axis = False, # Не применять размер пакета.-> 789 exception_prefix = 'target') 790 791 # Создать выборочные значения веса с учетом sample_weight
и
d: \ igs_projects \ realtime_eeg_analyzer \ venv \ lib \ site-packages \ keras \ engine \training_utils.py в standardize_input_data (данные, имена, формы, check_batch_axis, exception_prefix) 61 повысить ValueError («Ошибка при проверке модели» + 62 exception_prefix + ':' ---> 63 'не ожидала данных, но получила:', данные)64 возвращают [] 65, если данные отсутствуют:
ValueError: ('Ошибка при проверке целевого объекта модели: не ожидала данных, но получила:', массив ([[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ...,0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]]))
, но если яукажите y данных (y_train и y_test) как None, затем они будут работать так, как я ожидал.
Я попытался выяснить, почему керасы считают, что эти два различия, но я не смог.Может кто-нибудь объяснить ????