不推荐使用与输入大小 (torch.Size([28, 28, 10])) 不同的目标大小 (torch.Size([28]))。错误

问题描述 投票:0回答:1

我已在链接中上传了我的代码,我不确定参数和大小。感谢您的帮助代码在这里

python deep-learning pytorch
1个回答
0
投票

我发现了几个错误 - 首先你需要展平图像,你需要一个 BCE 损失的热编码或者你应该使用交叉熵损失,并且你需要激活函数,例如 Sigmoid,请参阅下面的代码

mld = nn.Sequential(nn.Flatten(), nn.Linear(784,10), nn.Sigmoid())
loss_list=[]
epochs=100
loss_fn = nn.BCELoss()
optimizer = optim.SGD(mld.parameters(), lr=0.1)
mld.train()
for epoch in range(epochs):
  for X_train, y_train in train_loader:
    pred = mld(X_train.float())
    print(pred.shape)
    print(torch.nn.functional.one_hot(y_train).shape)
    loss = loss_fn(pred, torch.nn.functional.one_hot(y_train, num_classes=10).float())
    optimizer.zero_grad()
    loss.backward()
    print(loss.item())
    loss_list.append(loss.item())
    optimizer.step()

mld.eval()
with torch.no_grad():
    y_pred = mld(X_train)
accuracy = (y_pred.round() == y).float().mean()
print("Accuracy {:.2f}".format(accuracy * 100))
     
© www.soinside.com 2019 - 2024. All rights reserved.