【问题标题】:Tensorflow major difference in loss between machinesTensorFlow 机器之间损失的主要区别
【发布时间】:2017-11-13 23:51:30
【问题描述】:

我使用 Tensorflow 作为后端在 Keras 中编写了一个变分自动编码器。作为优化器,我使用 Adam,学习率为 1e-4,批量大小为 16。当我在 Macbook 的 CPU(英特尔酷睿 i7)上训练网络时,一个 epoch(约 5000 个小批量)后的损失值小 2 倍比在运行 Ubuntu 的另一台机器上的第一个纪元之后。对于另一台机器,我在 CPU 和 GPU(Intel Xeon E5-1630 和 Nvidia GeForce GTX 1080)上都得到了相同的结果。 Python 和我正在使用的库具有相同的版本号。两台机器都使用 32 位浮点数。如果我使用不同的优化器(例如 rmsprop),机器之间的显着差异仍然存在。我正在设置 np.random.seed 以消除随机性。

我的网络输出logits(我在输出层有线性激活),损失函数是tf.nn.sigmoid_cross_entropy_with_logits。最重要的是,一层有一个正则化器(其激活之间的 KL 散度,它是高斯分布的参数,和零均值高斯)。

损失价值出现重大差异的原因可能是什么?

【问题讨论】:

  • 您能否提供更多关于您的数据和第一个 epoch 之后的训练历史的详细信息?
  • 你是否也在为数据洗牌队列设置种子?

标签: python machine-learning tensorflow keras autoencoder


【解决方案1】:

我使用的数据集是单个 .mat 文件,使用 scipysavemat 创建并加载 loadmat。它是在我的 Macbook 上创建的,并通过 scp 分发给其他机器。原来问题出在这个.mat 文件上(虽然我不知道具体是什么)。我已从 .mat 文件切换,现在一切都很好。

【讨论】:

  • 当你说“相同的结果”时,你是指在 CPU 和 GPU 上训练它时获得的确切权重吗?
猜你喜欢
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 2017-11-24
  • 1970-01-01
  • 2018-08-09
相关资源
最近更新 更多