• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Pytorch学习笔记

武飞扬头像
只想睡觉的修狗
帮助1

两个函数

学新通

tensor的常见形式

学新通

加载数据的形式

学新通

transforms

学新通

张量(Tensors)

张量类似于numpy的ndarrays,不同之处在于张量可以使用GPU来加快计算。

CUDA张量

使用.cuda函数可以将张量移动到GPU上

学新通

Autograd:自动求导

autograd包为张量上的所有操作提供了自动求导.它是一个运行时定义的框架,这意味着反向传播是根据你的代码如何运行来定义,并且每次迭代可以不同.

变量(Variable)

autofrad.Variable是autograd包的核心类。它包装了张量(Tensor),支持几乎所有的张量上的操作.一旦你完成你的前向计算,可以通过.backward()方法来自动计算所有的梯度.

可以通过.data属性来访问变量中的原始张量,关于这个变量的梯度被计算放入.grad属性中

对自动求导的实现还有一个非常重要的类,即*函数 (Function).

变量 (Variable)函数 (Function) 是相互联系的,并形成一个非循环图来构建一个完整的计算过程.每个变量有一个 .grad_fn* 属性,它指向创建该变量的一个*Function,用户自己创建的变量除外,它的grad_fn属性为None.

如果你想计算导数,可以在一个变量上调用.backward().如果一个Variable是一个标量(它只有一个元素值),你不必给该方法指定任何的参数,但是该Variable有多个值,你需要指定一个和该变量相同形状的的grad_output参数(查看API发现实际为gradients参数).

注: tensor不能反向传播,variable可以反向传播

梯度

学新通

神经网络

训练过程

1.定义神经网络模型,它有一些可学习的参数(或者权重)

2.在数据集上迭代

3.通过神经网络处理输入

4.计算损失(输出结果和正确值的差距大小)

5.将梯度反向传播回网络的参数

6.更新网络的参数,主要使用:

weight=weight-learnin_rate*gradient

init()是实现网络中有哪些层的

forward()是实现网络中不同连接的层的连接关系的

学新通

注意

学新通

卷积神经网络

卷积神经网络就是局部连接 权值共享(图片的不同位置具有相同的权重)的神经网络。

权值共享就是说,给一张输入图片,用一个卷积核去扫这张图,卷积核里面的数就叫权重,这张图每个位置是被同样的卷积核扫的,所以权重是一样的,也就是共享。

其中数据输入的是一张图片(输入层),CONV表示卷积层,RELU表示激励层,POOL表示池化层,Fc表示全连接层

输入层

在图片输出到神经网络之前,常常先进行图像处理,有三种常见的图像的处理方式:

  1. 均值化:把输入数据各个维度都中心化到0,所有样本求和求平均,然后用所有的样本减去这个均值样本就是去均值。
  2. 归一化:数据幅度归一化到同样的范围,对于每个特征而言,范围最好是[-1,1]
  3. PCA/白化:用PCA降维,让每个维度的相关度取消,特征和特征之间是相互独立的。白化是对数据每个特征轴上的幅度归一化

卷积层

图片有一个性质叫做局部关联性质,一个图片的像素点影响最大的是它周边的像素点,而距离这个像素点比较远的像素点二者之间关系不大。这个性质意味着每一个神经元我们不用处理全局的图片了(和上一层全连接),我们的每一个神经元只需要和上一层局部连接,相当于每一个神经元扫描一小区域,然后许多神经元(这些神经元权值共享)合起来就相当于扫描了全局,这样就构成一个特征图,n个特征图就提取了这个图片的n维特征,每个特征图是由很多神经元来完成的。

卷积操作

学新通

三通道图片的卷积过程

也就是说增加一个卷积核,就会产生一个特征图,总的来说就是输入图片有多少通道,我们的卷积核就需要对应多少通道,而本层中卷积核有多少个,就会产生多少个特征图。这样卷积后输出可以作为新的输入送入另一个卷积层中处理,有几个特征图那么depth就是几,那么下一层的每一个特征图就得用相应的通道的卷积核来对应处理,这个逻辑要清楚,我们需要先了解一下基本的概念:

  1. 深度depth(通道):由上一层滤波器的个数决定
  2. 步长stride:每次滑动几步,步数越大得到的特征数越少,上面的例子中每次滑动1步。
  3. 填充值zero-padding:我们设置了步长之后,很有可能某些位置滑不到,为了避免了边缘信息被一步步舍弃的问题,我们需要设置填充值来解决这个问题。还有一个问题,4x4的图片被2x2的filter卷积后变成了3x3的图片,每次卷积后都会小一圈的话,经过若干层后岂不是变的越来越小?zero padding就可以在这时帮助控制Feature Map的输出尺寸,同时避免了边缘信息被一步步舍弃的问题。

学新通

规律: Feature Map的尺寸等于

(input_size 2 * padding_size − filter_size)/stride 1

卷积层的作用* *总结一点:**卷积层其实就是在提取特征,卷积层中最重要的是卷积核(训练出来的),不同的卷积核可以探测特定的形状、颜色、对比度等,然后特征图保持了抓取后的空间结构,所以不同卷积核对应的特征图表示某一维度的特征,具体什么特征可能我们并不知道。特征图作为输入再被卷积的话,可以则可以由此探测到"更大"的形状概念,也就是说随着卷积神经网络层数的增加,特征提取的越来越具体化。

激励层

激励层的作用可以理解为把卷积层的结果做非线性映射

一些激励函数的使用技巧:一般不要用sigmoid,首先试RELU,因为快,但要小心点,如果RELU失效,请用Leaky ReLU,某些情况下tanh倒是有不错的结果。

池化层

池化层:降低了各个特征图的维度,但可以保持大分重要的信息。池化层夹在连续的卷积层中间,压缩数据和参数的量,减小过拟合,池化层并没有参数,它只不过是把上层给它的结果做了一个下采样(数据压缩)。下采样有两种常用的方式:

Max pooling:选取最大的,我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图中取出最大的元素,最大池化被证明效果更好一些。

学新通

Average pooling:平均的,我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图算出平均值

全连接层

在全连接层中所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。当前面卷积层抓取到足以用来识别图片的特征后,接下来的就是如何进行分类。 通常卷积网络的最后会将末端得到的长方体平摊成一个长长的向量,并送入全连接层配合输出层进行分类。比如,在下面图中我们进行的图像分类为四分类问题,所以卷积神经网络的输出层就会有四个神经元。

我们从卷积神经网络的输入层、卷积层、激活层、池化层以及全连接层来讲解卷积神经网络,我们可以认为全连接层之间的在做特征提取,而全连接层在做分类,这就是卷积神经网络的核心。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgajcha
系列文章
更多 icon
同类精品
更多 icon
继续加载