PyTorch学习笔记(一)Tensor基本操作

Environment

  • OS: macOS Mojave
  • Python version: 3.7
  • PyTorch version: 1.4.0
  • IDE: PyCharm


0. 写在前面

本文记录了 PyTorch 中对张量对象(torch.Tensor)的基本操作,包括创建和变换。

形式上,

  1. 向量是一维张量,如每个样本实例对应的标签可以表示为一个 ( L , ) (L,) (L,) 的张量
  2. 矩阵是二维张量,如灰度图通常为一个 ( H , W ) (H, W) (H,W) 的张量
  3. 还有三维及三维以上,如彩色图通常表示为一个 ( C , H , W ) (C, H, W) (C,H,W) 的张量

看了看定义上的一些具体区别,二阶张量与矩阵的区别与联系是什么?

1. Tensor 对象创建

torch.Tensor 是 PyTorch 中的运算对象,类似于 NumPy 中的 numpy.ndarray。

1.1 由其他数据类型创建

  • torch.tensor() 由 list 或 numpy.ndarray 得到
ls = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

tensor = torch.tensor(
    data=ls,  # 传入list或numpy.ndarray
    dtype=None,  # 数据类型,None时默认与data的数据类型一致
    device='cpu',  # 所在设备,None默认为cpu,可以传入'cuda'(实际中用 .to(device) 方法居多)
    requires_grad=False, # 是否需要计算梯度
    pin_memory=False  # 是否存于锁页内存,与CPU到GPU的转换效率有关,数据量大时可以尝试为True,据说与设备有关
)

print(type(tensor))
# <class 'torch.Tensor'>

  • torch.from_numpy() 由 numpy.ndarray 得到,修改一个时,另一个也会改变
import numpy as np
import torch

array = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

tensor = torch.from_numpy(array)

# 注意,使用 id 获得两者的地址却是不一样的
print(id(array), id(tensor))
# 4352475504 4351190144

array[0][0] = 666
print(tensor)
# tensor([[666,   2,   3],
#        [  4,   5,   6],
#        [  7,   8,   9]])

1.2 按指定的数值创建

  • torch.zeros()torch.zeros_like() 创建值全为 0 0 0 的张量
tensor = torch.zeros(
    (3, 3),  # size,张量的形状,如(5, 3)、(3, 299, 299)
    out=None,
    dtype=None,
    layout=torch.strided,  # 内存中的布局形式,有strided,sparse_coo
    device=None,
    requires_grad=False
)

  • torch.ones()torch.ones_like() 创建值全为 1 1 1 的张量
tensor = torch.ones((3, 3))

  • torch.full()torch.full_like() 创建值全为 fill_value 的张量
tensor = torch.full_like(array, fill_value=6)

  • torch.eye() 创建主对角线元素为 1 1 1 的二维张量
tensor = torch.eye(
    n=3,  # 矩阵行数
	m=5,  # 矩阵列数,不设置时得到一个方阵
)

print(tensor)
# tensor([[1., 0., 0., 0., 0.],
#        [0., 1., 0., 0., 0.],
#        [0., 0., 1., 0., 0.]])

1.3 按特定的数列创建

  • torch.arange() 创建等差一维张量
tensor = torch.arange(
    start=0,  # 起始值
    end=5,  
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值