pytorch入门(一)

pytorch是什么?

pytorch是基于Python的科学计算包,服务于以下两种场景:

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

Terson(张量)

Tersons与Numpy中的ndarrays类似,但是再Pytorch中Tensors可以使用GPU进行计算

import torch

# 创建一个未初始化的5*3的矩阵
x = torch.empty(5, 3)

# 创建一个随机矩阵
x = torch.rand(5, 3)

# 创建一个全0的矩阵
x = torch.zeros(5, 3, dtype = torch.long)

# 使用现有数据初始化tensor
x = torch.tensor([5.5, 3])

我们在根据现有的张量创建新的张量时,一些方法将重用输入张量的属性。例如,dtype。除非设置新的值进行覆盖。

x = x.new_ones(5, 3, dtype=torch.double)
x
>> tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)

x = torch.randn_like(x, dtype=torch.float)
x
>>tensor([[ 0.5691, -2.0126, -0.4064],
        [-0.0863,  0.4692, -1.1209],
        [-1.1177, -0.5764, -0.5363],
        [-0.4390,  0.6688,  0.0889],
        [ 1.3334, -1.1600,  1.8457]])

size()方法与Numpy的shape属性返回的值相同,都表示矩阵的大小,张量也支持shape属性。

x.size()
>> torch.Size([5, 3])

注:“torch.Size”返回值tuple类型,因此它支持tuple类型的所有操作。

torch支持多种运算方式
加法

  • x+y
  • torch.add(x, y)
  • torch.add(x, y, out=result)
    result为提供输出tensor的参数,需提前定义

注:任何以""结尾的操作都会用结果替换原变量。例如:"x.copy(y)",“x.t_()”,都会改变"x"。

同样的也可以使用与Numpy索引方式相同的操作来进行对张量的操作。

x[:, 1]

torch.view可以改变张量的维度,与Numpy的reshape类似

x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)   # -1表示通过其他维度的值来计算此维度
x.size()
y.size()
z.size()
>> torch.Size([4, 4])
>> torch.Size([16])
>> torch.Size([2, 8])

如果张量中只有一个元素时,可以使用.item()来得到Python数据类型的值。

Numpy转换

torch的张量和Numpy的数组可以相互进行转换,但是他们将共享数据的内存,也就是说在转换后并不会复制出一份新的数据,改变其中的一份数据将改变另一份。

torch转换为numpy

a = torch.ones(5)
b = a.numpy()
a
b
>> tensor([1., 1., 1., 1., 1.])
>> [1., 1., 1., 1., 1.]

a.add_(1)
a
b
>> tensor([2., 2., 2., 2., 2.])
>> [2., 2., 2., 2., 2.]

numpy转换为torch,使用from_numpy自动转化

a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
a
b
>> [2., 2., 2., 2., 2.]
>> tensor([2., 2., 2., 2., 2.], dtype=torch.float64)

注:所有的Tensor类型默认都是基于CPU,CharTensor类型不支持NumPy的转换。

CUDA张量

使用.to方法可以将Tensor在GPU和CPU中来回移动

# is_available 函数判断是否有cuda可以使用
# torch.device将张量移动到指定的设备中
if torch.cude.is_available():
	device = torch.device("cuda")
	y = torch.ones_like(x, device=device)
	x = x.to(device)
	z = x + y
	print(z)
	print(z.to("cpu", torch.double))

鸣谢:感谢github作者zergtant整理的开源书籍pytorch handbook github:https://github.com/zergtant/pytorch-handbook

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值