《 60分钟快速入门学习pytorch笔记一》PyTorch是什么

什么是pytorch


pytorch是一个基于python的科计算库,它主要面向以下两类受众群体:

  • Numpy的替代品以便于在GPU上进行使用它
  • 提供了最大化灵活性和速度的深度学习研究平台

开始

Tensor

Tensor 与 NumPy的 ndarrays相似, 但是除此之外,Tensor也能在GPU上使用以便于加速计算。

from __future__ import print_function
import torch

注意:

声明未初始化的矩阵,但在使用前该矩阵不包含确定的已知值。创建未初始化的矩阵时,分配在内存中的任何值都将显示为初始值。

创建一个5*3的矩阵,未初始化

x = torch.empty(5, 3)
print(x)

输出:

tensor([[ 1.8918e-16,  4.5644e-41, -3.0675e-26],
        [ 3.0773e-41,  0.0000e+00,  1.4013e-45],
        [ 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]])

创建一个随机初始化矩阵:

x = torch.rand(5, 3)
print(x)

输出:

tensor([[0.5524, 0.8042, 0.8140],
        [0.2944, 0.1345, 0.2921],
        [0.3099, 0.3343, 0.7377],
        [0.0685, 0.1461, 0.9683],
        [0.8908, 0.4492, 0.9506]])

创建一个全零矩阵,并且该矩阵元素的dtype为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。

x = x.new_ones(5, 3, dtype=torch.double)      # new_* 方法接受size属性
print(x)

x = torch.randn_like(x, dtype=torch.float)    # 重写 dtype!
print(x)                                      # 结果具有一样的 size

输出:

tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
tensor([[-1.9325,  1.2030, -2.1360],
        [-0.1392,  1.2079,  1.3194],
        [-1.0496,  0.9343,  2.4428],
        [-0.3567, -0.5195, -0.0276],
        [ 1.8236,  0.1193, -0.5549]])

获取它的size:

print(x.size())

输出:

torch.Size([5, 3])

操作

操作有多个语法。在下面的示例中,我们将查看加法操作。

加法:语法1

y = torch.rand(5, 3)
print(x + y)

输出

tensor([[-1.8346,  1.6518, -1.2673],
        [ 0.1698,  1.8538,  2.2153],
        [-0.0803,  0.9863,  3.2740],
        [-0.0906, -0.3752,  0.8960],
        [ 1.8271,  0.8586, -0.0483]])

加法:语法2

print(torch.add(x, y))

输出

tensor([[-1.8346,  1.6518, -1.2673],
        [ 0.1698,  1.8538,  2.2153],
        [-0.0803,  0.9863,  3.2740],
        [-0.0906, -0.3752,  0.8960],
        [ 1.8271,  0.8586, -0.0483]])

加法:提供一个输出的tensorout作为参数

result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)

输出

tensor([[-1.8346,  1.6518, -1.2673],
        [ 0.1698,  1.8538,  2.2153],
        [-0.0803,  0.9863,  3.2740],
        [-0.0906, -0.3752,  0.8960],
        [ 1.8271,  0.8586, -0.0483]])

加法:in-place

# adds x to y
y.add_(x)
print(y)

输出:

tensor([[-1.8346,  1.6518, -1.2673],
        [ 0.1698,  1.8538,  2.2153],
        [-0.0803,  0.9863,  3.2740],
        [-0.0906, -0.3752,  0.8960],
        [ 1.8271,  0.8586, -0.0483]])

注意:

任何使张量就地改变的操作都将用 _固定。例如: x.copy_(y), x.t_(), 将会改变 x.

你可以使用类似于Numpy的标准的花式索引

print(x[:, 1])

输出:

tensor([ 1.2030,  1.2079,  0.9343, -0.5195,  0.1193])

Resizing: 如果你想要的对tensor进行resize或者reshape操作,你可以使用 torch.view:

x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)  #  size -1 表示从其他维度进行自动计算得到
print(x.size(), y.size(), z.size())

输出

torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

如果你有一个单元素的tensor, 请使用 .item() 作为一个Python的数值来获取它的值

x = torch.randn(1)
print(x)
print(x.item())

输出:

tensor([-0.7521])
-0.7521063685417175

接下来浏览:

100多种 Tensor 操作, 包括翻转, 索引, 切片, 数学运算, 线性代数,随机数字, 等等., 都将 这里讲述。

Numpy Bridge

将Torch的Tensor转化为Numpy的数组是相当容易的,反之亦然。

Torch的Tensor和Numpy数组将共享内存位置(如果Torch的Tensor在CPU上),如果你改变一个,同时也会改变另外一个。

将Torch的Tensor转化为Numpy 的数组

a = torch.ones(5)
print(a)

输出

tensor([1., 1., 1., 1., 1.])
b = a.numpy()
print(b)

输出

[1. 1. 1. 1. 1.]

看看numpy的值是如何改变的

a.add_(1)
print(a)
print(b)

输出

tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]

将Numpy 的数组转化为Torch的Tensor

看看如何通过改变numpy的数组来自动改变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)

输出

[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)

除了CharTensor之外,cpu上的所有的Tensors都支持和Numpy进行相互转化。

CUDA Tensors

使用 .to 函数,Tensor可以被移动到任何设备上

# 假设cuda是可用的,让我们来单独运行这个cell
# 我们将使用 ``torch.device``  ;来将 tensors 移入或者移出GPU
if torch.cuda.is_available():
    device = torch.device("cuda")          #  CUDA 设备 
    y = torch.ones_like(x, device=device)  #直接在 GPU 上创建Tensor
    x = x.to(device)                       # 或者只使用字符串 ``.to("cuda")``
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # ``.to``可以一起改变dtype!

输出

tensor([0.2479], device='cuda:0')
tensor([0.2479], dtype=torch.float64)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值