pytorch中Tensor数据类型的研究

import torch

'''
Tensor定义: 在pytorch中Tensor是存储存储数据的容器。标量,向量,矩阵,多维数据都可以用Tensor表示。
全面认识Tensor只需要分析清楚Tensor的 数据类型,存放位置,数据类型Tensor,数据维度。本文从下面5个
方面研究了Tensor的使用。可用于代码参考
1. Tensor创建
2. 数据类型查看,数据类型的转换, float32
3. 数据存放位置查看,存放位置的转换, cpu - gpu
4. 数据大小查看, 维度变换,维度重复,
5. 数据类型,数据存在形式的转换, numpy - Tensor。 神经网络传播以Tensor运算,自己运算使用numpy。

'''

#%% 1. Tensor的创建
x=torch.empty(2,3,4)
print(x)
# 根据维度创建Tensor
x = torch.Tensor(2,3)
b = torch.FloatTensor(2, 3)
print("x Tensor: ",x)
# 根据数据创建Tensor
x = torch.Tensor([2,3])
print("x Tensor: ",x)
# 创建相同原始的Tensor
b = torch.full([2, 3], 7)
print("x Tensor: ",b)
# 全0, 1 Tensor
a = torch.zeros([3, 4])
print(a)
b = torch.ones([3, 4])
print(b)
# 创建对角阵
c = torch.eye(2, 3) # 只能是二维的,传入dim=2的shape
d = torch.eye(3 )# 也可以只给一个参数n,得到的就是n阶的对角方阵。
print(c)
print(d)
# 创建升降序的Tensor
c = torch.arange(1, 8, 2)  # tensor([0, 2, 4, 6])
print(c)

# 创建一定分布的张量
# 均匀分布
x = torch.rand(5, 3)
print(x)
# 正太分布
x = torch.randn(5, 3)
print(x)
# 离散分布
x = torch.normal(mean=0.5, std=torch.Tensor([2,3,5,7,5,3,2]))
print(x)
# 线性向量
x = torch.linspace(3, 10, steps=5)
print(x)

#%% 2. 数据类型研究, 32,64位浮点,16,32,64位整形数据
# 2.1 创建不同数据类型的Tensor
# 2.1.1 浮点Tensor
a=torch.Tensor( [[2,3],[4,8],[7,9]] )
print ("a:",a)
print ("a.dtype:",a.dtype)  # torch.float32
b=torch.FloatTensor( [[2,3],[4,8],[7,9]] )
print ("b:",b)
print ("b.dtype:",b.dtype)  # torch.float32
b=torch.DoubleTensor( [[2,3],[4,8],[7,9]] )
print ("b:",b)
print ("b.dtype:",b.dtype)  # torch.float64
# 2.1.2 整形Tensor
b=torch.ShortTensor( [[2,3],[4,8],[7,9]] )
print ("b:",b)
print ("b.dtype:",b.dtype)  # torch.int16
c = torch.IntTensor(2, 3)
print ("c:",c)
print ("c.dtype:",c.dtype)  # torch.int32
b=torch.LongTensor( [[2,3],[4,8],[7,9]] )
print ("b:",b)
print ("b.dtype:",b.dtype)  # torch.int64
b = torch.ByteTensor(2,3)
print ("b:",b)
print ("b.dtype:",b.dtype)  # torch.uint8
b = torch.CharTensor(2,3)
print ("b:",b)
print ("b.dtype:",b.dtype)  # torch.int8
# 2.2 数据类型转换
a=torch.Tensor( [[2,3],[4,8],[7,9]] )
print ("a:",a)
print ("a.dtype:",a.dtype)  # torch.float32
# 转换成浮点性
newtensor = a.float()
print ("newtensor:",newtensor)
print ("newtensor.dtype:",newtensor.dtype)  # torch.float32
newtensor = a.double()
print ("newtensor:",newtensor)
print ("newtensor.dtype:",newtensor.dtype)  # torch.float64
# 转换成整形
newtensor = a.long()
print ("newtensor:",newtensor)
print ("newtensor.dtype:",newtensor.dtype)  # torch.int64
newtensor = a.int()
print ("newtensor:",newtensor)
print ("newtensor.dtype:",newtensor.dtype)  # torch.int32
newtensor = a.short()
print ("newtensor:",newtensor)
print ("newtensor.dtype:",newtensor.dtype)  # torch.int16
newtensor = a.byte()
print ("newtensor:",newtensor)
print ("newtensor.dtype:",newtensor.dtype)  # torch.uint8
newtensor = a.char()
print ("newtensor:",newtensor)
print ("newtensor.dtype:",newtensor.dtype)  # torch.int8

