什么是pytorch(1开始)(翻译)
Deep Learning with PyTorch: A 60 Minute Blitz
作者: Soumith Chintala
部分翻译:me
本内容包含:
- 在高级层面理解pytorch的tensor库以及神经网络。
- 训练一个用于图像分类的小的神经网络。
This tutorial assumes that you have a basic familiarity of numpy
阅读本文前,你需要具有numpy的知识。
当然需要安装好pytorch和torchvision库。
开始
张量
张量类似于 NumPy的N维数组, 添加了可以在GPU上进行加速计算。
from __future__ import print_function
import torch
构建一个5*3的矩阵,没有初始化:
x = torch.empty(5, 3) #全部都是0.0
print(x)
print(x.dtype) #数据类型 float32
print(type(x))
tensor([[0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 1.5190e-42, 0.0000e+00],
[0.0000e+00, 1.1628e+27, 0.0000e+00]])
torch.float32
<class 'torch.Tensor'>
构建一个随机的矩阵
x = torch.rand(5, 3)
print(x)
tensor([[0.5689, 0.6057, 0.5855],
[0.4125, 0.2739, 0.7563],
[0.8674, 0.7034, 0.5811],
[0.9939, 0.5941, 0.6916],
[0.9194, 0.8064, 0.3800]])
构建一个填充为零的矩阵和类型为长整型(long):
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
直接从数据构建一个Tensor:
x = torch.tensor([5.5, 3])
print(x)
tensor([5.5000, 3.0000])
或者基于现有的张量创建一个新的。这些方法会复用输入张量的性质,例如:dtype,除非一个新的值提供给用户。
print(x)
x = x.new_ones(5, 3, dtype=torch.double) # new_* methods take in sizes #这个搞不懂不建议
print(x)
x = torch.randn_like(x, dtype=torch.float) # override dtype! #产生同样类型的建议使用torch.randn_like, torch.ones_like(tensor)
print(x)
tensor([5.5000, 3.0000])
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[-0.9820, -0.4020, 0.6092],
[-0.1853, 0.6631, -0.9670],
[-0.1934, 1.3743, -0.5245],
[ 1.0157, -0.0022, -0.1337],
[-0.7105, 0.4798, 2.2316]])
获取张量的大小:
print(x.size())
h,w=x.size()
print(h,w)
torch.Size([5, 3])
5 3
注意:torch.Size实际上是一个元组, 所以支持所有元组的操作。.
运算
运算有多种语法格式。在下面的例子里,我们看加法运算。
加法运算的语法1:
x = torch.rand(5, 3)
y = torch.rand(5, 3)
print(x + y)
tensor([[-0.3402, 0.4303, 0.7074],
[ 0.4024, 1.4834, -0.7325],
[ 0.4572, 1.8391, -0.0452],
[ 1.2108, 0.9043, 0.6351],
[-0.6921, 0.9278, 2.4968]])
加法运算的语法2:
print(torch.add(x, y))
tensor([[-0.3402, 0.4303, 0.7074],
[ 0.4024, 1.4834, -0.7325],
[ 0.4572, 1.8391, -0.0452],
[ 1.2108, 0.9043, 0.6351],
[-0.6921, 0.9278, 2.4968]])
把结果作为参数:
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
tensor([[-0.3402, 0.4303, 0.7074],
[ 0.4024, 1.4834, -0.7325],
[ 0.4572, 1.8391, -0.0452],
[ 1.2108, 0.9043, 0.6351],
[-0.6921, 0.9278, 2.4968]])
加法:直接加到某参数:
# adds x to y
y.add_(x)
print(y)
注意:任何以“_”结尾的运算,都会改变张量自身。例如: x.copy_(y), x.t_(), 将会改变 x.
可以使用NUmpy里的切片方法对Tensor切片!
print(x[:, 1])
缩放:如果你想对张量缩放/改变维度,可以使用torch.view:
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8) # the size -1 is inferred from other dimensions
print(x.size(), y.size(), z.size())
v=x.view(-1) #-1直接把他拉直了。
print(v.size())
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
torch.Size([16])
如果你有一个元素的张量,使用.item() 方法来得到其Python自身的数值类型。
x = torch.randn(1)
print(x)
print(x.item())
print(x[0])
print(x[0].item())
tensor([0.4783])
0.4782998859882355
tensor(0.4783)
0.4782998859882355
后续阅读:
torch有100+ 个张量运算符, 包括转置,切片,数学运算,线性代数,随机数,等,参见: https://pytorch.org/docs/stable/torch.html
连接NumPy
在numpy的数组和torch的tensor 间的转换非常容易。
torch的tensor和numpy的数组共享内部的存储单元,改变一个,另一个也改变。例子:
将Torch 张量转为一个Numpy数组
a = torch.ones(5)
print(a)
Out:
tensor([1., 1., 1., 1., 1.])
b = a.numpy()
print(b)
Out:
[1. 1. 1. 1. 1.]
可以看到数组里的值发生变换了,也就说一个张量和与之对应的numpy数组是共享内存的:
a.add_(1)
print(a)
print(b)
Out:
tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]
将 NumPy 数组to Torch 张量
例子:
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
Out:
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
除CharTensor外,所有CPU上的张量支持与numpy 数组间的转换。
CUDA 张量
张量可以被移动到任何设备上,通过.to方法。
# let us run this cell only if CUDA is available 检测CUDA是否可用
# We will use ``torch.device`` objects to move tensors in and out of GPU 可以使用torch.device对象来移动对象
if torch.cuda.is_available():
device = torch.device("cuda") # a CUDA device object
y = torch.ones_like(x, device=device) # directly create a tensor on GPU
x = x.to(device) # or just use strings ``.to("cuda")``
z = x + y
print(z)
print(z.to("cpu", torch.double)) # ``.to`` can also change dtype together!
Out:
tensor([2.9218], device='cuda:0')
tensor([2.9218], dtype=torch.float64)
这里注意的是torch.cuda.is_available() torch.device('cuda') device参数,.to(device)
什么是pytorch(1开始)(翻译)的更多相关文章
- 基于PyTorch的Seq2Seq翻译模型详细注释介绍(一)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qysh123/article/detai ...
- pytorch实现BiLSTM+CRF用于NER(命名实体识别)
pytorch实现BiLSTM+CRF用于NER(命名实体识别)在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质量 ...
- 20180122 PyTorch学习资料汇总
PyTorch发布一年团队总结:https://zhuanlan.zhihu.com/p/33131356?gw=1&utm_source=qq&utm_medium=social 官 ...
- pytorch做seq2seq注意力模型的翻译
以下是对pytorch 1.0版本 的seq2seq+注意力模型做法语--英语翻译的理解(这个代码在pytorch0.4上也可以正常跑): # -*- coding: utf-8 -*- " ...
- 什么是pytorch(4.数据集加载和处理)(翻译)
数据集加载和处理 这里主要涉及两个包:torchvision.datasets 和torch.utils.data.Dataset 和DataLoader torchvision.datasets是一 ...
- 什么是pytorch(2Autograd:自动求导)(翻译)
Autograd: 自动求导 pyTorch里神经网络能够训练就是靠autograd包.我们来看下这个包,然后我们使用它来训练我们的第一个神经网络. autograd 包提供了对张量的所有运算自动求导 ...
- 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解
文章来自:微信公众号[机器学习炼丹术].欢迎关注支持原创 也欢迎添加作者微信:cyx645016617. 参考目录: 目录 1 基本函数 1.1 Compose 1.2 RandomChoice 1. ...
- 什么是pytorch(3神经网络)(翻译)
神经网络 torch.nn 包可以用来构建神经网络. 前面介绍了 autograd包, nn 依赖于 autograd 用于定义和求导模型. nn.Module 包括layers(神经网络层), 以及 ...
- Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutor ...
随机推荐
- Android : VLC for Android 环境搭建及编译
一.下载VLC源码: git clone https://code.videolan.org/videolan/vlc-android.git 编译apk: sh compile.sh -a ar ...
- 基于MicroBlaze 的嵌入式系统设计
reference: http://xilinx.eetrend.com/d6-xilinx/article/2013-03/3863.html 摘 要:当今时代,嵌入式系统已经无所不在,与人们 ...
- Python3虚拟环境安装:virtualenv、virtualenvwralpper
一:通过pip3(因python2和3共存,前文修改过pip3软连接,pip3可以安装到python3)安装virtualenv,pip3 install virtuale 二:建立虚拟环境文件目录 ...
- Python 数据处理库 pandas 入门教程
Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...
- git 清空缓冲区
git rm与git rm --cached 当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用 git rm file_path git commit -m 'delet ...
- 2--JAVA+Maven+TestNG搭建接口测试框架搭建
1.配置JDK 2.安装Eclipse以及TestNG Eclipse下载地址:http://beust.com/eclipse TestNG安装过程:输入网址:http://beust.com/ec ...
- MySQL的架构与历史
MySQL的最主要特性是它的存储引擎架构,这种架构设计将查询处理以及其他系统任务和数据的存储/提取相分离. MySQL最上层服务是一些如连接处理,授权认证,安全等. MySQL的核心服务功能大部分度在 ...
- 【转载】 强化学习(六)时序差分在线控制算法SARSA
原文地址: https://www.cnblogs.com/pinard/p/9614290.html ------------------------------------------------ ...
- 【转载】 如何看待 2019 年 CS PhD 现扎堆申请且大部分为 AI 方向?未来几年 AI 泡沫会破裂吗?
原贴地址: https://www.zhihu.com/question/316135639 作为一个 AI 方向的在读博士生,实在是过的蛮闹心,无意中逛知乎发现了这个帖子,发现很适合现在的自己,于是 ...
- c++将数字转换成固定长度的字符串
c++将数字转换成固定长度的字符串 将数字转换为字符串,且设置为固定长度的,不足补零. string num2str(int i) { ]; sprintf(ss,"%04d",i ...