Pytorch学习笔记
两个函数
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表示全连接层
输入层
在图片输出到神经网络之前,常常先进行图像处理,有三种常见的图像的处理方式:
- 均值化:把输入数据各个维度都中心化到0,所有样本求和求平均,然后用所有的样本减去这个均值样本就是去均值。
- 归一化:数据幅度归一化到同样的范围,对于每个特征而言,范围最好是[-1,1]
- PCA/白化:用PCA降维,让每个维度的相关度取消,特征和特征之间是相互独立的。白化是对数据每个特征轴上的幅度归一化
卷积层
图片有一个性质叫做局部关联性质,一个图片的像素点影响最大的是它周边的像素点,而距离这个像素点比较远的像素点二者之间关系不大。这个性质意味着每一个神经元我们不用处理全局的图片了(和上一层全连接),我们的每一个神经元只需要和上一层局部连接,相当于每一个神经元扫描一小区域,然后许多神经元(这些神经元权值共享)合起来就相当于扫描了全局,这样就构成一个特征图,n个特征图就提取了这个图片的n维特征,每个特征图是由很多神经元来完成的。
卷积操作
三通道图片的卷积过程
也就是说增加一个卷积核,就会产生一个特征图,总的来说就是输入图片有多少通道,我们的卷积核就需要对应多少通道,而本层中卷积核有多少个,就会产生多少个特征图。这样卷积后输出可以作为新的输入送入另一个卷积层中处理,有几个特征图那么depth就是几,那么下一层的每一个特征图就得用相应的通道的卷积核来对应处理,这个逻辑要清楚,我们需要先了解一下基本的概念:
- 深度depth(通道):由上一层滤波器的个数决定
- 步长stride:每次滑动几步,步数越大得到的特征数越少,上面的例子中每次滑动1步。
- 填充值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
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01