gpt4 book ai didi

python - 自动编码器损失没有减少(并且开始非常高)

转载 作者:行者123 更新时间:2023-11-30 08:32:13 25 4
gpt4 key购买 nike

我有以下函数,应该自动编码我的数据。

我的数据可以被认为是一个长度为100,宽度为2的图像,并且它有2个 channel (100,2,2)

def construct_ae(input_shape):
encoder_input = tf.placeholder(tf.float32, input_shape, name='x')
with tf.variable_scope("encoder"):
flattened = tf.layers.flatten(encoder_input)
e_fc_1 = tf.layers.dense(flattened, units=150, activation=tf.nn.relu)
encoded = tf.layers.dense(e_fc_1, units=75, activation=None)

with tf.variable_scope("decoder"):
d_fc_1 = tf.layers.dense(encoded, 150, activation=tf.nn.relu)
d_fc_2 = tf.layers.dense(d_fc_1, 400, activation=None)
decoded = tf.reshape(d_fc_2, input_shape)

with tf.variable_scope('training'):
loss = tf.losses.mean_squared_error(labels=encoder_input, predictions=decoded)
cost = tf.reduce_mean(loss)

optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)
return optimizer

我遇到的问题是我的成本约为 1.1e9,并且不会随着时间的推移而减少

cost over time

我可视化了渐变(删除了代码,因为它只会让事情变得困惑),我认为那里出了什么问题?但我不确定

enter image description here

问题

1) 网络构建中是否有任何地方看起来不正确?

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

3) 当我尝试将学习率提高到 1 时,有时会遇到 NaN。这是否表明了什么?

4) 我认为我应该使用 CNN,但我遇到了同样的问题,所以我想我会转向 FC,因为它可能更容易调试。

5)我想我使用了错误的损失函数,但我找不到任何关于正确使用损失函数的论文。如果有人能指导我找到一个,我将非常感激

最佳答案

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

就高启动误差而言;这一切都取决于你的参数的初始化。良好的初始化技术可以让您开始的错误与所需的最小值相差不远。然而,默认的随机或基于零的初始化几乎总是会导致这种情况。

关于python - 自动编码器损失没有减少(并且开始非常高),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51234934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com