pytorch
pytorch学习笔记(二十): ignite (写更少的代码训练模型) - 云+社区 - 腾讯云
pytorch合集
PyTorch深度学习:60分钟入门(Translation) - 知乎
PyTorch Cookbook(常用代码段整理合集) - 知乎
神经网络 · Pytorch 中文文档
pytorch实战
(7条消息)实现能够在训练过程中手动更改学习率 - weixin_34293059的博客 - CSDN博客
pytorch入门实例
Ten minutes pyTorch Tutorial
https://github.com/SherlockLiao/pytorch-beginner.git
https://github.com/pytorch/examples
环境
source activate pytorch
启用pytorch环境
conda install pytorch torchvision -c pytorch
-c 是使用通道的意思
conda install pytorch torchvision cudatoolkit
import torch
torch.cuda.is_available()
- conda安装cv2库
conda install opencv
或者 pip install opencv-python
```py
import cv2
print cv2.version
cap = cv2.VideoCapture("input_video.mp4")
print cap.isOpened() # True = read video successfully. False - fail to read video.
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter("output_video.avi", fourcc, 20.0, (640, 360))
print out.isOpened() # True = write out video successfully. False - fail to write out video.
cap.release()
out.release()
###
一次epoch=所有训练数据forward+backward后更新参数的过程。
一次iteration=[batch size]个训练数据forward+backward后更新参数过程。
另:一般是iteration译成“迭代”
对于初学者来讲,有几个概念容易混淆:
(1)iteration:表示1次迭代(也叫training step),每次迭代更新1次网络结构的参数;
(2)batch-size:1次迭代所使用的样本量;
(3)epoch:1个epoch表示过了1遍所有训练集中的所有样本。
值得注意的是,在深度学习领域中,常用带mini-batch的随机梯度下降算法(Stochastic Gradient Descent, SGD)训练深层结构,它有一个好处就是并不需要遍历全部的样本,当数据量非常大时十分有效。此时,可根据实际问题来定义epoch,例如定义10000次迭代为1个epoch,若每次迭代的batch-size设为256,那么1个epoch相当于过了2560000个训练样本。
作者:张旗
链接:https://www.zhihu.com/question/43673341/answer/257382587
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
一. pytorch 基本概念
---------------
### 张量(Tensors)
x = torch.Tensor(3,5) 构建未初始化的张量
x = torch.rand(3,5) 构建一个随机初始化的矩阵
x.size() 或者 x.shape 获取矩阵的大小
二. pytorch 操作
-------------
语法 1:
x + y x = torch.rand(2,3)
语法 2:
torch.add(x,y)
语法 3:
result = torch.Tensor(3,5) torch.add(x,y,out=result)
语法 4:
y ._add(x)
原地操作 (in-place)
任何在原地 (in-place) 改变张量的操作都有一个'_'后缀。
三. numpy 桥
----------
把一个 torch 张量转换为 numpy 数组或者反过来都是很简单的。
Torch 张量和 numpy 数组将共享潜在的内存,改变其中一个也将改变另一个。a.add_(1)
把 Torch 张量转换为 numpy 数组 :
a = torch.ones(5) b= a.numpy()
把 numpy 数组转换为 torch 张量:
torch.from_numpy(b)
所有在 CPU 上的张量,除了字符张量,都支持在 numpy 之间转换。
你可以使用所有的 numpy 索引操作: print(a[:,1])
四. CUDA 张量
----------
使用. cuda 函数可以将张量移动到 GPU 上。
if torch.cuda.is_available() :
x = x.cuda()
五. pytorch 函数操作
### torch.max
返回输入 tensor 中所有元素的最大值
torch.max(input,dim)
按维度 dim 返回最大值
torch.max)(a,0)
返回每一列中最大值的那个元素,且返回索引(返回最大元素在这一列的行索引)
torch.max(a,1)
返回每一行中最大值的那个元素,且返回其索引(返回最大元素在这一行的列索引)
torch.max()[0]
只返回最大值的每个数
troch.max()[1]
只返回最大值的每个索引
### torch.eq
target.eq(source)
target.eq(source).sum() 统计相等的个数 输出tensor(2)
### torch.view
Resizing(调整大小):如果要resize/reshape张量,可以使用torch.view:
```py
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8) # -1是推断出来的
print(x.size(), y.size(), z.size())
表示将原矩阵转化为 i 行 j 列的形式 , i 为 - 1 表示不限制行数
torch.squeeze()
压缩矩阵
a.squeeze(i)
压缩第 i 维,如果这一维维数是 1,则这一维可有可无,便可以压缩
torch.unsqueeze()
表示将第 i 维设置为 1
squeeze、unsqueeze 操作不改变原矩阵
torch.cat(seq,[dim],out=None)
seq 表示要连接的两个序列. dim 表示以哪个维度连接. dim=0 横向连接, dim=1 纵向连接.
a = torch.rand((10,2)) # 10行 2列
b = torch.rand((10,2)) # 10行 2列
c = torch.cat((a,b),dim=0) # 默认 横向连接 按行拼接,结构列数不变,行变多 20行 2列
d = torch.cat((a,b),dim=1) # 纵向连接 按列拼接,结构行数不变,需要列相同 10行 4列
autograd: 自动微分
Pytorch的autograd模块实现了反向传播求导数,在Tensor上的所有操作,autograd都能为它们提供自动微分,避免了手动计算的复杂过程
要想是Tensor使用autograd功能,需要设置tensor.requires_grad=True
grad在反向传播过程中是累加的,所以反向传播之前需要把梯度清零
神经网络nn
torch.nn是专门为神经网络设计的模块化接口。nn构建于Autograd之上,可以来定义和运行神经网络。nn.Module是nn中最重要的类,包含网络各层定义以及forward方法,可以返回前向传播的结果
torch.nn 只支持Mini-batches,即使以此输入一个样本,也需要把batch_size设为1