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

本文为生信和机器学习新手讲解了如何用Python的PyTorch实现基础的Auto-Encoder模型,包括模型结构、代码实现和训练步骤,适合AE初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

已经入住生信、机器学习的新手村,目前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模型,有时间继续分享其他有价值的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值