I want to train Cars-196 dataset in Pytorch
import torchvision.transforms as transforms
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
batch_size=4
# Load the Cars-196 train and test dataset
"""https://pytorch.org/vision/main/generated/torchvision.datasets.StanfordCars.html"""
trainset = torchvision.datasets.StanfordCars(root='./data', split='train',
download=True, transform=transform)
trainloader = DataLoader(trainset, batch_size=batch_size,
shuffle=True, num_workers=4)
testset = torchvision.datasets.StanfordCars(root='./data', split='test',
download=True, transform=transform)
testloader = DataLoader(testset, batch_size=batch_size,
shuffle=False, num_workers=4)
I just put ResNet-50 in class and there is no modification.
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
resnet = models.resnet50(pretrained=True)
self.features=nn.Sequential(*list(resnet.children()))
def forward(self, x):
x=self.features(x)
return x
model=Model()
model=model.to(device)
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)
for epoch in range(10): # Iterate data
model.train()
train_loss = 0.0
for i, data in tqdm(enumerate(trainloader), total=len(trainloader)):
image, labels= data
image = image.to(device)
labels = labels.to(device)
# Make Gradient parameter 0...
optimizer.zero_grad()
# propagation + backpropagation + optimisation...
outputs = model(image)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
# outputs statistics
train_loss += loss.item()
train_loss = train_loss / len(trainset)
print('Finished Training')
But, RuntimeError: mat1 and mat2 shapes cannot be multiplied (8192x1 and 2048x1000) has been occurred.
What is the difference between training resnet-50 without class and training it using Sequential()? and how can I resolve this problem?