Pytorch 为什么经过10个阶段的训练,我的准确度没有提高?
我已经用PyTorch编程了一个图像分类器。 当我用几个参数训练网络时,它要么随机地取得进展并学习,要么不学习任何东西。我运行了几次代码,对于相同的参数,我得到了不同的结果Pytorch 为什么经过10个阶段的训练,我的准确度没有提高?,pytorch,cnn,Pytorch,Cnn,我已经用PyTorch编程了一个图像分类器。 当我用几个参数训练网络时,它要么随机地取得进展并学习,要么不学习任何东西。我运行了几次代码,对于相同的参数,我得到了不同的结果 class Network(nn.Module): def __init__(self): super(Network, self).__init__() self.conv1 = nn.Conv2d(3, 6, kernel_size=5) self.conv2 = nn.Conv2d(6,
class Network(nn.Module):
def __init__(self):
super(Network, self).__init__()
self.conv1 = nn.Conv2d(3, 6, kernel_size=5)
self.conv2 = nn.Conv2d(6, 12, kernel_size=5,)
self.conv3 = nn.Conv2d(12, 24, kernel_size=3 )
self.conv4 = nn.Conv2d(24, 24, kernel_size=3 )
self.fc1 = nn.Linear(864, 300)
self.fc2 = nn.Linear(300,2)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.max_pool2d(x,2)
x = F.relu(self.conv2(x))
x = F.max_pool2d(x,2)
x = F.relu(self.conv3(x))
x = F.max_pool2d(x,2)
x = F.relu(self.conv4(x))
x = F.max_pool2d(x,2)
x = F.max_pool2d(x,2)
#print(x.shape)
x = x.reshape(-1, 864)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
device= torch.device("cuda" if torch.cuda.is_available() else "cpu")
data = CatDogs('train/',transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(256),
transforms.ToTensor(),
transforms.Normalize(
mean = [0.485,0.456,0.406],
std= [0.229,0.224,0.225])
]))
train_set, test_set = torch.utils.data.random_split(data, [20000, 5000])
params = OrderedDict(
batch_size = [10,20,30,40,50,60,70,80,90,100,110,120]
,lr = [.005]
,shuffle = [True]
,pin_memory = [True]
,num_workers = [2]
)
m = RunManager()
for run in RunBuilder.get_runs(params):
network = Network()
network = network.to(device)
loader = DataLoader(train_set,
pin_memory=run.pin_memory,
batch_size=run.batch_size,
shuffle=run.shuffle,
num_workers=run.num_workers)
optimizer = optim.Adam(network.parameters(), lr=run.lr)
network.train()
m.begin_run(run, network, loader)
for epoch in range(10):
m.begin_epoch()
for batch in loader: # Get Batch
images, labels = batch
images = images.to(device)
labels = labels.to(device)
preds = network(images) # Pass Batch
loss = F.cross_entropy(preds, labels) # Calculate Loss
optimizer.zero_grad()
loss.backward() # Calculate Gradients
optimizer.step() # Update Weights
m.track_loss(loss, images)
m.track_num_correct(preds, labels)
m.end_epoch()
m.end_run()
m.save('results_batchsize_3')
我的输出示例:
班级跑步管理器正在跟踪一些统计数据,如损失、准确度和时间,但它不会干预训练
结果,网络返回正结果,损失减少,而有时损失几乎保持不变
如果你有任何建议是什么原因造成的,请告诉我。
非常感谢你的帮助 你试过降低学习率吗?这可能是由于多种原因造成的,但高学习率是其中之一。感谢您的回复,我将以较低的学习率进行尝试。谢谢,现在效果更好。您是否尝试过较低的学习率?发生这种情况的原因有很多,但学习率高就是其中之一。谢谢你的回复,我会以较低的学习率来尝试。谢谢,现在效果更好了。