pytorch


原文链接: pytorch

pytorch学习笔记(二十): ignite (写更少的代码训练模型) - 云+社区 - 腾讯云

pytorch合集

pytorch学习笔记 - 专题 - 简书

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

  1. 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

`