Java教程

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

本文主要是介绍神经网络基本骨架、结构的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

神经骨架的使用

基本神经结构的使用


神经骨架的使用

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

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]]]])

这篇关于神经网络基本骨架、结构的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!