深度学习代码学习(一文真正看懂卷积层的代码定义)

这篇具有很好参考价值的文章主要介绍了深度学习代码学习(一文真正看懂卷积层的代码定义)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一维卷积:

将n行3列升维到n行6列。(原因:卷积核为6个)

*表示点乘

深度学习代码学习(一文真正看懂卷积层的代码定义),深度学习过程记录,深度学习,学习,人工智能

 Linear线性层:

(通过矩阵计算改变输入输出特征向量的维度)

Pytorch nn.Linear的基本用法与原理详解-CSDN博客 

pytorch初学笔记(十二):神经网络基本结构之线性层-CSDN博客

二维卷积:

torch学习 (十六):二维卷积层_torch 二维卷积定义-CSDN博客

 神经网络基本搭建:torch.nn

对类初始化讲解的好的文章:

 解惑(一) ----- super(XXX, self).__init__()到底是代表什么含义_super(,self).__init__-CSDN博客

 CONV1D一维卷积神经网络运算过程(举例:n行3列➡n行6列)-CSDN博客

神经网络的基本框架的搭建-nn.Module-CSDN博客

神经网络类定义举例:
# Convolution operation
class ConvLayer(torch.nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size, stride, is_last=False):
        super(ConvLayer, self).__init__()
        reflection_padding = int(np.floor(kernel_size / 2))
    #np.floor()向下取整
    #kernel_size 卷积核的大小
        self.reflection_pad = nn.ReflectionPad2d(reflection_padding)
        self.conv2d = nn.Conv2d(in_channels, out_channels, kernel_size, stride)
        self.dropout = nn.Dropout2d(p=0.5)
        self.is_last = is_last

    def forward(self, x):
        out = self.reflection_pad(x)
        out = self.conv2d(out)
        if self.is_last is False:
            # out = F.normalize(out)
            out = F.relu(out, inplace=True)
            # out = self.dropout(out)
        return out

上面的代码定义了一个卷积操作类;

class ConvLayer(torch.nn.Module):

定义了类ConvLayer,继承自torch.nn.Module,也就是说torch.nn.Module是类ConvLayer的父类。

  def __init__(self, in_channels, out_channels, kernel_size, stride, is_last=False):
        super(ConvLayer, self).__init__()
        reflection_padding = int(np.floor(kernel_size / 2))
    #np.floor()向下取整
    #kernel_size 卷积核的大小
        self.reflection_pad = nn.ReflectionPad2d(reflection_padding)
        self.conv2d = nn.Conv2d(in_channels, out_channels, kernel_size, stride)
        self.dropout = nn.Dropout2d(p=0.5)
        self.is_last = is_last

定义了ConvLayer的类初始化函数,在创建ConvLayer对象时自动调用,也就是说在创建对象的时候自己就初始化了,不需要再使用init函数。

 def __init__(self, in_channels, out_channels, kernel_size, stride, is_last=False):

括号中是可以传入的参数。

super(ConvLayer, self).__init__()

这句代码的意思是说要将ConvLayer的实例(对象)self,转化为它的父类对象,也就是torch.nn.Module,再进行初始化。

 reflection_padding = int(np.floor(kernel_size / 2))
reflection_padding=1
self.reflection_pad = nn.ReflectionPad2d(reflection_padding)
        self.conv2d = nn.Conv2d(in_channels, out_channels, kernel_size, stride)
        self.dropout = nn.Dropout2d(p=0.5)
        self.is_last = is_last

在初始化中对ConvLayer的对象定义了四个属性,

reflection_pad属性:只往左右填充宽度为1的元素。

深度学习代码学习(一文真正看懂卷积层的代码定义),深度学习过程记录,深度学习,学习,人工智能

反射填充详解ReflectionPad2d(padding)-CSDN博客

conv2d属性:二维卷积
dropout属性:把某个张量置0

(Pytorch)nn.Dropout以及Dropout1d,Dropout2d,Dropout3d是什么意思_nn.dropout2d-CSDN博客

is_last属性:是不是最后一层
  def forward(self, x):
        out = self.reflection_pad(x)
        out = self.conv2d(out)
        if self.is_last is False:
            # out = F.normalize(out)
            out = F.relu(out, inplace=True)
            # out = self.dropout(out)
        return out

前向传播函数:self是类实例本身,x是传进来的参数。

将反射填充x后的ConvLayer类实例赋值给out,

对out进行2d卷积,

判断是不是最后一层卷积层,如果不是,对刚卷积的结果进行relu激活。

inplace为True,将会改变输入的数据 ,否则不会改变原输入,只会产生新的输出。

激活函数(ReLU):nn.ReLU(inplace=True)-CSDN博客

forward的返回结果为out。

总结:

init函数基本上定义的是类对象可以使用的参数和方法,(也就是说定义完实例对象实例对象拥有了一些参数和可以使用的功能),

然后使用这些参数和方法的是实例对象的forward函数。

实例对象通过调用forward函数来实现真正的卷积层。文章来源地址https://www.toymoban.com/news/detail-792550.html

到了这里,关于深度学习代码学习(一文真正看懂卷积层的代码定义)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包