- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
从我在网上看到的所有内容来看,FloatTensors
是 Pytorch 的默认值,当我创建一个张量传递给我的生成器模块时,它是一个 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)))
产生
RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'mat2'
最佳答案
这里的问题是您的 numpy 输入使用 double
作为数据类型,相同的数据类型也应用于生成的张量。
另一方面,self.fully_connected
层的权重
是float
。当通过层馈送数据时,应用矩阵乘法,这种乘法要求两个矩阵具有相同的数据类型。
所以你有两个解决方案:
通过改变:
gen(torch.from_numpy(np.random.normal(size=100)))
致:
gen(torch.from_numpy(np.random.normal(size=100)).float())
输入到 gen
的输入将被转换为 float
。
转换输入的完整工作代码:
from torch import nn
import torch
import numpy as np
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)).float()) # converting network input to float
如果您需要 double ,您还可以将权重
转换为double
。
更改此行:
self.fully_connected = nn.Linear(100, 1024*4*4, bias=False)
只是为了:
self.fully_connected = nn.Linear(100, 1024*4*4, bias=False).double()
转换权重的完整工作代码:
from torch import nn
import torch
import numpy as np
class Generator(nn.Module):
def __init__(self):
super(Generator, self).__init__()
self.fully_connected = nn.Linear(100, 1024*4*4, bias=False).double() # converting layer weights to double()
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)))
所以这两种方式都适合你,但如果你不需要 double
的额外精度,你应该使用 float
as double
需要更多的计算能力。
关于python - 为什么 Pytorch 需要 DoubleTensor 而不是 FloatTensor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53055101/
我有 2 个 numpy 数组,我将它们转换为张量以使用 TensorDataset 对象。 import torch.utils.data as data_utils X = np.zeros((1
从我在网上看到的所有内容来看,FloatTensors 是 Pytorch 的默认值,当我创建一个张量传递给我的生成器模块时,它是一个 FloatTensor,但是当我尝试通过一个线性层运行它,它提示
我的输入张量是 torch.DoubleTensor 类型。但我得到了下面的 RuntimeError: RuntimeError: Expected object of type torch.Dou
我一直在尝试重新训练模型,但不幸的是,最近 2 天我不断遇到同样的错误。 你能帮忙解决一下这个问题吗? 初步工作: %matplotlib inline %config InlineBackend.f
我是一名优秀的程序员,十分优秀!