pytorch基本操作(代码片段)

赵有才er 赵有才er     2023-01-17     550

关键词:

基本元素操作

·Tensors张量:张量的概念类似于Numpy中的ndarray数据机构,最大的区别在于Tensor可以利用GPU的加速功能。

·我们使用Pytorch的时候,常规步骤是先将torch引用进来,如下所示:

from __future__ import print_function
import torch

·创建矩阵的操作

·创建一个没有初始化的矩阵

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

·输出结果

tensor([[8.9082e-39, 6.9796e-39, 9.0919e-39],

        [9.9184e-39, 7.3470e-39, 1.0194e-38],

        [1.0469e-38, 1.0010e-38, 8.4490e-39],

        [1.1112e-38, 9.5511e-39, 1.0102e-38],

        [7.3470e-39, 1.0653e-38, 1.0194e-38]])

·创建一个有初始化的矩阵

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

·输出结果

tensor([[0.4131, 0.9503, 0.6787],

        [0.4152, 0.3765, 0.7076],

        [0.7593, 0.4818, 0.6114],

        [0.9367, 0.9751, 0.4312],

        [0.1160, 0.9584, 0.9142]])

·对比有无初始化的矩阵;当声明一个未初始化的矩阵时,它本身不包含任何确切的值,当创建一个未初始化的矩阵时,分配给矩阵的内存中有什么数值就赋值给了这个矩阵,本质上是毫无意义的数据

·创建一个全零矩阵并可指定数据元素的类型为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]])

·直接通过数据创建张量

x = torch.tensor([2.5, 3.5])
print(x)

·输出结果

tensor([2.5000, 3.5000])

·通过已有的一个张量创建相同尺寸的新张量

#引用news_methods方法得到一个张量

x = x.new_ones(5, 3, dtype=torch.double)
print(x)

#利用randn_like方法得到相同张量尺寸的一个新张量,并且采用随机初始化来对其赋值。
y = torch.randn_like(x, dtype=torch.float)
print(y)

·输出结果

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

        [1., 1., 1.],

        [1., 1., 1.],

        [1., 1., 1.],

        [1., 1., 1.]], dtype=torch.float64)



tensor([[-0.5876,  1.3036, -0.3869],

        [ 1.7733,  0.1932,  0.2446],

        [ 0.5916,  1.2084, -0.1035],

        [ 1.3692,  1.1909, -2.2429],

        [-0.3186, -1.4448,  1.0075]])   #采用标准正态分布进行初始化

·得到张量的尺寸

print(x.size)

·输出结果

torch.Size([5, 3])

·注意

·torch.Size函数本质上返回的是一个tuple(元组),因此他支持一切元组的操作

加法操作

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

·输出结果

tensor([[1.5351, 1.6842, 1.3666],

        [1.3795, 1.8638, 1.3811],

        [1.0541, 1.7301, 1.0899],

        [1.8753, 1.7973, 1.4234],

        [1.5610, 1.8953, 1.6338]], dtype=torch.float64)

·第二种加法方式

print(torch.add(x, y))

·输出结果

tensor([[1.7277, 1.9559, 1.1531],

        [1.6201, 1.5433, 1.9186],

        [1.7482, 1.1966, 1.7893],

        [1.2140, 1.6189, 1.1661],

        [1.0954, 1.3963, 1.9146]], dtype=torch.float64)

·第三种加法方式

#提前设定一个空的张量
result = torch.empty(5, 3)
#将空的张量作为加法的结果储存张量
torch.add(x, y, out=result)
print(result)

·输出结果

tensor([[1.6799, 1.9276, 1.9753],

        [1.7507, 1.1125, 1.5353],

        [1.1135, 1.2286, 1.8567],

        [1.0847, 1.5680, 1.7244],

        [1.7176, 1.8635, 1.4754]])

·第四种加法方式:in-place(原地置换)

y.add_(x)
print(y)

·输出结果

tensor([[1.3709, 1.1069, 1.7186],

        [1.6112, 1.8828, 1.3935],

        [1.2912, 1.3112, 1.0213],

        [1.5485, 1.0155, 1.8169],

        [1.3625, 1.5086, 1.0970]])

·注意

     ·所有in-place的操作函数都有一个下划线的后缀

      ·比如x.copy_(y), x.add_(y)都会直接改变x的值

·用类似于Numpy的方式对张量进行操作:

print(x[:, 1])

·输出结果

tensor([1., 1., 1., 1., 1.], dtype=torch.float64)

·改变张量的形状:torch.view()

x = torch.randn(4, 4)
# tensor.view()操作需要保证数据元素的总数量不变
z = x.view(-1, 8)
print(x.size(), y.size(), z.size())

·输出结果

