基本网络模型笔记

base_CNN

什么是CNN?

CNN又叫卷积神经网络,是全连接神经网络的一种优化,将全连接神经网络的全连接层转换为卷积层,为什么?(全连接层计算的参数量包含上一层传过来的每一个参数,计算十分庞大,会占用大量资源)卷积神经网络用卷积层提取出每层的特征,在传递到下一层。

convolution layer

image-20230114161048868

每一个输入的数据格式

import torch
in_channels,out_channnels=5,10
width,height=100,100
kernel_size=3
batch_size=1

input=torch.randn(batch_size,in_channels,width,height)

conv_layer=torch.nn.Conv2d(in_channels,out_channnels,kernel_size=kernel_size)

output=conv_layer(input)

print(input.shape)
print(output.shape)
print(conv_layer.weight.shape)

"""""
             B  C   w     h
torch.Size([1, 5, 100, 100]) 	 输入的情况
torch.Size([1, 10, 98, 98])   	输出的情况
torch.Size([10, 5, 3, 3])      卷积层参数(input_chnnal,output_channal,w,h)     
"""

额外参数介绍

在卷积层中还有一些额外参数

  • padding:填充的行/列数,比如5x5的原输入经过padding=1的输入,在经过kernelsize=3的卷积,输出为5+2-2=5
  • stride:步伐大小,每隔几步,取想要的点减少输出的参数
  • maxpooling层(最大池化层):将输入的大小通过每个kxk的范围取最大值,减半,如4x4通过mapooling=2x2,变为2x2

一个小栗子

class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1=torch.nn.Conv2d(1,10,kernel_size=5)
        self.conv2=torch.nn.Conv2d(10,20,kernel_size=5)
        self.poolig=torch.nn.MaxPool2d(2)
        self.fc=torch.nn.Linear(320,10)#像这个如果输入不知道的话可以先用pytorch算一下

    def forward(self,x):
        batch_size=x.size(0)        #1.Flatten data from(n,1,28,28) to (n,784)
        x=F.relu(self.poolig(self.conv1(x)))
        x=F.relu(self.poolig(self.conv2(x)))
        x=x.view(batch_size,-1)
        x=self.fc(x)
        return x

image-20230114162545266

可以自己选择合适的网络架构进行修改,有时候越深不是越好

Advanced_CNN

GoogleNet

1.GoogleNet是什么?

GoogLeNet是google推出的基于Inception模块的深度神经网络模型

代码github.com

2.为什么要提出inception?

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但一味地增加,会带来诸多问题:
1)参数太多,如果训练数据集有限,很容易产生过拟合;
2)网络越大、参数越多,计算复杂度越大,难以应用;
3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
我们希望在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。在这种需求和形势下,Google研究人员提出了Inception的方法。

2. 什么是Inception?

Inception就是把多个卷积或池化操作,放在一起组装成一个网络模块,设计神经网络时以模块为单位去组装整个网络结构。模块如下图所示

image-20230114165158658

在未使用这种方式的网络里,我们一层往往只使用一种操作,比如卷积或者池化,而且卷积操作的卷积核尺寸也是固定大小的。但是,在实际情况下,在不同尺度的图片里,需要不同大小的卷积核,这样才能使性能最好,或者或,对于同一张图片,不同尺寸的卷积核的表现效果是不一样的,因为他们的感受野不同。所以,我们希望让网络自己去选择,Inception便能够满足这样的需求,一个Inception模块中并列提供多种卷积核的操作,网络在训练的过程中通过调节参数自己去选择使用,同时,由于网络中都需要池化操作,所以此处也把池化层并列加入网络中。

3.实际使用什么样的Inception

我们在上面提供了一种Inception的结构,但是这个结构存在很多问题,是不能够直接使用的。首要问题就是参数太多,导致特征图厚度太大。为了解决这个问题,作者在其中加入了1X1的卷积核,改进后的Inception结构如下图

image-20230114165250624

这样做有两个好处,首先是大大减少了参数量,其次,增加的1X1卷积后面也会跟着有非线性激励,这样同时也能够提升网络的表达能力。

image-20230114165502325

参数量

4.网络模型架构

img

对上图说明如下:

1)GoogLeNet采用了模块化的结构(Inception结构),方便增添和修改;

2)网络最后采用了average pooling(平均池化)来代替全连接层,该想法来自NIN(Network in Network),事实证明这样可以将准确率提高0.6%。

3)虽然移除了全连接,但是网络中依然使用了Dropout ;

4)为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)

对于前三点都很好理解,下面我们重点看一下第4点。这里的辅助分类器只是在训练时使用,在正常预测时会被去掉。辅助分类器促进了更稳定的学习和更好的收敛,往往在接近训练结束时,辅助分支网络开始超越没有任何分支的网络的准确性,达到了更高的水平。

至此,整个GoogLeNet网络便介绍完毕了。

代码

ResNet

BaseRNN

RNN:循环神经网络,利用上一层隐藏层的信息作为辅助信息,再结合原本输入信息进行操作

image-20230114180804666

image-20230114180817290

image-20230114180906489

RNNcell

code

image-20230114182159394

隐藏层的输出又作为输出

RNN

image-20230114182302726

  • out:为每一个隐藏层的输出
  • hidden:为最后一个隐藏层的输出

参数介绍

image-20230114182409320

image-20230114182716466

numlayers参数介绍

训练一个简单的RNN

输入:hello

输出:olloer

1.准备数据

将输入的英文字母通过one-hot编码转为独热编码,image-20230114185841948

image-20230114185850584

image-20230114185959900

输出的应该是每个字母的预测的概率,最后不用加上softmax层,因为使用CrossEntroy会自动做这些操作

image-20230114190057352

所以确定的如下参数

import torch
input_size = 4
hidden_size = 4
batch_size = 1
2.模型架构

image-20230114190654444

3.定义损失函数和激活函数

image-20230114190749405

4.training

image-20230114190803091

Embedding

对于使用独热向量来转换输入数据,并不是一种很好的方法,有一下的缺点是高维数据,稀疏,并且是硬编码

我们因此提出了改良使用Embedding 技术:低维数据,稠密信息、从数据中学习

image-20230114191202185

image-20230114191256938

修改独热向量后还要对应修改其所需的值

LSTM

image-20230114191529126

GRU

image-20230114193004894

高级RNN:主要是详细使用GRU来做RNN介绍数据如何准备

低维数据,稠密信息、从数据中学习

[外链图片转存中…(img-eqJcir6o-1677161747292)]

[外链图片转存中…(img-nUtaT8ul-1677161747292)]

修改独热向量后还要对应修改其所需的值

LSTM

[外链图片转存中…(img-pJcZgM6d-1677161747293)]

GRU

[外链图片转存中…(img-IDdo0gFC-1677161747293)]

高级RNN:主要是详细使用GRU来做RNN介绍数据如何准备

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奥丁之眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值