Deep learning Pytork卷积自动编码器输出模糊。如何改进?
我用Pytorch创建了卷积自动编码器,我正在努力改进它 对于编码层,我使用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 所有卷积层都
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感谢您的回复。我试图查看其他自动编码器的输出,但它们也很模糊。我想我不能提高输出太多。我想问题是你想用这个自动编码器实现什么?您是否试图将数据投影到较低的维度,然后将其用于分类、回归等?如果你的复制品模糊不清,这可能无关紧要。