Tensor:
import torch as t
生成一个5*3矩阵,只是分配了空间,未初始化
x = t.Tensor(5,3)
使用[ 0 , 1]均匀分布随机初始化二维数组
x = t.rand(5,3)
查看x的形状
print(x.size())
x.size()[1] x.size(1) # 查看列的个数
加法
y = t.rand(5,3)
x+y
t.add( x , y )
t.add( x, y, out = result )
y.add( x )
y.add_(x) # inplace加法,函数名后面带下划线的函数会修改Tensor本身
tensor和numpy之间的转换非常容易且快速,tensor不支持的操作,可以先转换成为numpy进行操作,然后再转换成为tensor
a = t.ones(5)
b = a.numpy()
import numpy as np
a = np.ones(5)
b = t.from_numpy(a)
Tensor 与numpy对象共享内存,所以他们之间的转换很快,几乎不会消耗资源,如果其中一个改变了,则另外一个也会随之改变
Tensor可以通过.cuda 方法转为GPU的Tensor,从而享受GPU带来的加速运算
if t.cuda.is_available():
x = x.cuda()
y = y.cuda()
x+y
Autograd 自动微分
autograd.Variable 是Autograd中的核心类,简单封装了Tensor,支持几乎所有的Tensor操作,可以调用.backward实现反向传播,自动计算所有梯度
autograd.Variable对象主要包括三个属性
- data,保存Variable所包含的tensor
- grad:保存对应的梯度,grad也是一个Variable对象,而不是一个tensor
- grad_fn:指向一个Function对象,这个Function用来反向传播计算输入的梯度
grad在反向传播的过程中是累加的,这意味着每次运行反向传播,梯度都会累加之前的梯度,所以在每一次反向传播之前需要把梯度设为0
x.grad.data.zero_()
神经网络:
torch.nn
nn.Module 是nn中最重要的类,是一个网络的封装,包含网络各层定义以及forward方法
定义网络时,需要继承nn.Module,并实现他的forward方法,把网络中具有可学习参数的层放在构造函数__init__中
nn.Module子类的函数必须在构造函数中,执行父类的构造函数
forward函数的输入和输出都是Variable,只有Variable对象才有自动求导功能
torch.nn 只支持mini-batch 不支持一次只输入一个样本,如果想输入一个样本,则需自己手动设置
损失函数,
优化器,
数据加载与预处理