pytorch笔记14-17创建tensor(数据类型)

1. 基本数据类型

  1. Dimension 0/rank 0 ,0维数据(标量)

    torch.tensor(1.0)
    # out:tensor(1.)
    torch.tensor(1.3)
    # out:tensor(1.300)
    # 查看数据类型
    a = torch.tensor(2.2)
    a.shape		# 注意这里是shape没有括号,不是一个成员函数,与size()区分
    # out:torch.Size([])
    len(a.shape)
    # out:0
    a.size()
    # out:torch.Size([])		# size为成员函数,记得加括号
    
  2. Dim1/rank 1

    用来表示bias神经网络中的偏置项或者打平后的数据,如[28,28]的图片,打平后为[784]

    torch.tensor([1.1])
    # out:tensor([1.1000])     # 一维的张量
    torch.tensor([1.1,2.2])
    # out:tensor([1.1000,2.2000])
    # 或者使用torch.FloatTensor()产生一维张量
    torch.FloatTensor(1)
    # out:tensor([2.3000])
    torch.FloatTensor(2)
    # out:tensor([1.6000,3.5000])
    
  3. Dim2/rank2

    用来表示带有batch的输入,如一张图片[784],一次输入4张图片[4,784]

    a = torch.randn(2,3)
    # out:tensor([[ 0.8689, -0.5615,  0.6235],
    #       [ 0.5463,  1.1281,  0.1555]])
    a.shape
    # torch.Size([2, 3])
    a.size()
    # torch.Size([2, 3])
    a.size(0)
    # 2
    a.size(1)
    # 3
    a.shape[1]		#注意这里shape索引是[]列表结构
    # 3
    
  4. Dim3/rank3

    适合NLP的RNN输入

    a = torch.rand(2,2,3)
    # tensor([[[0.3447, 0.6256, 0.9380],
             [0.1662, 0.2953, 0.6855]],
    
            [[0.2159, 0.2447, 0.8352],
             [0.6679, 0.7348, 0.2862]]])
    a.shape
    # torch.Size([2, 2, 3])
    a.size(1)		# 2
    a.size(2)		# 3
    
  5. Dim4/rank4

    适合CNN网络输入[b,c,h,w]batch,色彩通道,图片大小

    a = torch.rand(2,3,28,28)
    # 一次输入2张28*28的彩色图片
    
  6. Mixed补充

    a = torch.rand(2,3,28,28)
    a.numel()
    # 得到数据占用内存的大小 4704=2*3*28*28
    a.dim()
    # 返回数据的维度 4 更加直观
    

2. 创建tensor

  1. import from numpy适用于大量数据导入,numpy方便

    a = np.array([2,3.3])
    torch.from_numpy(a)
    # tensor([2.0000,3.3000],dtype=torch.float64)
    
  2. import from list适用于少量数据,只需要生成给定的list数据

    torch.tensor([2,3.2])		#接收的参数就是现存的数据
    # tensor([2.0000, 3.2000])
    torch.tensor([[2,3.2],[1.2,4]])
    # tensor([[2.0000, 3.2000],
            [1.2000, 4.0000]])
    # 大写的Tensor接收数据的维度,也可直接给值,不建议直接给值使用
    torch.IntTensor(2,3)
    # tensor([[1684420912,  758330982,878981426],
            [ 929379373,  876162359, 825045090]], dtype=torch.int32)
    torch.IntTensor([2,3])		# 这里直接传入list给定值
    # tensor([2, 3], dtype=torch.int32)
    
  3. uninitialized未初始化的数据及初始化定义

    ​ 1. 程序报错nan或inf查看数据是否未初始化,定义了数据空间后,记得及时写入数据

    torch.empty(d1,d2,d3)
    
     2. 带初始化的数据
    
    torch.rand(3,3)		# 产生[0,1]均匀分布的数据
    # tensor([[0.1713, 0.8286, 0.8841],
            [0.4365, 0.2444, 0.5381],
            [0.8176, 0.0386, 0.4318]])
    a = torch.rand(3,3)
    b = torch.rand_like(a)	
    # 接收参数为tensor,产生同样大小的tensor
    torch.randint(1,10,[3,3])	# 产生给定范围[1,10)的二维数据
    # tensor([[6, 7, 9],
            [8, 1, 9],
            [6, 7, 3]])
    torch.randn(3,3)	# 产生正态分布的数据N(0,1)均值0,方差1
    torch.full([2,3],7)		# 指定数据填充
    torch.full([],7)	# tensor(7),dim0
    torch.arange(0,10)	# 等差数列,参数(start,end,step)
    # 数据的切分,切分为m个,包括右端点,与arange不同
    torch.linspace(0,10,5)
    # tensor([ 0.0000,  2.5000,  5.0000,  7.5000, 10.0000])
    torch.ones(3,3)		# 全部为1
    torch.zeros(3,3)	# 全部为0
    torch.eye(3,3)		# 对角矩阵,只有对角为1
    
    1. 数据打散
    torch.randperm(3)
    # tensor([2, 0, 1]) 产生随机索引
    a = torch.rand(3,2)		# 3位同学语文成绩
    b = torch.rand(3,2)		# math
    idx = torch.randperm(3)
    a[idx],b[idx]
    
  4. set default type设置tensor的默认类型

    # 默认torch的小数为FloatTensor
    torch.tensor([1.,2]).type()
    # 'torch.FloatTensor'
    torch.set_default_tensor_type(torch.DoubleTensor)		# 设置默认为Double类型
    torch.tensor([1.,2]).type()
    # 'torch.DoubleTensor'
    

3. type-check

a = torch.randn(2,3)
a.type()
# 'torch.FloatTensor' 可以查看数据的类型
# 在程序中检查数据类型是否一致
isinstance(a,torch.FloatTensor)
# True
# 与GPU上的数据进行比较
isinstance(a,torch.cuda.FloatTensor)
# False
# 使用.cuda方法,将数据类型转换为gpu数据
a = a.cuda()
isinstance(a,torch.cuda.FloatTensor)
# True
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值