Pytorch实现基础的深度学习框架----AutoEncoder

文章目录

  • 前言
  • 一、Auto-Encoder
  • 二、创建一个AE模型并训练
  • 总结


前言

已经入住生信、机器学习的新手村,目前MATLAB会一点点,python 和 R语言还在入门阶段,未来在博客中会记录学习到的新知识或者不会解决的问题,也同时也作为自己的备忘录和资源库。还没有出新手村,若内容有误欢迎在评论区指出,给我狠狠的喷!


一、Auto-Encoder

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

二、创建一个AE模型并训练

代码如下(示例):

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模型,有时间继续分享其他有价值的内容。

你可能感兴趣的:(深度学习,pytorch)