自动编码器的损耗没有减少(并且开始时很高)

时间:2018-07-08 18:30:26

标签: python tensorflow machine-learning

我有以下功能应该可以自动编码我的数据。

我的数据可以看作是长100,宽2的图像,它有2个通道(100、2、2)

constructor

我遇到了一个问题,我的费用大约为1.1e9,而且随着时间的推移并没有减少

cost over time

我可视化了渐变(删除了代码,因为它只会使事情变得混乱),我认为那里有问题吗?但是我不确定

enter image description here

问题

1)网络结构中的任何内容看起来都不正确吗?

2)数据是否需要在0-1之间归一化?

3)当我尝试将学习率提高到1时,有时会遇到NaN。这是否表明有任何意义?

4)我认为我可能应该使用CNN,但是我遇到了同样的问题,因此我认为我将改用FC,因为它可能更易于调试。

5)我想我正在使用错误的损失函数,但是我找不到真正有关正确使用损失的论文。如果有人可以指导我,我将非常感激

1 个答案:

答案 0 :(得分:0)

  1. 鉴于这是一种普通的自动编码器,而不是卷积的自动编码器,所以您不应期望良好的(低)错误率。
  2. 规范化确实可以使您更快地收敛。但是,考虑到您的最后一层没有激活函数来在输出上强制设置范围,这应该不是问题。但是,请尝试将数据标准化为[0,1],然后在最后一个解码器层中使用S型激活。
  3. 很高的学习率可能会使您陷入优化循环和/或使您离任何局部最小值都太远,从而导致极高的错误率。
  4. 大多数博客(例如Keras)都使用“ binary_crossentropy”作为其损失函数,但MSE并非“错误”

就高启动误差而言;这完全取决于您的参数的初始化。好的初始化技术可以使您开始的错误与期望的最小值之间相差不远。但是,默认的随机或基于零的初始化几乎总是会导致这种情况。