前提・実現したいこと
現在Pytorchを使ったセグメンテーションを行っています。
https://hituji-ws.com/code/python/dl-seg2/
こちらのサイトを参考に作業を進め、学習の段階までたどり着いたのですが、そこで以下のようなエラーが発生しました。
発生している問題・エラーメッセージ
Epoch: 0 train: 100%|███| 10/10 [00:04<00:00, 2.38it/s, dice_loss - 0.2074, iou_score - 0.8564] valid: 0%| | 0/11 [00:00<?, ?it/s] Sizes of tensors must match except in dimension 2. Got 25 and 26 (The offending index is 0) Traceback (most recent call last): File "segment_training.py", line 218, in <module> if max_score < val_logs['iou_score']: NameError: name 'val_logs' is not defined
該当のソースコード
python
1valid_epoch = smp.utils.train.ValidEpoch( 2 model, 3 loss=loss, 4 metrics=metrics, 5 device=DEVICE, 6 verbose=True, 7) 8 9# 学習 40EPoch 25Epochで学習率を下げる 10max_score = 0 11for i in range(0, 40): 12 13 print('\nEpoch: {}'.format(i)) 14 try: 15 train_logs = train_epoch.run(train_loader) 16 val_logs = valid_epoch.run(valid_loader) 17 except Exception as e: 18 print(e) 19 20 # do something (save model, change lr, etc.) 21 if max_score < val_logs['iou_score']: 22 max_score = val_logs['iou_score'] 23 torch.save(model, f'{DECODER}_{ENCODER}.pth') 24 print('Model saved!')
試したこと
ネットで検索したところ、Pytorchでのモデル作成ではmodel.train()とmodel.eval()を使い分けて効率よく学習を行うらしいことは分かったのですが、train()で成功したものがなぜeval()では失敗するのかわかりませんでした。画像サイズは訓練用と検証用で同じサイズのものを使用しています。ご助力頂ければ助かります。
補足情報(FW/ツールのバージョンなど)
Windows 10
Python 3.7.6
torch 1.7.1
画像サイズは400×400です。
回答1件
あなたの回答
tips
プレビュー