torch.Size([4, 4]) torch.Size([5, 3]) torch.Size([2, 8])
x = torch.randn(4, 4)
# tensor.view()操作需要保证数据元素的总数量不变
z = x.view(-1, 8)
y = x.view(16)
print(x.size(), y.size(), z.size())

·输出结果

torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

        ··注意!!元素的个数一定不能改变

·如果张量中只有一个元素,可以用.item()将值取出,作为一个python umber

item.randn(1)表示将第一个值取出,作为一个python number

x = torch.randn(1)
print(x)
print(x.item())

·输出结果

tensor([-1.2572])
-1.257204294204712

·注意!!.item只能提取单一的一个值

·关于Torch Tensor和Numpy array之间的相互转换

·Torch Tensor和Numpy array共享底层的内存空间,因此改变其中一个的值,另一个也会随之被改变。

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

·输出结果

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

·将Torch Tensor转换为Numpy array

b = a.numpy()
print(b)

·输出结果

[1. 1. 1. 1. 1.]

·对其中一个进行加法操作,另一个也随之被改变

a.add_(1)
print(a)
print(b)

·输出结果

tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]

·将Numpy array转换为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)

··注意!!

       ··在所有CPU上的Tensors,除了CharTensor,都可以转换为Numpy array并可以反向转换。

·关于Cuda Tensor,Tensor可以用.to()的方法来将其移动到任意设备上。

# 如果服务器上已安装了GPU和CUDA
if torch.cuda.is_available():
    #定义一个设备对象,这里指定成CUDA,即使用GPU
    device = torch.device("cuda")
    #直接在GPU上创建一个Tensor
    y = torch.ones_like(x, device=device)
    #将在CPU上面的x张量移动到GPU上面
    x = x.to(device)
    #x和y都在GPU上面,才能支持加法运算
    z = x + y
    #此处的张量z在GPU上面
    print(z)
    #也可以将z转移到CPU上面,并同时指定张量元素的数据类型
    print(z.to("cpu", torch.double))

·输出结果

tensor([0.6469], device='cuda:0')

tensor([0.6469], dtype=torch.float64)

总结

·什么是Pytorch

        ·Pytorch是一个基于Numpy的科学计算包,作为Numpy的代替者,向用户提供使用GPU强大功能的能力。

        ·作为一款深度学习的平台,向用户提供最大的灵活性和速度。

·Pytorch的基本元素操作

        ·矩阵的初始化:

                ·torch.empty()

                ·torch.randn(n, m)

                ·torch.zeros(n, m, dtype=torch.double)

        ·其他若干操作:

                ·x.new_ones(n, m, dtype=torch.double)

                ·torch.randn_like(x, dtype=torch.float)

                ·x.size

        ·Pytorch的基本运算操作。

                ·加法操作:

                        ·x +y

                        ·torch.add(x, y)

                        ·torch.add(x, y, out=result)

                        ·y.add_(x)

                ·其他若干操作

                        ·x.view()

                        ·x.item()

·Torch Tensor和Numpy array之间的相互转换。

        ·将Torch Tensor转换为Numpy array:

                ·b = a.numpy()

        ·将Numpy array转换为Torch Tensor:

                ·b = torch.from_numpy(a)

        ·注意:所有在CPU上的Tensor,除了CharTensor,都可以转换为Numpy array并可以反向转换。

·任意的Tensors可以用.to()的方法来将其移动到任意设备上。

        ·x = x.to(device)

pytorch基本操作(代码片段)

基本元素操作·Tensors张量:张量的概念类似于Numpy中的ndarray数据机构,最大的区别在于Tensor可以利用GPU的加速功能。·我们使用Pytorch的时候,常规步骤是先将torch引用进来,如下所示:from__future__importprint_functio... 查看详情

pytorch基础-张量基本操作(代码片段)

一,张量的基本操作Pytorch中,张量的操作分为结构操作和数学运算,其理解就如字面意思。结构操作就是改变张量本身的结构,数学运算就是对张量的元素值完成数学运算。常使用的张量结构操作:维度变换(tranpose、view等)... 查看详情

pytorch图像基本操作(代码片段)

为了方便进行数据的操作,pytorch团队提供了一个torchvision.transforms包,我们可以用transforms进行以下操作:PIL.Image/numpy.ndarray与Tensor的相互转化;归一化;对PIL.Image进行裁剪、缩放等操作。通常,在使用torchvi... 查看详情

超详细pytorch入门教程(代码片段)

Pytorch基本语法1认识Pytorch2Pytorch的基本元素操作3Pytorch的基本运算操作4关于TorchTensor和Numpyarray之间的相互转换5总结1认识Pytorch什么是Pytorch?Pytorch是一个基于Numpy的科学计算包,向它的使用者提供了两大功能.作为Numpy的替代者,... 查看详情

pytorch:nn操作(代码片段)

