关于卷积逆变换《pytorch学习篇》

引言:在我们进行关于卷积的学习过程中,总是充满好奇,尤其是在学习深度学习的过程中,哇哦!太神奇了,你输入一张图像给深度学习网络,它就会输出一张标有类别的输出图像(例如图像中有一只猫,输出图像就会使用矩形框标出猫所在的位置,并且在矩形框的上方给出识别结果:猫  这个种类)。但是关于卷积的部分学习,我只是知道:对一幅图像使用一个卷积核从上到下、从左到右不停地滑动,最后的输出图像就是卷积后的图像,但是对于输入图像的尺度总是不断地在缩小(不包括padding状态,因为它给图像填充的是黑白两种值,没有特殊的函数,并不能表示为图像的特征),也就是我们常见的(256,256)---》(128,128)----》(64,64)这类。我们能不能进行反变换,从(64,64)----》(128,128)----》(256,256),答案是可以的(我今天才发现,才疏学浅啦啦啦),下面一起来看看吧!!!

        说了这么多,举个例子:(一目了然)

小怕们,快上车,抱紧我,要开车了。

1.先看效果图: 

 输入图像进入网络卷积后的图像

 卷积逆变换后的图像

      解释:  这幅图像是使用上面卷积网络的输出图像作为卷积逆变换网络的输入图像,然后经过逆变换的结果。

(一脸**)

2.详细过程:

输入图像----》卷积网络----》输出(作为逆变换网络的输入)-------》逆变换网络------最终输出。

(奥,原来如此,明白了,那具体的实现过程呢?)

不急!请看:

import torch
from torch import nn


class inverse_conv(nn.Module):

    def __init__(self):
        super(inverse_conv,self).__init__()
        self.layers1=nn.Sequential(
            nn.ConvTranspose2d(512, 128, (2, 2), stride=(2, 2)),
            nn.ReLU(inplace=True)
        )
        self.layers2 = nn.Sequential(
            nn.ConvTranspose2d(128, 64, (2, 2), stride=(2, 2)),
            nn.ReLU(inplace=True)
        )
        self.layers3 = nn.Sequential(
            nn.ConvTranspose2d(64, 32, (2, 2), stride=(2, 2)),
            nn.ReLU(inplace=True)
        )
        self.layers4 = nn.Sequential(
            nn.ConvTranspose2d(32, 3, (2, 2), stride=(2, 2)),
            nn.ReLU(inplace=True)
        )
    def forward(self,input):
        x=self.layers1(input)
        x=self.layers2(x)
        x=self.layers3(x)
        output=self.layers4(x)
        return output

#我们的故事还很多,待续。。。

3.重要的是=结束。

GAME OVER

如果理解错误,欢迎大家批评,及时纠正小琼的错误哦,真心感谢你的纠正!!!

如果小伙伴梦有疑问欢迎在评论区留言哦!!!

如果感觉不错的话!点个赞呗,不用客气!(O(∩_∩)O哈哈~)

欢迎和小伙伴梦一起学习,共同努力,加油!!!
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值