Perfree

Perfree

Perfree

简简单单的生活,安安静静的写博客~

54 文章数
71 评论数

Python之Pytorch机器学习安装及基础api

perfree
2019-09-18 / 0 评论 / 3548 阅读 / 3 点赞

PyTorch是什么?

PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。 它主要由Facebook的人工智能研究小组开发。Uber的"Pyro"也是使用的这个库。基于Python的科学计算包,服务于以下两种场景:

  1. 作为NumPy的替代品,可以使用GPU的强大计算能力
  2. 提供最大的灵活性和高速的深度学习研究平台

本文参考pytorch-handbook做的笔记

安装

Pytorch主要使用GPU作为计算力,需要安装CUDA和cuDNN,可以参考win10安装CUDA10和cuDNN,安装成功后进行Pytorch的安装,这里使用了Anaconda环境管理软件,安装及使用可参考Anaconda简单入门,可以子Anaconda新建一个工作空间如pytorch,接下来切换到工作空间进行安装:

# 切换至pytorch工作空间
activate pytorch
# 安装pytorch
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch

安装完成后进行测试:

python
import torch
torch.__version__

输出版本号即为成功,如'1.2.0'

创建矩阵

空矩阵

创建一个5x3的矩阵,但未初始化

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

输出:

tensor([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]])

随机初始化

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

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

输出:

tensor([[0.2500, 0.0015, 0.0559],
        [0.6813, 0.5940, 0.8406],
        [0.6544, 0.2621, 0.9989],
        [0.6717, 0.5013, 0.9329],
        [0.7571, 0.8893, 0.9461]])

0填充的矩阵

创建一个0填充的矩阵,数据类型为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([1,2, 3])
print(x)

输出:

tensor([1, 2, 3])

获取 size

使用size方法与Numpy的shape属性返回的相同

print(x.size())

输出:

torch.Size([3])

矩阵加法

可以直接相加,或者使用add方法

x = torch.rand(5, 3)
y = torch.rand(5, 3)
# 加法1
print(x + y)
# 加法2
print(torch.add(x, y))

输出

tensor([[0.7529, 0.9342, 1.7580],
        [0.5866, 1.1636, 0.3041],
        [1.0953, 0.3398, 0.9801],
        [1.1558, 1.1327, 1.0594],
        [1.3585, 1.3925, 1.3977]])
tensor([[0.7529, 0.9342, 1.7580],
        [0.5866, 1.1636, 0.3041],
        [1.0953, 0.3398, 0.9801],
        [1.1558, 1.1327, 1.0594],
        [1.3585, 1.3925, 1.3977]])

改变张量的维度和大小

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

Numpy转换

转换为numpy数组

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

输出:

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

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)

CUDA张量

Tensors与Numpy中的 ndarrays类似,但是在PyTorch中 Tensors 可以使用GPU进行计算.

使用.to 方法 可以将Tensor移动到任何设备中

# is_available 函数判断是否有cuda可以使用
# ``torch.device``将张量移动到指定的设备中
if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA 设备对象
    y = torch.ones_like(x, device=device)  # 直接从GPU创建张量
    x = x.to(device)                       # 或者直接使用``.to("cuda")``将张量移动到cuda中
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # ``.to`` 也会对变量的类型做更改

输出:

tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], device='cuda:0')
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
文章不错,扫码支持一下吧~
上一篇 下一篇
评论
来首音乐
最新回复
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月