the all codes are shown as below:
class MnistDataSet(Dataset):
def __init__(self,csv_file,transform,is_train):
self.csv_file = csv_file
self.samples = pd.read_csv(csv_file)
self.transform = transform
self.is_train = is_train
def __len__(self):
return self.samples.shape[0]
def __getitem__(self,idx):
if self.is_train:
label,sample = self.samples.iloc[idx,0],self.samples.iloc[idx,1:]
else:
sample = self.samples.iloc[idx]
sample = np.array(sample).reshape([28,28,1])
if transforms:
sample = self.transform(sample)
if self.is_train:
return label,sample
else:
return sample
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (1.0,))])
mnistTrainDataSet = MnistDataSet('train.csv',transform,True)
the first is: when running
mnist1, mnist2 = cross_validation.train_test_split(mnistTrainDataSet,test_size=0.25,random_state=20)
error occurred:
/usr/local/lib/python3.6/dist-packages/sklearn/cross_validation.py in train_test_split(*arrays, **options)
2070 train, test = next(iter(cv))
2071 return list(chain.from_iterable((safe_indexing(a, train),
-> 2072 safe_indexing(a, test)) for a in arrays))
2073
2074
/usr/local/lib/python3.6/dist-packages/sklearn/cross_validation.py in <genexpr>(.0)
2070 train, test = next(iter(cv))
2071 return list(chain.from_iterable((safe_indexing(a, train),
-> 2072 safe_indexing(a, test)) for a in arrays))
2073
2074
/usr/local/lib/python3.6/dist-packages/sklearn/utils/__init__.py in safe_indexing(X, indices)
162 return X[indices]
163 else:
--> 164 return [X[idx] for idx in indices]
165
166
/usr/local/lib/python3.6/dist-packages/sklearn/utils/__init__.py in <listcomp>(.0)
162 return X[indices]
163 else:
--> 164 return [X[idx] for idx in indices]
165
166
<ipython-input-9-eaa3e4e1dde7> in __getitem__(self, idx)
14 sample = np.array(sample).reshape([28,28,1])
15 if transforms:
---> 16 sample = self.transform(sample)
17 if self.is_train:
18 return label,sample
/usr/local/lib/python3.6/dist-packages/torchvision/transforms/transforms.py in __call__(self, img)
47 def __call__(self, img):
48 for t in self.transforms:
---> 49 img = t(img)
50 return img
51
/usr/local/lib/python3.6/dist-packages/torchvision/transforms/transforms.py in __call__(self, tensor)
141 Tensor: Normalized Tensor image.
142 """
--> 143 return F.normalize(tensor, self.mean, self.std)
144
145 def __repr__(self):
/usr/local/lib/python3.6/dist-packages/torchvision/transforms/functional.py in normalize(tensor, mean, std)
166 # TODO: make efficient
167 for t, m, s in zip(tensor, mean, std):
--> 168 t.sub_(m).div_(s)
169 return tensor
170
TypeError: sub_ received an invalid combination of arguments - got (float), but expected one of:
* (int value)
didn't match because some of the arguments have invalid types: (!float!)
* (torch.LongTensor other)
didn't match because some of the arguments have invalid types: (!float!)
* (int value, torch.LongTensor other)
but this didn’t happen in my local os.
I fixed the error above by removing transforms.Normalize((0.5,), (1.0,)
,
train_loader = DataLoader(mnist1,100)
test_loader = DataLoader(mnist2,100)
class MnistNet(nn.Module):
def __init__(self):
super(MnistNet, self).__init__()
self.conv1 = nn.Conv2d(1,10,5)
self.pool1 = nn.MaxPool2d(2)
self.conv2 = nn.Conv2d(10,20,5)
self.pool2 = nn.MaxPool2d(2)
self.fc1 = nn.Linear(320,50)
self.fc2 = nn.Linear(50,10)
self.softmax = nn.Softmax()
def forward(self,input):
x = self.pool1(self.conv1(input))
x = self.pool2(self.conv2(x))
x = F.relu(self.fc1(x.view(x.size(0),-1)))
x = (self.fc2(x))
return self.softmax(x)
epoch = 1
mnistnet = MnistNet()
when I run:
optimizer = torch.optim.SGD(mnistnet.parameters(),lr=0.01)
loss_fn = torch.nn.CrossEntropyLoss()
for i in range(epoch):
for j, sample in enumerate(train_loader):
targets, inputs = sample
targets, inputs = Variable(targets), Variable(inputs)
outs = mnistnet(inputs)
optimizer.zero_grad()
loss = loss_fn(outs,targets)
loss.backward()
optimizer.step()
if j%200 == 0:
outs = mnistnet(inputs)
_,pred = torch.max(outs,1)
trues = torch.sum(pred.data == targets.data)
print('%d,loss:%s,rate:%.4f' % (j,loss_fn(outs,targets).data[0],
(trues/inputs.size(0))
)
)
the error occurred:
RuntimeError Traceback (most recent call last)
<ipython-input-25-72ba16ff08c8> in <module>()
5 targets, inputs = sample
6 targets, inputs = Variable(targets), Variable(inputs)
----> 7 outs = mnistnet(inputs)
8 optimizer.zero_grad()
9 loss = loss_fn(outs,targets)
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
323 for hook in self._forward_pre_hooks.values():
324 hook(self, input)
--> 325 result = self.forward(*input, **kwargs)
326 for hook in self._forward_hooks.values():
327 hook_result = hook(self, input, result)
<ipython-input-23-9f0a75882410> in forward(self, input)
10 self.softmax = nn.Softmax()
11 def forward(self,input):
---> 12 x = self.pool1(self.conv1(input))
13 x = self.pool2(self.conv2(x))
14 x = F.relu(self.fc1(x.view(x.size(0),-1)))
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
323 for hook in self._forward_pre_hooks.values():
324 hook(self, input)
--> 325 result = self.forward(*input, **kwargs)
326 for hook in self._forward_hooks.values():
327 hook_result = hook(self, input, result)
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py in forward(self, input)
275 def forward(self, input):
276 return F.conv2d(input, self.weight, self.bias, self.stride,
--> 277 self.padding, self.dilation, self.groups)
278
279
/usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in conv2d(input, weight, bias, stride, padding, dilation, groups)
88 _pair(0), groups, torch.backends.cudnn.benchmark,
89 torch.backends.cudnn.deterministic, torch.backends.cudnn.enabled)
---> 90 return f(input, weight, bias)
91
92
RuntimeError: conv2d_forward is not implemented for type torch.LongTensor
And this also didn’t happen on my own os(Windows10, py36,pytorch 0.3)