初识Pytorch

1、Pytorch 简介

Pytorch 是一个基于 torch 的 python 开源机器学习库,主要用于自然语言处理等应用程序。说到这了就不得不介绍一下 torch ,它是有大量机器学习算法支持的科学计算框架,是与 Numpy 类似的张量(Tensor)操作库,其特点是特别灵活,但因采用了小众的编程语言Lua,流行度不高,这才有了 Pytorch 的出现。所以说 torch 是 Pytorch 的前身,他们的底层语言相同,都是Lua,只是使用了不同的上层包装语言。

Pytorch 主要是由 Facebook 的人工智能小组开发出来的,它不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如 Tensorflow 都不支持的。Pytorch 提供了两个高级功能:(1)具有强大的GPU加速的张量计算;(2)包含自动求导系统的深度神经网络。除了 Facebook 之外,Twitter、GMU 和Salesforce等机构都采用了 PyTorch,这说明 Pytorch 还是很好用的。

另一强大的主流框架是 Tensorflow ,它是静态的,首先必须构建一个神经网络,然后一次又一次使用相同的结构,如果想要改变网络的结构,就必须从头开始。但是对于 Pytorch ,通过反向求导技术,可以零延迟的任意改变神经网络的行为,而且实现速度很快,这一灵活性正是 Pytorch 相比于 Tensorflow 的最大优势。

另外 Pytorch 的代码对比 Tensorflow 而言,更加简洁直观,底层代码也更容易看懂,这对于使用它的人来说理解底层肯定是一件令人激动的事。

所以,总结一下,什么是 pytorch 呢?Pytorch 是一个基于Python 的科学计算包,主要定位两类人群:

  • Numpy 的替代品,可以利用GPU的性能进行计算
  • 深度学习研究平台拥有足够的灵活性和速度

Pytorch 的优点:* 支持GPU *灵活,支持动态神经网络 *底层代码易于理解 * 命令式体验 * 自定义扩展

2、张量 (Tensor)

Tensor 与 Numpy中的 ndarray相类似,同时可以使用 GPU 进行计算

ndarray 和 tensor 对比:

import numpy as np
import torch
data=[1,2,3,4]
x = np.array(data)
print(x)  # [1 2 3 4]
y = torch.tensor(data)
print(y)  # tensor([1, 2, 3, 4])

创建张量 tensor

构造一个2*3的矩阵,不初始化

import torch
x =torch.empty(2,3)
print(a)
# tensor([[0.0000e+00, 0.0000e+00, 1.0503e-05],
#         [5.3242e+22, 6.8687e-07, 8.1926e-10]])

构造一个随机初始化矩阵,矩阵中每个元素的取值范围为 0~1

y = torch.rand(2,3)
print(y)
# tensor([[0.3971, 0.5730, 0.9091],
#         [0.1378, 0.2569, 0.3722]])

构造一个全0矩阵,数据类型为 Long

z = torch.zeros(2,3,dtype=torch.long)
print(z)
# tensor([[0, 0, 0],
#         [0, 0, 0]])

构造一个张量,直接使用数据

a = torch.tensor([1,2,3,4])
print(a)
# tensor([1,2,3,4])

构造一个张量,张量中的数值符合标准正态分布,均值为0,方差为1

x = torch.randn(3,4)
print(x)

结果:

tensor([[ 1.2849,  1.3208, -1.1136,  0.3969],
        [-0.1573,  0.4408,  1.0801,  0.7200],
        [-0.1293, -1.3945,  1.0771, -0.3104]])

张量加法

import torch
x = torch.ones(2,3)
y = torch.ones(2,3)
# 方法1
print(x+y)
# 方法2
print(torch.add(x,y))
# 方法3
result = torch.empty(2,3)
torch.add(x,y,out=result)
print(result)
# 方法4(把x加到y上)
y.add_(x)
print(y)

它们的结果都是:

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

张量 Shape

查看一个tensor的shape (即获取维度信息) —— torch.size()

x = torch.rand(4,3)
print(x)
print(x.size())

结果:

tensor([[0.1829, 0.5003, 0.6952],
        [0.2190, 0.8984, 0.5792],
        [0.4715, 0.5237, 0.2776],
        [0.1321, 0.5582, 0.7188]])
torch.Size([4, 3])

torch.size 实际上是一个元组,所以它支持元组的所有操作

调整张量 shape :——torch.view()

x = torch.randn(2,4)
y = x.view(8)
z = x.view(-1,2)
print(x)
print(y)
print(z)
print(x.size())
print(y.size())
print(z.size())

结果:

tensor([[-0.1047, -0.7160, -2.4983,  0.1742],
        [ 1.4295, -0.7287,  1.9171, -2.1580]])
tensor([-0.1047, -0.7160, -2.4983,  0.1742,  1.4295, -0.7287,  1.9171, -2.1580])
tensor([[-0.1047, -0.7160],
        [-2.4983,  0.1742],
        [ 1.4295, -0.7287],
        [ 1.9171, -2.1580]])
torch.Size([2, 4])
torch.Size([8])
torch.Size([4, 2])

如果我们的张量中只有一个数值,可以使用 .item() 来获取这个 value

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

结果:

tensor([1.5937])
1.5937262773513794

3、Numpy 数组和 Torch 张量转换

将 Numpy 数组转换为 Torch 张量

import torch
import numpy as np
x = np.ones(5,dtype=np.int)
print(x)
y = torch.from_numpy(x)
print(y)

结果:

[1 1 1 1 1]
tensor([1, 1, 1, 1, 1], dtype=torch.int32)

将 Torch 张量转换为 Numpy 数组

a = torch.ones(5,dtype=torch.int)
b = a.numpy()
print(a)
print(b,type(b))

结果:

tensor([1, 1, 1, 1, 1], dtype=torch.int32)
[1 1 1 1 1] <class 'numpy.ndarray'>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值