本文搭配了Pytorch在线环境,可以直接在线体验。
Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合:
处于机器学习第一大语言 Python 的生态圈之中,使得开发者能使用广大的 Python 库和软件;如 NumPy、SciPy 和 Cython(为了速度把 Python 编译成 C 语言);
(最大优势)改进现有的神经网络,提供了更快速的方法——不需要从头重新构建整个网络,这是由于 PyTorch 采用了动态计算图(dynamic computational graph)结构,而不是大多数开源框架(TensorFlow、Caffe、CNTK、Theano 等)采用的静态计算图;
提供工具包,如torch 、torch.nn、torch.optim等;
import torch
import torch
#创建一个5*3的随机矩阵并显示它(Shift+Enter)
x=torch.rand(5,3)
x
y=torch.ones(5,3)
#创建一个5*3的全是1矩阵并显示它
y
#计算两个矩阵相加(注意尺寸要一模一样)
z=x+y
z
#矩阵乘法,矩阵转置
q=x.mm(y.t())
所有Numpy上面关于ndarray的运算全部可以应用于tensor
有关tensor的运算参考 http://pytorch.org/docs/master/tensors.html
torch.from_numpy(a)
a.numpy()
if torch.cuda.is_available():
x=x.cuda()
y=y.cuda()
print(x+y)
将Torch的Tensor和numpy的array相互转换。注意Torch的Tensor和numpy的array会共享他们的存储空间,修改一个会导致另外的一个也被修改。
# 此处演示tensor和numpy数据结构的相互转换
a = torch.ones(5)
b = a.numpy()
# 此处演示当修改numpy数组之后,与之相关联的tensor也会相应的被修改
a.add_(1)
print(a)
print(b)
# 将numpy的Array转换为torch的Tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
# 另外除了CharTensor之外,所有的tensor都可以在CPU运算和GPU预算之间相互转换
# 使用CUDA函数来将Tensor移动到GPU上
# 当CUDA可用时会进行GPU的运算
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x + y
gradient梯度,传播的就是梯度
定义一个自动微分变量
from torch.autograd import Variable
#Variable:自动微分变量
x=Variable(torch.ones(2,2),requires_grad=True)
#把一个2*2的张量转变成微分的变量(添加节点,构造计算图)
x
y=x+2
y.creator
#y的父节点
z=torch.mean(y*y)
z.data
与tensor不同之处:记录下所有的计算路径,在内存中构造计算图
z=m((x+2)*(x+2))
一个多层神经网络
计算梯度:求导
z.backward()
#z对x的偏导
#只有叶节点可以算grad。只有x有grad信息,因为它没有父节点
print(z.grad)
print(y.grad)
print(x.grad)
s=Variable(torch.FloatTensor([[0.01,0.02]]),requires_grad=True)
x=Variable(torch.ones(2,2),requires_grad=True)
for i in range(10):
s=s.mm(x)
#赋值的操作会多一个新节点出来
z=torch.mean(s)
#backward()求导计算
z.backward()
print(x.grad)
print(s.grad)
用 torch.nn 包可以进行神经网络的构建,点击实验楼开源软件库的教程:Pytorch快速上手/在线实验室即可马上查看并在线体验了;
本文链接:http://task.lmcjl.com/news/6030.html