Deep learning Pytork卷积自动编码器输出模糊。如何改进?

Deep learning Pytork卷积自动编码器输出模糊。如何改进?,deep-learning,conv-neural-network,pytorch,autoencoder,Deep Learning,Conv Neural Network,Pytorch,Autoencoder,我用Pytorch创建了卷积自动编码器,我正在努力改进它 对于编码层,我使用torchvision.models.ResNet中预先训练的ResNet 18 model的前4层 我的中间层只有一个卷积层,输入和输出通道大小为512。对于解码层,我使用卷积层以及BatchNorm和ReLU激活函数 解码层减少了每层的通道:512->256->128->64->32->16->3,并通过插值提高图像的分辨率,以匹配编码部分中对应层的尺寸。对于最后一层,我使用sigmoid而不是ReLu 所有卷积层都

我用Pytorch创建了卷积自动编码器,我正在努力改进它

对于编码层,我使用
torchvision.models.ResNet
中预先训练的
ResNet 18 model
的前4层

我的中间层只有一个
卷积层
,输入和输出通道大小为512。对于解码层,我使用
卷积层
以及
BatchNorm
ReLU
激活函数

解码层减少了每层的通道:
512->256->128->64->32->16->3
,并通过插值提高图像的分辨率,以匹配编码部分中对应层的尺寸。对于最后一层,我使用
sigmoid
而不是
ReLu

所有卷积层都是:

self.up = nn.Sequential(
                nn.Conv2d(input_channels, output_channels, 
                    kernel_size=5, stride=1,
                    padding=2, bias=False),
                nn.BatchNorm2d(output_channels),
                nn.ReLU()
            )
输入图像缩放到
[0,1]
范围,并具有
224x224x3
形状。样本输出为(第一个来自训练集,第二个来自测试集):


知道为什么输出模糊吗?所提供的模型已使用
Adam
优化器和
lr=0.00005
160个时代的
16000
图像进行了培训。我正在考虑在上面给出的
self.up
中再添加一个
卷积
层。这将增加模型的复杂性,但我不确定这是否是改进模型的正确方法。

您的解码层不应该有
ConvTranspose2d
?此外,resnet在开始时有一个7乘7卷积层和一个Maxpool层。那么,您在解码时考虑过这些问题吗(为了保持对称,尽管这不是强制性的)?此外,你可以尝试提高一点学习速度(可能是1e-4或5e-4)。自动编码器通常都很模糊。这难道不是开发GANs的动机吗?@akshayk07谢谢你的回答。我以前在其他任务中使用了
ConvTranspose2d
,但我发现通常
Conv2d
后跟
nn.functional.interpolate
效果更好。我会努力改变,使我保持对称。我使用了1e-3和1e-4,但我发现损失反弹太多,所以我使用了较小的学习率@jodag感谢您的回复。我试图查看其他自动编码器的输出,但它们也很模糊。我想我不能提高输出太多。我想问题是你想用这个自动编码器实现什么?您是否试图将数据投影到较低的维度,然后将其用于分类、回归等?如果你的复制品模糊不清,这可能无关紧要。你的解码层不应该有
ConvTranspose2d
?此外,resnet在开始时有一个7乘7卷积层和一个Maxpool层。那么,您在解码时考虑过这些问题吗(为了保持对称,尽管这不是强制性的)?此外,你可以尝试提高一点学习速度(可能是1e-4或5e-4)。自动编码器通常都很模糊。这难道不是开发GANs的动机吗?@akshayk07谢谢你的回答。我以前在其他任务中使用了
ConvTranspose2d
,但我发现通常
Conv2d
后跟
nn.functional.interpolate
效果更好。我会努力改变,使我保持对称。我使用了1e-3和1e-4,但我发现损失反弹太多,所以我使用了较小的学习率@jodag感谢您的回复。我试图查看其他自动编码器的输出,但它们也很模糊。我想我不能提高输出太多。我想问题是你想用这个自动编码器实现什么?您是否试图将数据投影到较低的维度,然后将其用于分类、回归等?如果你的复制品模糊不清,这可能无关紧要。