pytorch深度学习:自编码器Auto-encoder(二)

本文介绍了如何在PyTorch中构建自编码器(Auto-encoder)来处理MNIST数据集。目标包括使用编码器获取压缩特征,以及用解码器生成MNIST图像。文章详细说明了模型搭建、损失函数定义以及结果展示,展示了无监督学习在图像压缩和重构方面的效果。

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

上一节我们了解了自编码器的基础知识,这一节我们在pytorch上创建一个自编码器用于处理mnist数据集。

1.问题的描述

关于mnist数据集在这里就不再描述了,相信大家已经很熟悉了。今天使用自编码器有两个目的,即:

  • 使用encoder显示压缩的特征数据。
  • 使用decoder生成mnist数据集。

先对一些超参数进行设置:

# 定义一些超参数
EPOCH = 10
BATCH_SIZE = 64
LR = 0.005
DOWNLOAD_MNIST = True   # 下过数据的话, 就可以设置成 False
N_TEST_IMG = 5          # 显示5张图片看效果

数据集准备过程和之前的也一样,不过我们这里不需要测试集,只需要训练集,而且只需要训练集的图片不需要标签。

2.AE的模型搭建

模型由两部分组成,编码器(encoder)解码器(decoder),它们是两个相反的流程。encoder将28×28的数据压缩成3个数据,decoder将3个数据扩展为28×28个数据。

class AutoEncoder(nn.Module):
    def __init__(self):
        super(AutoEncoder,self).__init__()
        # 编码器
        self.encoder = nn.Sequential(
            nn.Linear(28*28,128),
            nn.Tanh(),
            nn.Linear(128,64),
            nn.Tanh(),
            nn.Linear(64,12),
            nn.Tanh(),
            nn.Linear(12,3)          # 压缩成3个特征, 进行 3D 图像可视化
        )
        # 解码器
        self.decoder = nn.Sequential(
            nn.Linear(3,12),
            nn.Tanh(),
            nn.Linear(12,64),
            nn.Tanh(),
            nn.Linear(64,128),
            nn.Tanh(),
            nn.Linear(128,28*28),
            nn.Sigmoid()             # 激励函数让输出值在 (0, 1)
        )

    def forward(self,x):
        encodered = self.encoder(x)
        decodered = self.decoder(encodered)

        return encodered,decodered

网络模型的最后要输出两个值encodered,decodered,分别为编码器和解码器的输出值。要注意的是在decoder的最后一层激励函数是sigmoid,就是让输出在0-1区间,表示解压后像素的灰度值。

3.AE的结果展示

训练过程还是和之前有些差异的,因为AE进行的是无监督学习,因此它的X,Y数据用的是同一个:

b_x 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值