如何创建固定形状与数据类型的PyTorch高维张量?
解决PyTorch创建指定形状张量的问题
首先明确:torch.tensor()是基于输入数据的结构生成张量,不是直接指定形状的函数。你传入(1, 345)这个二元组,它会生成包含两个元素的一维张量,所以形状是[2],这是符合函数逻辑的行为。
下面是正确创建形状为torch.Size([1, 345])张量的几种方法:
1. 创建初始化的指定形状张量
如果需要创建全0、全1或随机值的张量,用torch.zeros()、torch.ones()、torch.randn()这类初始化函数,它们支持直接传入形状参数:
import torch # 创建全0的[1,345] int64张量 pt1 = torch.zeros((1, 345), dtype=torch.int64) # 创建全1的[1,345] int64张量 pt2 = torch.ones((1, 345), dtype=torch.int64) # 创建随机正态分布转换后的[1,345] int64张量 pt3 = torch.randn((1, 345)).to(torch.int64)
2. 将现有数据转换为指定形状
如果你有长度为345的一维数据,想把它变成[1, 345]的二维张量,可以用reshape()或unsqueeze()方法调整维度:
# 假设你有345个元素的数据源 data = list(range(345)) # 先创建一维张量,再reshape为目标形状 pt1 = torch.tensor(data, dtype=torch.int64).reshape(1, 345) # 或者用unsqueeze在第0维新增一个维度 pt2 = torch.tensor(data, dtype=torch.int64).unsqueeze(0)
纠正你之前的错误写法
torch.tensor(1, 345, dtype=torch.int64):报错是因为torch.tensor()仅接受一个位置参数(数据),你传入了两个位置参数1和345,不符合函数参数定义。torch.tensor((1, 345), dtype=torch.int64):和最初写法逻辑一致,输入是二元组,生成形状[2]的一维张量,并非目标二维形状。torch.tensor(shape=(1, 345), dtype=torch.int64):torch.tensor()没有shape这个参数,该参数仅适用于torch.zeros()这类初始化函数。
内容的提问来源于stack exchange,提问作者4daJKong
相关产品推荐
相关产品推荐

