Hello everybody. I am confused about a question. I’ve classed a small CONV net like this:
import torch as t import torch.nn as nn ts1=t.tensor([[0.0,0.0,0.0,1.0],[0.0,0.0,1.0,0.0],[0.0,1.0,0.0,0.0],[1.0,0.0,0.0,0.0]]).view(1,1,4,4) class Net(nn.Module): def __init__(self): super(Net,self).__init__() self.c1=nn.Conv2d(1,1,kernel_size=(3,3)) def forward(self,x): x=self.c1(x) return (x) mynet=Net() print(mynet.forward(ts1))
and it can print this answer:
tensor([[[[-0.1707, -0.4558], [-0.4558, 0.1861]]]], grad_fn=<ThnnConv2DBackward>)
but if I put this net into GPU like this:
if t.cuda.is_available(): mynet.cuda() ts1.cuda() print(mynet.forward(ts1))
it does not work and shows:
Traceback (most recent call last): File "F:/learning/new.py", line 14, in <module> print(mynet.forward(ts1)) File "F:/learning/new.py", line 9, in forward x=self.c1(x) File "C:\ProgramData\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 477, in __call__ result = self.forward(*input, **kwargs) File "C:\ProgramData\Anaconda3\lib\site-packages\torch\nn\modules\conv.py", line 301, in forward self.padding, self.dilation, self.groups) RuntimeError: Expected object of type torch.FloatTensor but found type torch.cuda.FloatTensor for argument #2 'weight'
I don’t understand. Why does self.c1 expectes object of type torch.FloatTensor after I put it into my GPU?