#%%3. Tensor 数据存放形式
# 3.1 查看gpu是否可用
print(torch.cuda.is_available())
# 查看GPU数量
print(torch.cuda.device_count())
# 查看gpu名称
print(torch.cuda.get_device_name(0))
# 查看当前GPU id
print(torch.cuda.current_device())

# 3.2 查看数据存放位置, 数据位置转换
a=torch.Tensor( [[2,3],[4,8],[7,9]] )
b = a.cuda(0)
c = b.cpu()
print(a)
print(b)
print(c)
print(a.device, type(a.device))  # cpu <class 'torch.device'>
print(b.device, type(a.device), str(b.device) == 'cuda:0') #cuda:0 <class 'torch.device'> True
print(c.device, type(c.device), str(c.device) == 'cpu') #cpu <class 'torch.device'> True

#%% 4 Tensor数据维度的研究
#4.1 查看数据维度
a=torch.Tensor( [[2,3],[4,8],[7,9]] )
print(a)
print(a.size())  # torch.Size([3, 2])
print(a.shape)  # torch.Size([3, 2])
print(len(a))  # 3
#4.2 数据维度变换
# 维度重定义
a = torch.arange(0,9)
b = a.view(3,3)
print(a)
print(b)
# 维度压缩及解压缩
a = torch.arange(0,9)
b = a.view(3,1,3)
c = b.squeeze()
print(a)
print(b.size())  # torch.Size([3, 1, 3])
print(c.size()) # torch.Size([3, 3])
a = torch.arange(0,9)
b = a.view(3,1,3)
c = b.unsqueeze(0)
print(b.size())  # torch.Size([3, 1, 3])
print(c.size()) # torch.Size([1, 3, 1, 3])
# 维度扩张
a = torch.Tensor([[1], [2], [3]])  
print(a.size())  # # torch.Size([3, 1])
b = a.expand(3, 4)
print(b)
print(b.size())  # torch.Size([3, 4])
'''
tensor([[1., 1., 1., 1.],
        [2., 2., 2., 2.],
        [3., 3., 3., 3.]])
'''
# Tensor 重复
a = torch.Tensor([1, 2, 3])
b = a.repeat(4, 2)
print(b)
print(b.size())  # torch.Size([4, 6])
'''
tensor([[1., 2., 3., 1., 2., 3.],
        [1., 2., 3., 1., 2., 3.],
        [1., 2., 3., 1., 2., 3.],
        [1., 2., 3., 1., 2., 3.]])
'''
# 矩阵Tensor专置
x = torch.randn(3, 5)
x.t()
torch.t(x)
# 高维度转置
a = torch.randn(2, 4, 3)
b = torch.transpose(a, 1, 2)
print(a.size())  # torch.Size([2, 4, 3])
print(b.size())  # torch.Size([2, 3, 4])
# 多维度换位
a = torch.randn(2, 4, 3)
b = a.permute(2, 0, 1)
print(a.size())  # torch.Size([2, 4, 3])
print(b.size())  # torch.Size([2, 3, 4])

#%% 5 Tensor数据类型
a = torch.ones(5)
print(a)
print(type(a))  # <class 'torch.Tensor'>
b = a.numpy()
print(type(b))  # <class 'numpy.ndarray'>
c = torch.from_numpy(b)
print(type(c))  # <class 'torch.Tensor'>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值