Pytorch学习笔记1——Pytorch基础

Pytorch学习笔记1——Pytorch基础

1.张量(Tensor)

张量的英文是Tensor,它是PyTorch里面基础的运算单位,与Numpy中的ndarray相同都表示的是一个多维的矩阵。 与ndarray的最大区别就是,PyTorch的Tensor可以在 GPU 上运行,而 numpy 的 ndarray 只能在 CPU 上运行,在GPU上运行大大加快了运算速度

首先导入所需库函数

import torch
import numpy as np
torch.__version__

下面我们生成一个简单的张量

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

tensor([[0.6904, 0.7419, 0.8010],
        [0.1722, 0.2442, 0.8181]])

以上生成了一个,2行3列的的矩阵,我们看一下他的大小:

# 可以使用与numpy相同的shape属性查看
print(x.shape)
# 也可以使用size()函数,返回的结果都是相同的
print(x.size())

torch.Size([2, 3])
torch.Size([2, 3])

下面我们来生成一些多维的张量:

pythony=torch.rand(2,3,4,5)
print(y.size())

torch.Size([2, 3, 4, 5])

在同构的意义下:

  • 第零阶张量 (r = 0) 为标量 (Scalar)
  • 第一阶张量 (r = 1) 为向量 (Vector)
  • 第二阶张量 (r = 2) 则成为矩阵 (Matrix)
  • 第三阶以上的统称为多维张量

其中要特别注意的就是标量,我们先生成一个标量:

#我们直接使用现有数字生成
scalar =torch.tensor(3.1433223)
print(scalar)
#打印标量的大小
scalar.size()

tensor(3.1433)
torch.Size([])

对于标量,我们可以直接使用 .item() 从中取出其对应的python对象的数值

scalar.item()

3.143322229385376

特别的:如果张量中只有一个元素的tensor也可以调用tensor.item方法

tensor = torch.tensor([3.1433223]) 
print(tensor)
tensor.size()

tensor([3.1433])
torch.Size([1])
tensor.item()

3.143322229385376

2.Tensor的基本类型

Tensor的基本数据类型有五种:

  • 32位浮点型:torch.FloatTensor(默认)
  • 64位浮点型:torch.DoubleTensor
  • 64位整型:torch.LongTensor
  • 32位整型:torch.IntTensor
  • 16位整型:torch.ShortTensor
  • 除以上数字类型外,还有 byte和chart型
long=tensor.long()
long

tensor([3])
half=tensor.half()
half

tensor([3.1426], dtype=torch.float16)
int_t=tensor.int()
int_t

tensor([3], dtype=torch.int32)
flo = tensor.float()
flo

tensor([3.1433])
short = tensor.short()
short

tensor([3], dtype=torch.int16)
ch = tensor.char()
ch

tensor([3], dtype=torch.int8)
bt = tensor.byte()
bt

tensor([3], dtype=torch.uint8)

3.Numpy类型与Tensor类型相互转化

使用numpy方法将Tensor转为ndarray

a = torch.randn((3, 2))
# tensor转化为numpy
numpy_a = a.numpy()
print(numpy_a)

[[ 0.46819344  1.3774964 ]
 [ 0.9491934   1.4543315 ]
 [-0.42792308  0.99790514]]

numpy转化为Tensor

torch_a = torch.from_numpy(numpy_a)
torch_a

tensor([[ 0.4682,  1.3775],
        [ 0.9492,  1.4543],
        [-0.4279,  0.9979]])

Tensor和numpy对象共享内存,所以他们之间的转换很快,而且几乎不会消耗什么资源。但这也意味着,如果其中一个变了,另外一个也会随之改变。

4.CPU与GPU设备之间的转化

一般情况下可以使用.cuda方法将tensor移动到gpu,这步操作需要cuda设备支持

cpu_a=torch.rand(4, 3)
cpu_a.type()

'torch.FloatTensor'
gpu_a=cpu_a.cuda()
gpu_a.type()

'torch.cuda.FloatTensor'

使用.cpu方法将tensor移动到cpu

cpu_b=gpu_a.cpu()
cpu_b.type()

'torch.FloatTensor'

如果我们有多GPU的情况,可以使用to方法来确定使用那个设备,这里只做个简单的实例:

#使用torch.cuda.is_available()来确定是否有cuda设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)
#将tensor传送到设备
gpu_b=cpu_b.to(device)
gpu_b.type()

cuda
'torch.cuda.FloatTensor'

5.Tensor的初始化

Pytorch中有许多默认的初始化方法可以使用

# 使用[0,1]均匀分布随机初始化二维数组
rnd = torch.rand(5, 3)
rnd

tensor([[0.3804, 0.0297, 0.5241],
        [0.4111, 0.8887, 0.4642],
        [0.7302, 0.5913, 0.7182],
        [0.3048, 0.8055, 0.2176],
        [0.6195, 0.1620, 0.7726]])
##初始化,使用1填充
one = torch.ones(2, 2)
one

tensor([[1., 1.],
        [1., 1.]])
##初始化,使用0填充
zero=torch.zeros(2,2)
zero

tensor([[0., 0.],
        [0., 0.]])
#初始化一个单位矩阵,即对角线为1 其他为0
eye=torch.eye(2,2)
eye

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

6.对张量进行的常用操作

PyTorch中对张量的操作api 和 NumPy 非常相似,如果熟悉 NumPy 中的操作,那么他们二者基本是一致的:

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

tensor([[ 0.6922, -0.4824,  0.8594],
        [ 0.4509, -0.8155, -0.0368],
        [ 1.3533,  0.5545, -0.0509]])

max_value, max_idx = torch.max(x, dim=1)
print(max_value, max_idx)

tensor([0.8594, 0.4509, 1.3533]) tensor([2, 0, 0])

# 每行 x 求和
sum_x = torch.sum(x, dim=1)
print(sum_x)

tensor([ 1.0692, -0.4014,  1.8568])

y=torch.randn(3, 3)
z = x + y
print(z)

tensor([[-0.3821, -2.6932, -1.3884],
        [ 0.7468, -0.7697, -0.0883],
        [ 0.7688, -1.3485,  0.7517]]

正如官方60分钟教程中所说,以_为结尾的,均会改变调用值

# add 完成后x的值改变了
x.add_(y)
print(x)

tensor([[-0.3821, -2.6932, -1.3884],
        [ 0.7468, -0.7697, -0.0883],
        [ 0.7688, -1.3485,  0.7517]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一个开源的机器学习框架,它提供了用于构建、训练和部署深度学习模型的丰富工具和库。自监督学习是一种无监督学习的方法,其中模型以无标签的数据作为输入,通过学习生成有用的表示或特征,从而实现自我监督。在PyTorch中,可以使用自动编码器来实现自监督学习。自动编码器是一种神经网络结构,它可以通过最小化输入与输出之间的差异来学习数据的低维表征。通过自监督学习,模型可以在没有标签的情况下学习到有用的特征,这对于某些任务而言非常有价值。如果你对PyTorch中自监督学习的具体实现感兴趣,可以参考《深度学习入门之PyTorch》一书中关于自监督学习的章节,以及基于旋转特征的自监督学习的算法思路解析和应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [PyTorch 学习笔记(九):自动编码器(AutoEncoder)](https://blog.csdn.net/h__ang/article/details/90720579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [python基础实现基于旋转特征的自监督学习(一)——算法思路解析以及数据集读取](https://blog.csdn.net/DuLNode/article/details/130042006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值