tensorflow 当训练自动编码器时,损耗很高且恒定,我在这里做错了什么

bxjv4tth  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(129)

我尝试使用自动编码器将数据集的维数从154减少到20或30。
数据集由用户行为特征组成,如上个月的支出、上个月的活动天数等。除此之外,我还生成了一些特征,如过去3个月的累计支出、上个月支出与上个月支出之间的差异。
我使用的代码是从kaggle笔记本(https://www.kaggle.com/code/ohseokkim/dectecting-anomaly-using-autoencoder?scriptVersionId=87181418)复制的
`

class AnomalyDetector(Model):
    def __init__(self):
        super(AnomalyDetector, self).__init__()
        self.encoder = tf.keras.Sequential([
          layers.Dense(128, activation="relu"),
          layers.Dense(64, activation="relu"),
          layers.Dense(32, activation="relu")])

        self.decoder = tf.keras.Sequential([
          layers.Dense(64, activation="relu"),
          layers.Dense(128, activation="relu"),
          layers.Dense(154, activation="sigmoid")])

    def call(self, x):
        encoded = self.encoder(x)
        decoded = self.decoder(encoded)
        return decoded

autoencoder = AnomalyDetector()

`
我的损失很高,而且没有随着时间的推移而改善。我在这里做错了什么。

Epoch 1/20
71/71 [==============================] - 1s 9ms/step - loss: 5351.0259 - val_loss: 5342.5894

我正在尝试寻找更好的方法来消除冗余列,同时不丢失重要信息

2skhul33

2skhul331#

根据我使用自动编码器的经验,它们往往有爆炸性的梯度,这有助于剪辑它们。

optimizer.zero_grad()
loss.backward()
torch.nn.utils.clip_grad_norm_(model.parameters(), 0.5)  # this part is what I am talking about
optimizer.step()

相关问题