Я пытаюсь заставить мой код работать. По сути, когда я запускаю следующую функцию run_vae_sim, моя функция построения графиков не работает, несмотря на то, что я добавляю свои метрики в Keras. У меня есть предыдущие примеры, где я использовал метрики MSE по умолчанию в Keras, но они не работают для модели VAE, которую я генерирую ниже. (Модель VAE основана на 100% по сравнению с примером Keras из: https://keras.io/examples/variational_autoencoder/)
Почему объект истории не включает "mean_squared_error"? Всякий раз, когда я распечатываю ключи для объекта истории, появляется только «val_loss» и «loss»; несмотря на то, что я добавляю его при компиляции своей модели.
---> 72 plt.plot(history.history['mean_squared_error'])
73 plt.plot(history.history['val_mean_squared_error'])
74 plt.title('Model Mean-Squared-Error %s SNR: %s' % (names[cnt_index], snr))
KeyError: 'mean_squared_error'
'def run_vae_sim (X_train, X_test, y_train, y_test, original_dim, interval_dim, batch_size, latent_dim, epochs, use_mse = True):
# network parameters
input_shape = (original_dim, )
print('input_shape', input_shape)
# VAE model = encoder + decoder
# build encoder model
inputs = Input(shape=input_shape, name='encoder_input')
print('input_shape', input_shape)
x = Dense(intermediate_dim, activation='relu')(inputs)
z_mean = Dense(latent_dim, name='z_mean')(x)
z_log_var = Dense(latent_dim, name='z_log_var')(x)
# use reparameterization trick to push the sampling out as input
# note that "output_shape" isn't necessary with the TensorFlow backend
z = Lambda(sampling, output_shape=(latent_dim,), name='z')([z_mean, z_log_var])
# instantiate encoder model
encoder = Model(inputs, [z_mean, z_log_var, z], name='encoder')
encoder.summary()
plot_model(encoder, to_file='vae_mlp_encoder.png', show_shapes=True)
# build decoder model
latent_inputs = Input(shape=(latent_dim,), name='z_sampling')
x = Dense(intermediate_dim, activation='relu')(latent_inputs)
outputs = Dense(original_dim, activation='sigmoid')(x)
# instantiate decoder model
decoder = Model(latent_inputs, outputs, name='decoder')
decoder.summary()
plot_model(decoder, to_file='vae_mlp_decoder.png', show_shapes=True)
# instantiate VAE model
outputs = decoder(encoder(inputs)[2])
vae = Model(inputs, outputs, name='vae_mlp')
# VAE loss = mse_loss or xent_loss + kl_loss
if use_mse:
reconstruction_loss = mse(inputs, outputs)
else:
reconstruction_loss = binary_crossentropy(inputs,
outputs)
models = (encoder,decoder)
data = (X_test, y_test)
reconstruction_loss *= original_dim
kl_loss = 1 + z_log_var - K.square(z_mean) - K.exp(z_log_var)
kl_loss = K.sum(kl_loss, axis=-1)
kl_loss *= -0.5
vae_loss = K.mean(reconstruction_loss + kl_loss)
vae.add_loss(vae_loss)
vae.compile(optimizer=Adam, metrics=['mse', 'mean_squared_error'])
vae.summary()
plot_model(vae,
to_file='vae_mlp.png',
show_shapes=True)
history = vae.fit(X_train,
epochs=epochs,
batch_size=batch_size,
validation_data=(X_test, None))
#vae.save_weights('vae_mlp_mnist.h5')
fig = plt.figure()
ax = plt.gca()
ax.set_ylim(0, 1)
print('history:', history.history.keys())
plt.plot(history.history['mean_squared_error'])
plt.plot(history.history['val_mean_squared_error'])
plt.title('Model Mean-Squared-Error %s SNR: %s' % (names[cnt_index], snr))
plt.ylabel('MSE')
plt.xlabel('Epoch')
plt.legend(['MSE', 'Validation MSE'], loc = 'upper left')
plt.show()
`