在里面训练神经网络的区别,如果__name__=='__main__'和没有它



如果有人能解释一下这段代码与之间的区别,我将不胜感激

models = (encoder, decoder)
data = (x_test, y_test)
# VAE loss = mse_loss or xent_loss + kl_loss
reconstruction_loss = mse(inputs, outputs)
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')
# train the autoencoder
vae.fit([x_train,y_train_1hot],
epochs=epochs,
batch_size=batch_size,
validation_data=([x_test,y_test], None))

而这个-

if __name__ == '__main__':
parser = argparse.ArgumentParser()
help_ = "Load h5 model trained weights"
parser.add_argument("-w", "--weights", help=help_)
help_ = "Use mse loss instead of binary cross entropy (default)"
parser.add_argument("-m",
"--mse",
help=help_, action='store_true')
args = parser.parse_args(args=[])
models = (encoder, decoder)
data = (x_test, y_test)
# VAE loss = mse_loss or xent_loss + kl_loss
if args.mse:
reconstruction_loss = mse(inputs, outputs)
else:
reconstruction_loss = binary_crossentropy(inputs,
outputs)
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')
#if args.weights:
#vae.load_weights(args.weights)
#else:
# train the autoencoder
vae.fit([x_train,y_train_1hot],
epochs=epochs,
batch_size=batch_size,
validation_data=([x_test,y_test_1hot], None))
#vae.save_weights('vae_mlp_mnist.h5')

据我所知,它们都是相同的,我没有保存权重,并且已经对加载权重代码进行了评论,尽管重建看起来相同,但两者的验证损失却不同。我不明白为什么。

如果使用python <yourmodule> --mse运行第二个代码段,应该没有什么区别(否则,第二个片段默认为二进制交叉熵,而第一个片段始终使用mse(。

除此之外,if __name__ == '__main__'保护仅更改脚本的行为,使得所包含的代码仅在模块(文件(运行时执行。也就是说,当导入模块时,第一个片段会被执行,第二个片段不会。

相关内容