classNet(nn.Module):def__init__(self):super(Net, self).__init__()# 1 input image channel, 6 output channels, 3x3 square convolution# kernel self.conv1 = nn.Conv2d(1, 6, 3) self.conv2 = nn.Conv2d(6, 16, 3)# an affine operation: y = Wx + b self.fc1 = nn.Linear(16*6*6, 120)# 6*6 from image dimension self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10)defforward(self,x):# Max pooling over a (2, 2) window x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))# If the size is a square you can only specify a single number x = F.max_pool2d(F.relu(self.conv2(x)), 2) x = x.view(-1, self.num_flat_features(x)) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x)return xdefnum_flat_features(self,x): size = x.size()[1:] # all dimensions except the batch dimension num_features =1for s in size: num_features *= sreturn num_featuresnet =Net()print(net)
output =net(input)target = torch.randn(10)# a dummy target, for exampletarget = target.view(1, -1)# make it the same shape as outputcriterion = nn.MSELoss()loss =criterion(output, target)print(loss)