对字节序列分类训练自编码器的问题

2024-04-19 23:50:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个分类任务,它使用字节序列作为样本。通过对每个字节x应用x/255,可以将一个字节序列标准化为神经网络的输入。这样,我训练了一个简单的MLP,准确率约为80%。然后,我训练了一个自动编码器使用'mse'损失的全部数据,看看它是否工作得很好的任务。我冻结编码器层的权重,并添加一个softmax稠密层进行分类。我重新训练了新模型(只训练了最后一层),令我惊讶的是,结果比MLP差得多,只有60%的准确率。你知道吗

自动编码器不能从所有数据中学习好的特性吗?为什么结果如此糟糕?你知道吗


Tags: 数据模型字节分类序列神经网络特性编码器
2条回答

可能采取的措施:

  • 检查自动编码器的错误,它真的能预测自己吗?你知道吗
  • 可视化自动编码器结果(维数减少),是否用较少的维数解释差异?你知道吗
  • 使模型更复杂并不一定比简单的模型好,你是否绘制了验证mse与epoch的对比图?经过若干步骤后,是否存在全局最小值?你知道吗
  • 你有足够的时代吗?你知道吗
  • 你的自动编码器有多少个单位?它可能太少(或者太多,如果拟合不足),这取决于数据的行为和数据量。你知道吗
  • 您是否与PCA、NMF等其他降维方法进行了比较?你知道吗
  • 最后但并非最不重要的是,这是最好的方式来工程与自动编码器为这项任务的特点?

“为什么结果这么糟糕?”这其实并不意外。你已经训练了一个模型,使其善于压缩信息。它在每一层学习到的转换对于任何其他类型的任务都不一定是好的。事实上,它可能会丢弃大量的信息,这些信息对于您所拥有的任何辅助分类任务都非常有用,但对于纯粹压缩和重建序列的任务来说,这些信息是不需要的。你知道吗

与其通过训练一个单独的自动编码器来实现它,不如直接将MLP层中的稀疏性惩罚项添加到损失函数中,或者使用其他类型的正则化,比如dropout。最后,您可以考虑更高级的网络体系结构,如ResNet/ODE层或Inception层,这些结构针对1D序列进行了修改。你知道吗

相关问题 更多 >