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?