ohf*_*ufu 6 pytorch dataloader
有几个场景让我对改组数据加载器感到困惑,如下所示。
我在 train_loader 和 valid_loader 上都将“shuffle”参数设置为 False。那么我得到的结果如下
Epoch 1/4 loss=0.8802 val_loss=0.8202 train_acc=0.63 val_acc=0.63
Epoch 2/4 loss=0.6993 val_loss=0.6500 train_acc=0.66 val_acc=0.72
Epoch 3/4 loss=0.5363 val_loss=0.5385 train_acc=0.76 val_acc=0.80
Epoch 4/4 loss=0.4055 val_loss=0.5130 train_acc=0.85 val_acc=0.81
Run Code Online (Sandbox Code Playgroud)
我将 train_loader 上的“shuffle”参数设置为 True,并将 False 设置为 valid_loader。那么我得到的结果如下
Epoch 1/4 loss=0.8928 val_loss=0.8284 train_acc=0.63 val_acc=0.63
Epoch 2/4 loss=0.7308 val_loss=0.6263 train_acc=0.61 val_acc=0.73
Epoch 3/4 loss=0.5594 val_loss=0.5046 train_acc=0.54 val_acc=0.81
Epoch 4/4 loss=0.4304 val_loss=0.4525 train_acc=0.49 val_acc=0.82
Run Code Online (Sandbox Code Playgroud)
基于该结果,当我对 train_loader 进行 shuffle 时,我的训练准确度的性能更差。
这是我的代码片段。
Epoch 1/4 loss=0.8802 val_loss=0.8202 train_acc=0.63 val_acc=0.63
Epoch 2/4 loss=0.6993 val_loss=0.6500 train_acc=0.66 val_acc=0.72
Epoch 3/4 loss=0.5363 val_loss=0.5385 train_acc=0.76 val_acc=0.80
Epoch 4/4 loss=0.4055 val_loss=0.5130 train_acc=0.85 val_acc=0.81
Run Code Online (Sandbox Code Playgroud)
我在计算训练准确度时出错了吗?提前致谢
您正在将打乱的预测与未打乱的标签进行比较。要解决这个问题,请计算每次迭代中准确预测的数量,并在最后计算总体准确性。
for epoch in range(n_epochs):
model.train()
avg_loss = 0.
total_correct = 0
total_samples = 0
for i, (x_batch, y_batch) in enumerate(train_loader):
y_pred = model(x_batch)
loss = loss_fn(y_pred, y_batch)
optimizer.zero_grad()
loss.backward()
optimizer.step()
avg_loss += loss.item() / len(train_loader)
total_correct += (torch.argmax(y_pred, 1) == y_batch).sum()
total_samples += y_batch.shape[0]
train_accuracy = total_correct / total_samples
Run Code Online (Sandbox Code Playgroud)
(我没有测试过这段代码)
归档时间: |
|
查看次数: |
228 次 |
最近记录: |