关注我的公众号YueTan进行交流探讨
AutoEncoder可以去噪、降维、异常检测
方式一
首先要构建其中的encoder部分,输入到embed。这部分是Autoencoder进行训练,得到降维后的特征representation。之后再接上MLP、CNN等继续训练得到最终label。
之后,在encoder部分后接decoder部分。其中decoder的输出要开始的输入一样。
训练autoencoder时,对于监督训练,可以同时把输入的x和目标的y作为目标。因此除了decoder得到一个重构的x之外,还可以再decoder之上继续加几层,让ae模型也学习到样本的标签。此时模型的关系就是
model.fit(X, (X, y))
这里值得注意的是,如果y是类别型,最后从decoder出来的层就需要sigmoid,或bce loss.
同时继续下一步的时候,可以从encoder部分接下一阶段模型,也可以从decoder部分接下一阶段模型。但都需要是接y输出之前。
在第二阶段时,输入先接第一阶段的带权重的encoder,甚至是encoder和原始输入的concat。之后接MLP或CNN等模型
方式二
方式二和方式一的主要区别在于单阶段训练。这样一来,相当于避免train和test一起可能有泄漏。
输入首先接encoder层,然后是decoder得到重构的x,然后继续接重构的y。紧接着就接初始输入和encoder层的concat,接着是MLP或CNN。
但同时,decoder的x要输出,decoder的y也输出,最终预测的y也进行输出。
model.fit(X, (X, y, y))
预测时,取model.predict(x_test)[-1],即只选取预测的y
方式三
使用train, test的全部数据,出了方式一,也可以用方式三。用全部数据进行降噪自回归的预训练。
ae模型训练的时候,也可以把train和test在一个epoch里,分别加上去训练。
encoder = Encoder()
model = AEEncoder(encoder)
for epoch in range(10):
model.fit(x_train, x_train[:, 0])
model.fit(x_valid, x_valid[:, 0])
encoder.save_weights("./encoder.weights")
后续倒入encoder的权重之后,再接其他的模型进行表示学习。
应用
autoencoder可直接用于异常检测,https://aistudio.baidu.com/aistudio/projectdetail/4522476