已经入住生信、机器学习的新手村,目前MATLAB会一点点,python 和 R语言还在入门阶段,未来在博客中会记录学习到的新知识或者不会解决的问题,也同时也作为自己的备忘录和资源库。还没有出新手村,若内容有误欢迎在评论区指出,给我狠狠的喷!
AE可以说是深度学习模型最基础的骨架,也是初学者必须要掌握的框架之一,通过多层神经网络的堆叠,可以实现对原始数据的特征提取,有利于分类聚类等下游分析任务的开展。
代码如下(示例):
## 1.引入库
import numpy as np
import torch
import torch.nn.functional as F
## 2.创建 类
class AE(nn.Module):
def __init__(self, input_dim, hidden1, hidden2, hidden3, emb_size, dropout_rate):
super(AE, self).__init__()
self.in_dim = input_dim
## Encoder
self.fc_encoder = nn.Sequential(
nn.Linear(self.in_dim, hidden1),
nn.ReLU(),
nn.Dropout(p=dropout_rate),
nn.Linear(hidden1, hidden2),
nn.ReLU(),
nn.Dropout(p=dropout_rate),
nn.Linear(hidden2, hidden3),
nn.ReLU(),
nn.Dropout(p=dropout_rate),
nn.Linear(hidden3, emb_size),
nn.ReLU(),
nn.Dropout(p=dropout_rate),
)
## Decoder
self.fc_decoder = nn.Sequential(
nn.Linear(emb_size, hidden3),
nn.ReLU(),
nn.Dropout(p=dropout_rate),
nn.Linear(hidden3, hidden2),
nn.ReLU(),
nn.Dropout(p=dropout_rate),
nn.Linear(hidden2, hidden1),
nn.ReLU(),
nn.Dropout(p=dropout_rate),
nn.Linear(hidden1, self.in_dim),
nn.ReLU(),
nn.Dropout(p=dropout_rate),
)
def forward(self, x):
emb = self.fc_encoder(x)
recon_x = self.fc_decoder(emb)
return emb, recon_x
代码如下(示例):
if __name__ == "__main__":
## 利用GPU加速
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print('===== Using device: ' + device)
#############################
# 在这里你可以加在自己的数据 ##
#############################
model = AE(input_dim,
hidden1=1000,
hidden2=500,
hidden3=200,
emb_size=50,
dropout_rate1=0.1
).to(device)
## 打印model可以查看model的结构
print(model)
## 训练 model
for epoch in range(params.epoch1):
total_loss = 0
optimizer.zero_grad()
emb, recon_x = model(x)
loss_ae = F.mse(recon_x, x)
loss.backward()
optimizer.step()
## 打印训练过程
print("epoch {} loss={:.4f} ".format(epoch, lossae))
以上就是今天要讲的内容,本文简单介绍了如何创建并训练一个AE模型,有时间继续分享其他有价值的内容。