ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

神经网络基本骨架、结构的使用

2022-01-26 22:59:39  阅读:156  来源: 互联网

标签:12 tensor nn torch 骨架 stride 神经网络 input 结构


目录

神经骨架的使用

基本神经结构的使用


神经骨架的使用

        首先我们进官网进行相关信息的查询:

container(相当于一个骨架)之中有六个模块,最常用的是module模块,因为对所有神经网络提供了一个最基本的类。

        根据module的介绍,我们知道自己创建的model也需要继承该类 。

from torch import nn

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()

创建一个类,并且进行继承。init代码可以手打,如果使用的是pycharm,则还可以点击菜单栏中的code,找到generate:

 选择是重写该方法还是实现这个方法。选择重写该方法:

 选择init即可生成。接着定义好forward函数,就定义好了神经网络的模板:

class Model(nn.Module):
    def __init__(self) -> None:
        super().__init__()

    def forward(self,input):
        return input + 1

接着,使用该神经网络:

import torch

model = Model()
x = torch.tensor(1.0)
print(model(x))

输出tensor(2.)

基本神经结构的使用

convolution layers就是卷积层,conv1d代表是一维,同2d、3d,其他不是很常用。此处以2d为例,在左侧选择torch.nn.function可以了解跟细致的操作。torch.nn相当于torch.nn.function的一个封装。

 input就是输入,weight是权重,bias是偏置,stride是步径,padding为拓展

 比如输入一个5*5的图像,3*3的一个卷积核。

 卷积,第一次如上图所示,对应位相乘之和便是对应位置的结果,第一次结果为10。接着,会进行移动,移动的格数便和stride有关,如果stride为1,则先向右移动一位:

 计算结果为12,接着再向右移动一位,算得12;因为再向右移便超出范围,所以不能向右移,而是先向下移动:

 然后接着向右移动,直到向右、向下移动都会超出边界,得到计算结果:

 stride – the stride of the convolving kernel. Can be a single number or a tuple (sH, sW). Default: 1

 由stride的描述,可以知道,如果如果为一个数m,则向右向下移动距离一样,也可以分开设置。接着使用代码进行验证:

import torch

input = torch.tensor([[1, 2, 0, 3, 1],
                      [0, 1, 2, 3, 1],
                      [1, 2, 1, 0, 0],
                      [5, 2, 3, 1, 1],
                      [2, 1, 0, 1, 1]])
kernel = torch.tensor([[1, 2, 1],
                       [0, 1, 0],
                       [2, 1, 0]])

 通过函数的介绍,知两个数据的形状不符合函数参数的要求,则进行转换:

input = torch.reshape(input, [1, 1, 5, 5])
kernel = torch.reshape(kernel, [1, 1, 3, 3])

卷积核中的 in_channels 与 需要进行卷积操作的数据的 channels 一致(图片样本的 channels ,取决于图片类型,比如RGB类型有3个通道)

import torch.nn.functional as F

output = F.conv2d(input=input, weight=kernel, stride=1)
print(output)

输出: tensor([[[[10, 12, 12],
                  [18, 16, 16],
                  [13,  9,  3]]]])

若stride为2,则输出:tensor([[[[10, 12],
                                                  [13,  3]]]])

 根据参数padding的介绍,知能在输入的周边进行一个扩充,如果padding为1:

 接着以之前相同的方式进行计算(扩充处默认为0):

output = F.conv2d(input=input, weight=kernel, stride=1, padding=1)
print(output)

输出  tensor([[[[ 1,  3,  4, 10,  8],
         [ 5, 10, 12, 12,  6],
         [ 7, 18, 16, 16,  8],
        [11, 13,  9,  3,  4],
         [14, 13,  9,  7,  4]]]])

标签:12,tensor,nn,torch,骨架,stride,神经网络,input,结构
来源: https://blog.csdn.net/m0_51311105/article/details/122691574

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有