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


前言

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一个非常强大的深度学习框架,可以用于实现自编码器。自编码器是一种无监督学习模型,可以用于特征提取、数据压缩和生成新样本等任务。 下面是一个使用PyTorch实现自编码器的简单示例: ```python import torch import torch.nn as nn # 定义自编码器模型 class Autoencoder(nn.Module): def __init__(self, input_size, hidden_size): super(Autoencoder, self).__init__() self.encoder = nn.Linear(input_size, hidden_size) self.decoder = nn.Linear(hidden_size, input_size) def forward(self, x): encoded = self.encoder(x) decoded = self.decoder(encoded) return decoded # 示例数据 input_size = 784 # 输入数据大小,MNIST手写数字数据集的图片大小为28x28=784 hidden_size = 128 # 隐层大小 # 构建自编码器模型 model = Autoencoder(input_size, hidden_size) # 定义损失函数和优化器 criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # 训练自编码器 num_epochs = 10 for epoch in range(num_epochs): for data in dataloader: # dataloader为数据加载器,用于加载训练数据 inputs, _ = data # 输入数据 inputs = inputs.view(inputs.size(0), -1) # 将输入数据展平为一维向量 # 前向传播 outputs = model(inputs) loss = criterion(outputs, inputs) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) ``` 上述代码,我们首先定义了一个名为`Autoencoder`的自编码器模型,其包含一个编码器和一个解码器。然后我们定义了损失函数和优化器,并在训练循环进行前向传播、计算损失、反向传播和优化。 这只是一个简单的示例,你可以根据自己的需求进行模型的设计和训练。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值