私の入力テンソルはtorch.DoubleTensor型です。しかし、私は以下のRuntimeErrorを取得しました:
RuntimeError: Expected object of type torch.DoubleTensor but found type torch.FloatTensor for argument #2 'weight'
ウェイトのタイプを明示的に指定しませんでした(つまり、自分でウェイトを初期化しませんでした。ウェイトはpytorchによって作成されます)。フォワードプロセスでウェイトのタイプに影響を与えるものは何ですか?
どうもありがとう!!
weights
およびbiases
のデフォルトのタイプはtorch.FloatTensor
です。そのため、モデルをtorch.DoubleTensor
にキャストするか、入力をtorch.FloatTensor
にキャストする必要があります。入力をキャストするには
X = X.float()
または、モデル全体をDoubleTensor
にキャストします
model = model.double()
を使用して、すべてのテンソルのデフォルトのタイプを設定することもできます
pytorch.set_default_tensor_type('torch.DoubleTensor')
モデルのfloat
への変換よりも、入力をdouble
に変換することをお勧めします。GPUではdouble
データ型の数学計算がかなり遅いためです。
私もまったく同じエラーを受け取っていました。根本的な原因は、データロードコードの次のステートメントであることが判明しました。
t = t.astype(np.float)
ここで、np.floatはDoubleTensorにマップされる64ビットのfloatに変換されます。これを変更して、
t = t.astype(np.float32)
問題を解決しました。