我已在链接中上传了我的代码,我不确定参数和大小。感谢您的帮助代码在这里
我发现了几个错误 - 首先你需要展平图像,你需要一个 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))