【发布时间】:2021-11-24 13:20:55
【问题描述】:
我需要用 3600 张训练图像和 900 张测试图像对樱桃、草莓和番茄进行分类。但是,我的模型表现不佳且过拟合。我尝试了 weight_decay 以避免过度拟合,但模型给出了形状不合适的错误。我的训练准确率为 85%,测试准确率为 60%。
这大概是我的训练数据,它们都在 300x300 像素左右
转换:
train_transform = transforms.Compose([
transforms.RandomRotation(10),
transforms.RandomHorizontalFlip(),
transforms.Resize(224),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406],
[0.229, 0.224, 0.225])
])
test_transform = transforms.Compose([
transforms.Resize(224),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406],
[0.229, 0.224, 0.225])
])
型号:
Batch_size = 100
epoch = 8
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(CNNmodel.parameters(), lr=0.001)
class ConvolutionalNetwork(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(3, 6, 3, 1)
self.conv2 = nn.Conv2d(6, 16, 3, 1)
self.fc1 = nn.Linear(54*54*16, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 3)
def forward(self, X):
X = F.relu(self.conv1(X))
X = F.max_pool2d(X, 2, 2) #kernel size 2, stride 2, padding tbc
X = F.relu(self.conv2(X))
X = F.max_pool2d(X, 2, 2)
X = X.view(-1, 54*54*16)
X = F.relu(self.fc1(X))
X = F.relu(self.fc2(X))
X = self.fc3(X)
return F.log_softmax(X, dim=1)
【问题讨论】:
-
对不起,只是我计算的准确率有误。更新后的准确率是 85% 的训练集和 60% 的测试集。
-
只是好奇你在这次训练中使用了哪个损失函数?
-
我使用:criteria = nn.CrossEntropyLoss() 和优化器 = torch.optim.Adam(CNNmodel.parameters(), lr=0.001)
-
你应该使用提前停止。
标签: pytorch conv-neural-network