栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pytorch 学习(二)Tensor

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pytorch 学习(二)Tensor

1. Tensor

import numpy as np
import torch


# 初始化 tensor 1

t = torch.tensor([1, 2, 3])
print(t.dtype)        # torch.int64

t=torch.FloatTensor([1, 2, 3])
print(t.dtype)        # torch.float32

t=torch.tensor([1., 2., 3.])
print(t.dtype)        # torch.float32


# 初始化 tensor 2

np_array = np.arrange(12).reshape(3, 4)

    # [[0, 1, 2, 3], 
    # [4, 5, 6, 7], 
    # [8, 9, 10, 11]]
 
t = torch.from_numpy(np_array)


# 指定 tensor 类型
t =torch.tensor([1, 2, 3], dtype = float32)        # float32






# 随机创建 tensor
torch.rand(2, 3)

# 返回 tensor 尺寸
print(t.shape)        # torch.Size([2, 3])

# 创建全0、1 tensor
torch.zeros(3, 4)
torch.ones(3, 2)

torch.zeros_like(t)    # 创建一个跟 t 一样的 tensor
torch.rand_like(t)    # 创建一个跟 t (除了数据)一样的 tensor

# Size 
t = torch.rand(2, 3)

t.size()        # torch.Size([2, 3])
t.size(0)        # 2
t.size(1)        # 3



# device
t.device        # device(type = 'cpu')



# 移动到 gpu
    # 判断 cuda 可用
    torch.cuda.is_available()

    # 移动 gpu
    t = t.to('cuda')

Tensor 数据类型转换

#  tensor 数据类型转换
t = torch.rand([2, 3], dtype = int32)

t = t.type(torch.float32)

t = t.long()        # int64
t = t.float()        # float32

torch 运算

# torch 运算

t + 3        # tensor 全部元素 + 3

t + t1        # tensor + tensor 对应元素相加

t.add(t1)    # 等价于上面 赋值给 t   不开新内存

# .abs
# .mean
# .sum
# .multiply
# .divide
# .matmul  矩阵乘法 '@'
# .T       转置


# .item()    维度为 0 的 tensor 转换为 python 数据类型
# .numpy()    tensor - > numpy

view 方法

# 转换形状
t = torch.rand(4, 6)

# numpy 里的 reshape <==> tensor 里的 view
t = t.view(3, 8)

t.shape        # torch.Size([3, 8])

# 常用来展平
t = t.view(-1, 1)



squeeze

#
t1 = torch.rand([12, 48])

t1 = t1.view(1, 12, 48)        # torch.Size([1, 12, 48])

# squeeze 去掉 1 维 的维度
t2 = torch.squeeze(t1)        # torch.Size([12, 48])

张量 自动微分

#
t.requires_grad        # True / False        判断
t.requires_grad(True)        # t.requires_grad = True    设置

t = torch.ones(2, 2, requires_grad = True)

y = t + 5

y            # tensor([[6., 6.],
                       [6., 6.]], grad_fn = ) 计算此张量的方法
y.requires_grad        # True


z = y * 2
out = z.mean()

out.backward()        # 计算此过程 每一中间结果的梯度

t.grad            # grad 记录 计算得到的梯度



######### 不记录 微分 ########

#1
with torch.no_grad():
    y = t + 2         # y.requires_grad = False
#2
t.requires_grad(False)

#3
out = out.detach()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/969001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号