深度学习Pytorch初步——Tensor张量

AI课程笔记——深度学习框架Pytorch

文章目录

      • AI课程笔记——深度学习框架Pytorch
        • 1pytorch基本数据类型
          • 1.1回顾:Python的6大数据类型
          • 1.2Pytorch数据类型:张量(一种)
            • 1.2.1将字符串转化称为张量(Embedding)
          • 1.3实战尝试
            • 1.3.1创建张量+张量的内置函数
            • 1.3.2创建高维向量
          • 1.4普通张量的创建(直接利用api&借由numpy库转化)
          • 1.5特殊张量的创建(全1&全0张量&对角矩阵等)
            • 注:创建全0全1矩阵可以在模型中作为初始化lebel使用
            • 注:创建等差向量可以作为模型索引的工具
          • 1.6无初始化的张量创建
            • 1.7小结

1pytorch基本数据类型

1.1回顾:Python的6大数据类型
# 数字:Number【不可变】
# 列表:List【可变】
# 字典:Dictionary【可变】
# 元组:Tuple【不可变】
# 字符串:String【可变】
# 集合:Set【可变】
1.2Pytorch数据类型:张量(一种)
# All is about Tensor(标量和向量都属于张量)
1.2.1将字符串转化称为张量(Embedding)
* 1.word2vec

* 2.glove

1.3实战尝试
1.3.1创建张量+张量的内置函数
import torch
a = torch.tensor(1)
print(a) #输出:tensor(1)

#查看数据类型(type函数)
print(a.type()) #输出:torch.LongTensor
print(type(a)) #输出:

#查看设备(divice属性)
print(a.device) #输出:cpu【进行神经网络训练的时候,需要把训练集合数据集放进同一个设备中】

#查看形状
print(a.shape) #输出:torch.Size([])【代表张量是0维的,也就是一个标量,在模型中可以是loss损失】
print(a.size()) #输出:torch.Size([])

#判断张量是否为某一个数据类型
print(isinstance(a,torch.LongTensor)) #输出:True

#查看维度
print(a.dim()) #输出:0
print(len(a.shape)) #输出:0

#标量取值(只有标量可以实现)
print(a.item())

#回顾:items()函数是用来获取字典中的值的函数,注意区别!
1.3.2创建高维向量
  • 一维向量相当于神经网络的线性输入层(以向量的形式进行输入)->linear layer input
import torch
b = torch.tensor([1,2,3,4])
print(b)
print(b.type())
print(b.dim())
print(b.device)
print(b.shape)
#输出:
#tensor([1, 2, 3, 4])
#torch.LongTensor
#1
#cpu
#torch.Size([4])【张量含有四个元素】
  • 二维张量可以看成是batch个一维向量的输入(batch是需要训练的数据的个数)->batch+linear input
import torch
c = torch.tensor([[1,2,3,4],[5,6,7,8]])
print(c)
print(c.type())
print(c.dim())
print(c.device)
print(c.shape)
#输出:
#tensor([[1, 2, 3, 4],[5, 6, 7, 8]])
#torch.LongTensor
#2
#cpu
#torch.Size([2, 4])【表示张量由2个1维向量构成,且每个都有4个元素】
  • 3维张量看成一张图片[3,224,224]表示三通道,每通道都是224*224大小的2维向量
import torch
d = torch.tensor([[[1,2,3,4],[5,6,7,8]],[[9,8,7,6],[5,4,3,2]]])
print(d)
print(d.type())
print(d.dim())
print(d.device)
print(d.shape)
print(torch.numel(d)) #此函数用于获取张量中所有元素的个数
#输出:
#tensor([[[1, 2, 3, 4],[5, 6, 7, 8]],[[9, 8, 7, 6],[5, 4, 3, 2]]])
#torch.LongTensor
#3
#cpu
#torch.Size([2, 2, 4])【表示三维张量由2个2维张量构成,二维张量各由2个1维张量构成,1维张量有4个元素】
#16
  • 模型一般都是4维张量,[B,3,224,224]前面还有一个Batch维度
1.4普通张量的创建(直接利用api&借由numpy库转化)
#进行初始化的张量创建(利用api进行调用)
a = torch.tensor(4)
b = torch.FloatTensor(4) #创建一个浮点型的张量

import numpy as np
a = np.array([2,3,3])
print(a)
b = torch.from_numpy(a)
print(b)
#输出:
#[2 3 3]
#tensor([2, 3, 3], dtype=torch.int32)

1.5特殊张量的创建(全1&全0张量&对角矩阵等)
import torch
#创建全1&全0的张量tensor
c = torch.ones(3,3) #(3,3)表示创建3*3的全1张量(矩阵)
print(c)
d = torch.zeros(4,4) #创建4*4的全0矩阵
print(d)
#输出:
#tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])
#tensor([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]])

#创建对角矩阵
e = torch.eye(3,3)
print(e)
#输出:
#tensor([[1., 0., 0.],
#        [0., 1., 0.],
#        [0., 0., 1.]])

#创建向量
f = torch.arange(0,10,1) #三个参数分别是初始值,最终值(左开右闭),步长
print(f)
print(f.dim())
#输出:
#tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#1

#创建1个数列
g = torch.linspace(0,10,4) #此处的第三个参数4代表的是均分,将区间等分成4个部分
print(g)
#输出:
#tensor([ 0.0000,  3.3333,  6.6667, 10.0000])
注:创建全0全1矩阵可以在模型中作为初始化lebel使用
注:创建等差向量可以作为模型索引的工具
1.6无初始化的张量创建
import torch
#创建一个空张量
a = torch.empty((2,3),dtype = torch.int32, device = "cpu") #几个参数:形状、类型、设备
print(a) #a的值是被随机赋予的
#输出:
#tensor([[         0,          0, 1667392565],
#        [1714435430, 1647337780, 1681143351]], dtype=torch.int32)


#!!!注意区分tensor()和Tensor()的不同
b = torch.Tensor(1,2)
c = torch.tensor([2,3])
print(b)
#输出:tensor([[1.4013e-45, 0.0000e+00]])
print(c)
#输出:#tensor([2, 3])

#指定某种类型的tensor
d = torch.Tensor(2,3)
torch.set_default_tensor_type(torch.DoubleTensor) #设定默认的张量类型
b = torch.Tensor(3,3)
print(a)
print(b)
print(a.type())
print(b.type())
#输出:
#tensor([[0., 0., 0.],
#        [0., 0., 0.]])
#tensor([[0., 0., 0.],
#        [0., 0., 0.],
#        [0., 0., 0.]])
#torch.DoubleTensor
#torch.DoubleTensor

#产生一个正态分布的张量
e = torch.randn(3,3)
print(e)
#输出:
#tensor([[-0.5739, -0.2047, -0.8077],
#        [ 1.3966, -0.8410, -1.1759],
#        [ 0.6387, -0.0614,  0.5266]])

#产生一个固定长度随机打散的张量
f = torch.randperm(10)
print(f)
#输出:tensor([5, 3, 8, 4, 1, 7, 0, 9, 2, 6])
1.7小结
# 利用tensor进行有初始值的初始化操作,传入的值是需要初始化的内容
# 利用Tensor进行没有初始值的初始化操作,传入的值是需要创建的张量的大小

你可能感兴趣的:(人工智能,ai,python)