torch实现自编码器_Pytorch-自编码器与变分自编码器

本文介绍了如何使用 Pytorch 实现自编码器(AE)和变分自编码器(VAE)。自编码器的编码器部分包含多个线性层,将输入映射到低维表示,而解码器则将低维表示还原回原始输入。变分自编码器在编码阶段使用重参数化技巧,并通过KL散度计算来优化模型。在MNIST数据集上的实验中,展示了AE和VAE的训练过程及损失变化。
摘要由CSDN通过智能技术生成

提前导包:

1 importtorch2 from torch importnn, optim3 from torch.utils.data importDataLoader4 from torchvision importtransforms, datasets5

6 import visdom

1.自编码器(Auto-Encoder)

1 classAE(nn.Module):2

3 def __init__(self):4 super(AE, self).__init__()5

6 #[b, 784] => [b, 20]

7 self.encoder =nn.Sequential(8 nn.Linear(784, 256),9 nn.ReLU(),10 nn.Linear(256, 64),11 nn.ReLU(),12 nn.Linear(64, 20),13 nn.ReLU()14 )15 #[b, 20] => [b, 784]

16 self.decoder =nn.Sequential(17 nn.Linear(20, 64),18 nn.ReLU(),19 nn.Linear(64, 256),20 nn.ReLU(),21 nn.Linear(256, 784),22 nn.Sigmoid()23 )24

25 def forward(self, x): #x.shape=[b, 1, 28, 28]

26

27 batchsz =x.size(0)28 x = x.view(batchsz, 784) #flatten

29 x = self.encoder(x) #encoder [b, 20]

30 x = self.decoder(x) #decoder [b, 784]

31 x = x.view(batchsz, 1, 28, 28) #reshape [b, 1, 28, 28]

32

33 return x, None

2.变分自动编码器(Variational Auto-Encoder)

代码中的h和图中的ci,计算方法略有不同,代码中没有用指数。

KL散度计算公式(代码中与sigma相乘的torch.randn_like(sigma

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值