

僕は今自然言語処理の勉強をしていて、本を参考にしながらコードを書いていました。

最後の予測が本のデータだとテストデータにもラベルがついているため以下のコードで正答率が出力されますが、自分が使用しているデータはテストデータにはTEXTしかないのでこのコードのままだとエラーが出てしまいます。

いろいろコードを改変してみたりしましたがうまく動きませんでした。どのようにしたら予測した値を出力することができますか？

**エラーメッセージ**

[code]

    Attribute Error : Example has no attribute Label.
    
[/code]

**現状のコード**

[code]

    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    
    net_trained.eval()   # モデルを検証モードに
    net_trained.to(device)
    
    epoch_corrects = 0  # epochの正解数
    
    for batch in (test_dl):  # testデータのDataLoader
        # batchはTextとLableの辞書オブジェクト
    
        # GPUが使えるならGPUにデータを送る
        inputs = batch.Text[0].to(device)  # 文章
        labels = batch.Label.to(device)  # ラベル
    
        # 順伝搬（forward）計算
        with torch.set_grad_enabled(False):
    
            # mask作成
            input_pad = 1  # 単語のIDにおいて、'<pad>': 1 なので
            input_mask = (inputs != input_pad)
    
            # Transformerに入力
            outputs, _, _ = net_trained(inputs, input_mask)
            _, preds = torch.max(outputs, 1)  # ラベルを予測
    
            # 結果の計算
            # 正解数の合計を更新
            epoch_corrects += torch.sum(preds == labels.data)
    
    # 正解率
    epoch_acc = epoch_corrects.double() / len(test_dl.dataset)
    
    print('テストデータ{}個での正解率：{:.4f}'.format(len(test_dl.dataset),epoch_acc))
    
[/code]


CC BY-SA 4.0
2020-08-18T02:16:15.327
69644
2022-08-09T03:43:03.970
2022-08-09T03:43:03.970
3060
36370
question
python 自然言語処理 pytorch
Pytorch での予測ラベル出力時にエラー Attribute Error : Example has no attribute Label


  * 機械学習で実現しようとしているタスクは文書分類で
  * 機械学習モデルは学習済み
  * testのデータセットには正解のラベルがない

そして、やりたいことは機械学習の分類結果だけ見る

ということなので、

下記で、ラベルをデータセットから読み取るのをやめる

>
[code]

>     labels = batch.Label.to(device)  # ラベル
>  
[/code]

下記で、正解率を出すことをやめる

[code]

            # 結果の計算
            # 正解数の合計を更新
            epoch_corrects += torch.sum(preds == labels.data)
    
    # 正解率
    epoch_acc = epoch_corrects.double() / len(test_dl.dataset)
    
[/code]

のが正しい対応だと思いました。  
学習が終わっていれば正解データは不要で、また未知のデータであるので正解率も出すことができません。機械学習モデルが十分に汎化されていればtestのデータセットでもきちんと分類できているはずです。


CC BY-SA 4.0
2020-08-18T05:58:32.780
69649
2020-08-18T10:13:58.387
2020-08-18T10:13:58.387
4715
4715
69644
answer