gpt4 book ai didi

python - 如何解决训练时损失不下降的问题

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:58 24 4
gpt4 key购买 nike

当我训练自动编码器时,无论我训练多少,损失都不会改变。

#Importing training data
inp = open('train.csv',"rb")
X = pickle.load(inp)
X = X/255.0
X = np.array(X)
X = np.reshape(X,(-1,25425))


input_img =tf.keras.layers.Input(25425,)
encoded1 = tf.keras.layers.Dense(75,activation=tf.nn.relu)(input_img)
encoded2 = tf.keras.layers.Dense(50,activation=tf.nn.relu)(encoded1)
decoded = tf.keras.layers.Dense(25425, activation='sigmoid')(encoded2)
# The input of the autoencoder is the image (input_img), and the output is the decoder layer (decoded)
autoencoder = tf.keras.Model(input_img, decoded)

encoder = tf.keras.Model(input_img, encoded2)

encoded_input = tf.keras.layers.Input(shape=(50,))
# The decoded only consists of the last layer
decoder_layer = autoencoder.layers[-1](encoded_input)
# The input to the decoder is the vector of the encoder which will be fed (using encoded_input), the output is the last layer of the network (decoder_layer)
decoder = tf.keras.Model(encoded_input, decoder_layer)

autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
autoencoder.fit(X, X, epochs=50, shuffle=True)

# Save the weights
autoencoder.save_weights('model_weights.h5')

# Save the model architecture
with open('model_architecture.json', 'w') as f:
f.write(autoencoder.to_json())

我希望训练能够更好地发挥作用,但我的损失一直停留在 0.6932

最佳答案

自动编码器的任务是压缩输入大小,同时最大限度地减少信息丢失。您的解码器尝试做的是仅从 50 点重建 25425 点 - 这超过了500 倍压缩,这是非常不现实的。我还假设您的输入在 (0,1) 之间标准化,因为 sigmid 无法超出范围。

解决方案:更改解码器编码器的单位数量,以便比率input_dim/min_units“合理”(例如,5 :1)。 min_units = 具有最少单元(编码器或解码器)的层的单元数 - 在您的情况下,为 50。(注意:25425 相当大 - 考虑通过下采样(例如 MaxPooling)或使用卷积自动编码器来降低维度

关于带有 sigmoid 的 ReLU,两者都可以使用,但是在 ReLU 中爆炸梯度/激活时要小心,例如:重量衰减 - 参见 this discussion .

关于python - 如何解决训练时损失不下降的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57642762/

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