# Pytorch入门演练

【引言】Pytorch是一个基于Python的科学计算软件包，有以下两种定位：

• 可以使用多GPU加速的NumPy替代品
• 提供最大限度灵活性与速度的深度学习研究平台

1.Tensors（张量）

Tensors（张量）类似于NumPy中的ndarray，另外它还可以使用GPU加速计算。

```from__future__import print_function
importtorch```

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

```tensor([[-9.0198e-17,  4.5633e-41, -2.9021e-15],
[ 4.5633e-41,  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,  0.0000e+00]])```

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

```tensor([[0.1525, 0.7689, 0.5664],
[0.7688, 0.0039, 0.4129],
[0.9979, 0.3479, 0.2767],
[0.9580, 0.9492, 0.6265],
[0.2716, 0.6627, 0.3248]])```

```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]])```

```x = torch.tensor([5.5, 3])
print(x)```

`tensor([5.5000, 3.0000])`

```x = x.new_ones(5, 3, dtype=torch.double)  # 使用new_* 方法设定维度
print(x)

x = torch.randn_like(x, dtype=torch.float)   # 重新设定数据类型
Print(x)                                   # 结果维度不变```

```tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)

tensor([[ 0.4228,  0.3279,  0.6367],
[ 0.9233, -0.5232, -0.6494],
[-0.1946,  1.7199, -0.1954],
[ 0.1222,  0.7204, -1.3328],
[ 0.1230, -0.5800,  0.4562]])```

`print(x.size())`

`torch.Size([5, 3])`

### 2. 运算

Tensor运算有多种语法。在下面的示例中，我们将先示例加法运算。

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

```tensor([[ 0.0732,  0.9384, -0.2489],
[-0.6905,  2.1267,  3.0045],
[ 0.6199,  0.4936, -0.0398],
[-2.0623, -0.5140,  1.6162],
[ 0.3189, -0.0327, -0.5353]])```

`print(torch.add(x, y))`

```tensor([[ 0.0732,  0.9384, -0.2489],
[-0.6905,  2.1267,  3.0045],
[ 0.6199,  0.4936, -0.0398],
[-2.0623, -0.5140,  1.6162],
[ 0.3189, -0.0327, -0.5353]])```

```result = torch.empty(5, 3)

print(result)```

```tensor([[ 0.0732,  0.9384, -0.2489],
[-0.6905,  2.1267,  3.0045],
[ 0.6199,  0.4936, -0.0398],
[-2.0623, -0.5140,  1.6162],
[ 0.3189, -0.0327, -0.5353]])```

```# adds x to y
print(y)```

```tensor([[ 0.0732,  0.9384, -0.2489],
[-0.6905,  2.1267,  3.0045],
[ 0.6199,  0.4936, -0.0398],
[-2.0623, -0.5140,  1.6162],
[ 0.3189, -0.0327, -0.5353]])```

`print(x[:, 1])`

`tensor([ 0.3279, -0.5232,  1.7199,  0.7204, -0.5800])`

Resizing（调整大小）：如果要resize/reshape张量，可以使用torch.view：

```x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)  # -1是推断出来的

print(x.size(), y.size(), z.size())```

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

```x = torch.randn(1)

print(x)

print(x.item())```

```tensor([0.1550])

0.15495021641254425```

【延伸阅读：100+张量操作，包括置换，索引，切片，数学运算，线性代数，随机数等等，被详细描述在这里

（https://pytorch.org/docs/torch）。】

## 二、NUMPY桥接器

1.将Torch Tensor转换为NumPy array

```a = torch.ones(5)

print(a)```

```tensor([1., 1., 1., 1., 1.])

b = a.numpy()

print(b)```

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

```a.add_(1)

print(a)

print(b)```

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

[2. 2. 2. 2. 2.]```

### 2. 将NumPy array转换为Torch Tensor

```import numpy as np

a = np.ones(5)
b = torch.from_numpy(a)

print(a)
print(b)```

```[2. 2. 2. 2. 2.]

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

## 三、CUDA TENSORS（张量）

```# 仅当CUDA可用的情况下运行这个cell
# 我们用 ``torch.device`` 对象实现tensors在GPU上的写入与读出if torch.cuda.is_available():

device = torch.device("cuda")          # 一个 CUDA 终端对象

y = torch.ones_like(x, device=device)  # 直接在GUP上创建Tensor
x = x.to(device)                # 或者直接使用字符串`.to("cuda")``
z = x + y

print(z)
print(z.to("cpu", torch.double))     # `.to`` 也可以改变对象数据类型```

```tensor([2.4519], device='cuda:0')

tensor([2.4519], dtype=torch.float64)```

0 条评论

• ### 收藏 | Numpy详细教程

NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。在NumPy中维度(dimens...

• ### 【机器学习笔记】：从零开始学会逻辑回归（一）

逻辑回归是一个非常经典，也是很常用的模型。之前和大家分享过它的重要性：5个原因告诉你：为什么在成为数据科学家之前，“逻辑回归”是第一个需要学习的

• ### tensorflow 在加载大型的embedding模型参数时，会遇到cannot be larger than 2GB

这种问题是，对于每一个变量 variable 由于是基于protobuf存在这大小限制(2G),这个时候，我们需要将embedding拆开，拆分成N...

• ### 一个超级小的 Django 项目.

当用最简单的代码实现 Django 项目为最基本的要素的时候， 项目可以和微框架一样小.

• ### [翻译] Python 在信号处理中的优势之二

还有，诸如SPTool（用于一般信号可视化和过滤）或FDATool（用于数字滤波器设计）的GUI工具用于高质量的专业级信号处理和控制系统设计。

• ### numpy中的hstack()、vstack()、stack()、concatenate()函数详解

本文主要介绍一下numpy中的几个常用函数，包括hstack()、vstack()、stack()、concatenate()。

• ### PyTorch简明笔记[1]-Tensor的初始化和基本操作

安装PyTorch应该不用我多说，他们的官网很人性化地给出了各种环境应该怎么安装，网址：https://pytorch.org/get-started/loca...

• ### Numpy 库准备放弃支持 Python 2

Numpy 是 Python 的一个科学计算的库，提供了矩阵运算的功能，一般与 Scipy、matplotlib 一起使用。今天 Numpy 的 GitHub ...