【问题标题】:compute accuracy of Band RNNBand RNN 的计算精度
【发布时间】:2021-02-05 14:52:58
【问题描述】:

所以我想弄清楚如何计算 BandRNN 的准确度。

BandRnn 是对角RNN 模型,每个神经元的连接数不同。例如: 这里 C 是每个神经元的连接数。

我目前的模型训练如下:

model = ModelLSTM(m, k).to(device)

model.train()

opt = torch.optim.Adam(model.parameters(), lr=args.lr)

best_test = 1e7
best_validation = 1e7

for ep in range(1, args.epochs + 1):

init_time = datetime.now()
processed = 0
step = 1

for batch_idx, (batch_x, batch_y, len_batch) in enumerate(train_loader):
    batch_x, batch_y, len_batch = batch_x.to(device), batch_y.to(device), len_batch.to(device)

    opt.zero_grad()

    logits = model(batch_x)
   
    loss = model.loss(logits, batch_y, len_batch)

    acc = sum(logits == batch_y) * 1.0 / len(logits)
    print(acc)

    loss.backward()

    if args.clip > 0:
        nn.utils.clip_grad_norm_(model.parameters(), args.clip)

    opt.step()

    processed += len(batch_x)
    step += 1
    print("   batch_idx {}\tLoss: {:.2f} ".format(batch_idx, loss))

print("Epoch {}, LR {:.5f} \tLoss: {:.2f} ".format(ep, opt.param_groups[0]['lr'], loss))

而我的模型测试如下:

model.eval()
with torch.no_grad():

for batch_x, batch_y, len_batch in test_loader:
    batch_x, batch_y, len_batch = batch_x.to(device), batch_y.to(device), len_batch.to(device)
    logits = model(batch_x)
    loss_test = model.loss(logits, batch_y, len_batch)
    
    acc = sum(logits == batch_y) * 1.0 / len(logits)
    

for batch_x, batch_y, len_batch in val_loader:
    batch_x, batch_y, len_batch = batch_x.to(device), batch_y.to(device), len_batch.to(device)
    logits = model(batch_x)
    loss_val = model.loss(logits, batch_y, len_batch)

if loss_val < best_validation:
    best_validation = loss_val.item()
    best_test = loss_test.item()

print()
print("Val:  Loss: {:.2f}\tBest: {:.2f}".format(loss_val, best_validation))
print("Test: Loss: {:.2f}\tBest: {:.2f}".format(loss_test, best_test))
print()

model.train()

我正在努力思考一种计算该模型准确性的方法,我希望收到一些关于如何计算这种方法的建议。 谢谢。

【问题讨论】:

  • 我不清楚问题是什么。您当前的代码是否没有正确计算准确性,或者您是否正在寻找其他指标的建议来衡量模型性能?一般来说,您如何计算准确度或任何其他指标不应取决于模型的内部架构,而应仅取决于其输出和您的基本事实标签。
  • 嗨,我目前不知道如何计算准确度,如果你能给我一个例子来说明如何做到这一点,那就太好了。
  • 我相信您代码中的这一行已经在尝试计算准确性:acc = sum(logits == batch_y) * 1.0 / len(logits)。尽管您可能希望在与标签进行比较之前对 logits 进行 argmax。
  • 谢谢!如果您能发布一个完整解决方案的答案,那就太好了,这样我就可以给您赏金了。

标签: machine-learning pytorch recurrent-neural-network


【解决方案1】:

我相信您代码中的这一行已经在尝试计算准确性:

acc = sum(logits == batch_y) * 1.0 / len(logits)

虽然您可能希望在与标签比较之前对 logits 进行 argmax:

preds = logits.argmax(dim=-1)
acc = sum(preds == batch_y) * 1.0 / len(logits)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2015-12-08
    • 2013-10-02
    • 2021-07-27
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多