• MindSpore:有关卷积层的问题


    问题描述:

    【功能模块】

    我想实现一个GAN相关网络,但目前的问题是Discriminator初始时每经过一层卷积,图像像素值会小一个数量级,经过多层卷积后,像素值会无限解禁0,再去进行sigmoid运算得到0.5,也就说无论什么图片进入Dsicriminator评分都是0.5,导致整个网络无法训练。请问遇到这种问题应该以什么样的思路解决呢?

    【操作步骤&问题现象】

    图片大小[64,3,88,88]

    网络结构

    class Discriminator(nn.Cell):

        def __init__(self):

            super(Discriminator, self).__init__()

            self.net = nn.SequentialCell(

                nn.Conv2d(3, 64, kernel_size=3, padding=1,pad_mode='pad'),

                nn.LeakyReLU(0.2),

              

                nn.Conv2d(64, 64, kernel_size=3, stride=2, padding=1,pad_mode='pad'),

                nn.BatchNorm2d(64,1e-05, momentum=0.1),

                nn.LeakyReLU(0.2),

            

                nn.Conv2d(64, 128, kernel_size=3, padding=1,pad_mode='pad'),

                nn.BatchNorm2d(128,eps=1e-05, momentum=0.1),

                nn.LeakyReLU(0.2),

                nn.Conv2d(128, 128, kernel_size=3, stride=2, padding=1,pad_mode='pad'),

                nn.BatchNorm2d(128,eps=1e-05, momentum=0.1),

                nn.LeakyReLU(0.2),

                nn.Conv2d(128, 256, kernel_size=3, padding=1,pad_mode='pad'),

                nn.BatchNorm2d(256,eps=1e-05, momentum=0.1),

                nn.LeakyReLU(0.2),

                nn.Conv2d(256, 256, kernel_size=3, stride=2, padding=1,pad_mode='pad'),

                nn.BatchNorm2d(256,eps=1e-05, momentum=0.1),

                nn.LeakyReLU(0.2),

                nn.Conv2d(256, 512, kernel_size=3, padding=1,pad_mode='pad'),

                nn.BatchNorm2d(512,eps=1e-05, momentum=0.1),

                nn.LeakyReLU(0.2),

                nn.Conv2d(512, 512, kernel_size=3, stride=2, padding=1,pad_mode='pad'),

                nn.BatchNorm2d(512,eps=1e-05, momentum=0.1),

                nn.LeakyReLU(0.2),

            

                nn.AvgPool2d(kernel_size=6, stride=1),   

                nn.Conv2d(512, 1024, kernel_size=1),

                nn.LeakyReLU(0.2),

                nn.Conv2d(1024, 1, kernel_size=1)        

            )

            

        def construct(self, x):

            y=self.net(x)

            batch_size = x.shape[0]

            sigmoid = nn.Sigmoid()

            output=sigmoid(y.view(batch_size))

            return output

    输出:0.5

    【截图信息】

    【日志信息】(可选,上传日志内容或者附件)

    解决方案:

    1. 增大输入图像size

    2. 减少判别器下采样次数或者Conv2d的stride>1次数,

  • 相关阅读:
    项目开发—变量规范
    企业复杂的数据治理需求,TempoDF让数据开发更简单!
    Mac上安装和配置Git
    【差旅游记】公乌素遇到的那些司机师傅
    10道集合框架面试题(含解析),来看看你会多少
    SparkSQL的Join的实现方式
    “秋天第一只大闸蟹”背后,看见京东一体化供应链
    责任链模式auto-pipeline工具使用及源码解析
    C语言,洛谷题:你的飞碟在这
    Linux下配置C语言编程环境
  • 原文地址:https://blog.csdn.net/skytttttt9394/article/details/126015329