从我在网上看到的所有东西,FloatTensors
是Pythorch的默认值,当我创建一个张量来传递给我的生成器模块时,它是一个FloatTensor
,但当我试图在一个线性层中运行它时,它会抱怨它需要一个DoubleTensor
。在
class Generator(nn.Module):
def __init__(self):
super(Generator, self).__init__()
self.fully_connected = nn.Linear(100, 1024*4*4, bias=False)
def forward(self, zvec):
print(zvec.size())
fc = self.fully_connected(zvec)
return(fc.size())
gen = Generator();
gen(torch.from_numpy(np.random.normal(size=100)))
产生
^{pr2}$
Numpy返回一个64位浮点数,当调用
.from_numpy()
时,它被转换成DoubleTensor
。令人困惑的是,如果运行print(type(zvec))
,它将返回torch.Tensor
,不管它是不是浮点型还是双精度型。在这里的问题是,numpy输入使用
double
作为数据类型相同的数据类型也应用于结果张量。在另一方面,}。当通过层传送数据时,应用矩阵乘法,这种乘法要求两个矩阵具有相同的数据类型。在
self.fully_connected
层的weights
是{所以你有两个解决方案:
通过改变:
收件人:
^{pr2}$输入到
gen
的输入将被转换为float
。在转换输入的完整工作代码:
如果您需要双精度,还可以将
weights
转换为double
。在更改此行:
只是为了:
转换权重的完整工作代码:
因此,这两种方法都对您有效,但是如果您不需要}需要更多的计算能力。在
double
的额外精度,您应该使用float
,因为{相关问题 更多 >
编程相关推荐