LayerNormtorch.nn.LayerNorm(normalized_shape,eps=1e-05,elementwise_affine=True,device=None,dtype=None)示例>>>input=torch.randn(20,5,10,10)>>>#WithLearnableParameter 查看详情

pytorch:nn操作(代码片段)

LayerNormtorch.nn.LayerNorm(normalized_shape,eps=1e-05,elementwise_affine=True,device=None,dtype=None)示例>>>input=torch.randn(20,5,10,10)>>>#WithLearnableParameter 查看详情

《动手学深度学习》pytorch:数据操作(代码片段)

PyTorch:数据操作创建`Tensor`Tensor操作算术操作索引改变形状线性代数2.2.3广播机制2.2.4运算的内存开销2.2.5`Tensor`和NumPy相互转换`Tensor`转NumPyNumPy数组转`Tensor`2.2.6`Tensor`onGPU在深度学习中,我们通常... 查看详情

pytorch张量操作(代码片段)

1.数据类型如何表示string?One-hot     [0,1,0,0,...]Embedding  Word2vec,glove类型推断1#typecheck2a=torch.randn(2,3)3print(a.type())#torch.FloatTensor4print(type(a))#<class‘torc 查看详情

pytorch:tensor-基本操作(代码片段)

-柚子皮-Tensor和Variabletorch新版本中合并了Tensor和Variable,Variable仍然像以前一样工作,只不过返回的是Tensor。这意味着我们使用的时候只需要声明Tensor就好了,更详细的,torch.tensor可以像旧的Variable一样对计算历史... 查看详情

datawhales深入浅出pytorch-第二章(代码片段)

【DataWhales】深入浅出Pytorch-第二章1.Pytorch的基本操作1.1建立tensor类型(2种方法)1.2tensor与numpy(array)之间的转换1.3tensor常见的构造函数(4个函数)2.Tensor的基本操作2.1查看tensor的维度信息(2种方式)2.2tensor... 查看详情

pytorch中的autograd详解(代码片段)

Pytorch中的autograd详解学习目标1.关于torch.Tensor2.关于Tensor的操作3.关于梯度Gradients4.总结学习目标掌握自动求导中的Tensor概念和操作.掌握自动求导中的梯度Gradients概念和操作.在整个Pytorch框架中,所有的神经网络本质上都是一个autogr... 查看详情

pytorch从入门到精通100讲-pytorch张量从概念到应用(代码片段)

PyTorch张量的创建与基本类型0导读在我们不知道什么是深度学习计算框架时,我们可以把PyTorch看做是Python的第三方库,在PyTorch中定义了适用于深度学习的张量Tensor,以及张量的各类计算。就相当于NumPy中定义的Array和对应的科学... 查看详情

在gpu上训练pytorch代码(代码片段)

文章目录PyTorch操作tensor在不同设备上的操作网络的不同设备上PyTorch操作PyTorch允许我们在程序内部进行计算时,无缝地将数据移动到GPU。当我们使用GPU时,我们可以使用.cuda()方法,当我们使用CPU时,我们可以使用... 查看详情

在gpu上训练pytorch代码(代码片段)

文章目录PyTorch操作tensor在不同设备上的操作网络的不同设备上PyTorch操作PyTorch允许我们在程序内部进行计算时,无缝地将数据移动到GPU。当我们使用GPU时,我们可以使用.cuda()方法,当我们使用CPU时,我们可以使用... 查看详情

pytorch使用cifar10数据集进行图片分类+pytorch基本入门知识总结(代码片段)

更好的阅读效果和体验:https://wyqz.top/p/1888017128.htmlGPU相关检查GPU是否工作importtorchtorch.cuda.is_available()Dataset可以继承Dataset来制作自己的数据类fromtorch.utils.dataimportDatasetfromPILimportImageimportosclassMyData( 查看详情

pytorch搭建基本的gan模型及训练过程(代码片段)

...数绘图函数GAN的训练输出整体代码参考资料概述本文通过Pytorch搭建基本的GAN模型结构,并通过torchvision的MNIST数据集进行测试。对于GAN模型的基本结构及公式的理解可以看前一篇博客:GAN的理论知识及公式的理解下文的实... 查看详情

pytorch复习(代码片段)

基本函数:dir()函数:让我们知道此工具箱以及此工具箱中有什么东西help()函数:能让我们知道每个工具的使用方法蚂蚁、蜜蜂数据集目录操作,以及基本数据集的制作fromtorch.utils.dataimportDatasetimportcv2importosfromPILimportIma... 查看详情

深度学习——pytorch基础(代码片段)

深度学习(1)——Pytorch基础作者:夏风喃喃参考:《动手学深度学习第二版》李沐文章目录深度学习(1)——Pytorch基础一.数据操作二.数据预处理三.绘图四.自动求导五.概率论导入相关包:importtorch ... 查看详情