北京住房保障建设投资中心网站,seo系统oem,网站建设制作介绍河南,无锡网站建设价格一、创建张量1.张量基本创建方式torch.tensor 根据指定数据创建张量 #xff08;最重要#xff09;torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量1.1 torch.tensor# 方式一…一、创建张量1.张量基本创建方式torch.tensor 根据指定数据创建张量 最重要torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量1.1 torch.tensor
# 方式一创建张量 torch.tensor
def create_tensor():# 1.创建标量张量data1 torch.tensor(3)# print(data1.ndim) # 维度0# print(data1)# print(data1.shape)# print(data1.dtype)# 2.创建一维向量张量data2 torch.tensor([2, 3, 4]) # 几个数字shape就是几 torch.Size([3]) torch.int64# print(data2,data2.shape,data2.dtype)# print(data2.ndim) # 维度1# 3.创建二维向量张量data3 torch.tensor([[2, 3, 4], [6, 7, 8]]) # 2个样本每个样本三个特征 torch.Size([2, 3]) torch.int64# print(data3,data3.shape,data3.dtype)# print(data3.ndim) # 维度2
if __name__ __main__:create_tensor()1.2 torch.Tensor
# 方式二创建张量 torch.Tensor
def create_Tensor():# ctrlp:参数提示# 根据形状# datatorch.Tensor(2,3)# datatorch.tensor(2,3) #报错# datatorch.Tensor(3)# 根据数值data torch.Tensor([3, 4])# print(data)
if __name__ __main__:create_Tensor()
1.3 torch.IntTensor、torch.FloatTensor、torch.DoubleTensor
# 方式三创建张量 torch.IntTensor
def create_IntTensor():# 根据形状创建# datatorch.IntTensor(3,4)# 根据数值创建data torch.IntTensor([3, 4])# 尝试小数# datatorch.IntTensor([3.2,4.3]) #会省略小数点后# datatorch.FloatTensor([3.2,4.3]) #tensor([3.2000, 4.3000]) torch.float32# datatorch.DoubleTensor([3.2,4.3]) #tensor([3.2000, 4.3000], dtypetorch.float64) torch.float64print(data, data.dtype)
if __name__ __main__:create_IntTensor()2.创建线性和随机张量torch.arange 和 torch.linspace 创建线性张量torch.random.init_seed 和 torch.random.manual_seed 随机种子设置torch.randn 创建随机张量2.1 torch.arange 和 torch.linspace
arange(start,end,step) start默认0step默认1表示步长包左不包右 包含0不包含10linspace(start,end,steps) 包左且包右steps取多少个值# 创建线性张量
def create_arange_linspace_tensor():arange_datatorch.arange(0,10,1)print(arange_data,arange_data.dtype) #tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) torch.int64lin_datatorch.linspace(0,10,5)print(lin_data,lin_data.dtype) #tensor([ 0.0000, 2.5000, 5.0000, 7.5000, 10.0000]) torch.float32
if __name__ __main__:create_arange_linspace_tensor()2.2 torch.random.init_seed 和 torch.random.manual_seed
torch.initial_seed()torch.random.initial_seed() # 与上一行一样写法 torch.manual_seed(100) torch.random.manual_seed(100) # 与上一行一样写法# 创建随机张量
def create_random_tensor():# 创建两行三列的随机种子datatorch.randn(2,3)# 查看随机数种子# print(随机数种子:, torch.initial_seed()) #值一直在变# print(随机数种子:, torch.random.initial_seed()) # 与上一行一样写法# 手动随机数种子设置torch.manual_seed(100)# torch.random.manual_seed(100) # 与上一行一样写法data torch.randn(2, 3)print(data,data.dtype)
if __name__ __main__:create_random_tensor()3.创建0-1张量
torch.ones 和 torch.ones_like 创建全1张量torch.zeros 和 torch.zeros_like 创建全0张量 重要torch.full 和 torch.full_like 创建全为指定值张量这里的like是模仿数据的形状进行创建而不是模仿值def create_ones_zeros_full_tensor():# 1.1 创建指定形状全1张量# data torch.ones(2, 3)# print(data,data.shape,data.size()) # torch.Size([2, 3]) torch.Size([2, 3])pytorch中shape属性和size()方法是一样的# 1.2 根据张量形状创建全1张量# data torch.ones_like(data)# print(data)# 2.1 创建指定形状全0张量# datatorch.zeros(2,3)# print(data,data.dtype)# 2.2 根据张量形状创建全0张量# datatorch.zeros_like(data)# print(data,data.dtype)# 3.1 创建指定形状指定值的张量data torch.full([2, 3], 10)print(data) #tensor([[10, 10, 10],[10, 10, 10]])# 3.2 根据张量形状创建指定值的张量data torch.full_like(data, 20)print(data) #tensor([[20, 20, 20],[20, 20, 20]])if __name__ __main__:create_ones_zeros_full_tensor()二、张量的类型转换默认类型float32int641. 张量之间的类型转换data.type(torch.DoubleTensor)data.double() 重点
# 张量元素类型转换
def type_transform_tensor():datatorch.full([2, 3], 10)print(data,data.dtype) # torch.int64# 方式一# data1data.type(torch.DoubleTensor)# print(data1,data1.dtype) # torch.float64# 方式二data2data.double()print(data2,data2.dtype) #torch.float64
if __name__ __main__:type_transform_tensor()2. 张量与numpy之间的类型转换tensor转numpy 方式一通过numpy()转换为numpy影响data_tensor的值但可以通过data_numpydata_tensor.numpy().copy(),深拷贝解决 方式二通过np.array()转换为numpy不影响data_tensor的值默认不共享内存
import numpy as np
import torchdef tensor_to_numpy():# 1.tensor转numpydata_tensortorch.tensor([1,2,3,4,5])print(data_tensor) # tensor([1, 2, 3, 4, 5])# 方式一通过numpy()转换为numpy影响data_tensor的值但可以通过data_numpydata_tensor.numpy().copy(),深拷贝解决data_numpydata_tensor.numpy()print(data_numpy) # [1 2 3 4 5]# 修改numpy的值data_numpy[0]200print(data_numpy) #[200 2 3 4 5]print(data_tensor) #tensor([200, 2, 3, 4, 5])# 方式二通过np.array()转换为numpy不影响data_tensor的值# data_numpy np.array(data_tensor)# print(data_numpy--, data_numpy) # [1 2 3 4 5]# data_numpy[0] 200# print(data_numpy--, data_numpy) # [200 2 3 4 5]# print(data_tensor--, data_tensor) # tensor([1, 2, 3, 4, 5])numpy转tensor方式一torch.from_numpy 默认共享内存,使用 copy 函数避免共享,解决 data_tensor torch.from_numpy(data_numpy.copy()) 方式2torch.tensor 默认不共享内存
def numpy_to_tensor():# 2.numpy转tensor# 准备一个numpy数据data_numpynp.array([2,3,4])# print(data_numpy,data_numpy.dtype) # [2 3 4] int64# 方式一torch.from_numpy 默认共享内存,使用 copy 函数避免共享,解决 data_tensor torch.from_numpy(data_numpy.copy())# data_tensor torch.from_numpy(data_numpy)# # print(data_tensor,data_tensor.dtype) # tensor([2, 3, 4]) torch.int64# # 修改tensor的值发现会影响numpy# data_tensor[0]200# print(data_tensor,data_tensor.dtype) # tensor([200, 3, 4]) torch.int64# print(data_numpy,data_numpy.dtype) # [200 3 4] int64# 方式2torch.tensor 默认不共享内存 data_tensortorch.tensor(data_numpy)data_tensor[0]200print(data_tensor) # tensor([200, 3, 4])print(data_numpy) # [2 3 4]
if __name__ __main__:numpy_to_tensor()3.标量张量和数字转换重要data_tensor.item()
def scalar_tensor_to_number():# 标量转number# data_tensortorch.tensor(3)# 一维向量转numberdata_tensor torch.tensor([3]) # 一个数字 (1,)# 二维矩阵转number# data_tensor torch.tensor([[3]]) # 一行一列(1,1)print(data_tensor) # tensor(3) tensor([3]) tensor([[3]])data1data_tensor.item()print(data1) # 3
if __name__ __main__:scalar_tensor_to_number()