如何解决Pytorch cifar数据集:RuntimeError:大小不匹配,m1:[4 x 2048],m2:[1568 x 10]
我正在建立自己的具有2个基本层的网络,并在CIFAR10数据集上进行培训。我收到不匹配错误。
import torch
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import Dataset,DataLoader
import torch.nn as nn
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
num_epochs = 5
num_classes = 10
batch_size = 4
learning_rate = 0.001
print("---------Train Dataset----------")
train_dataset = torchvision.datasets.CIFAR10(root='../data/',train=True,transform=transforms.ToTensor(),download=True)
print("---------Train Loader----------")
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)
class ConvNet(nn.Module):
def __init__(self,num_classes=10):
super(ConvNet,self).__init__()
# First Layer
self.layer1 = nn.Sequential(
nn.Conv2d(3,16,kernel_size=3,stride=1,padding=1),nn.BatchNorm2d(16),nn.ReLU(),nn.MaxPool2d(kernel_size=2,stride=2))
# Second Layer
self.layer2 = nn.Sequential(
nn.Conv2d(16,32,nn.BatchNorm2d(32),stride=2))
# Fully connected Layer
self.fc = nn.Linear(7 * 7 * 32,num_classes)
def forward(self,x):
out = self.layer1(x)
out = self.layer2(out)
out = out.reshape(out.size(0),-1)
out = self.fc(out)
return out
model = ConvNet(num_classes).to(device)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(),lr=learning_rate)
print("--------Train Model----------")
total_step = len(train_loader)
print("Total Step",total_step)
for epoch in range(num_epochs):
for i,(images,labels) in enumerate(train_loader):
images = images.to(device)
labels = labels.to(device)
print("-----Forward Pass-------")
outputs = model(images)
loss = criterion(outputs,labels)
print ("----Backward Pass-------")
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i+1) % 100 == 0:
print(epoch+1,num_epochs,i+1,total_step,loss.item())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。