質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1771閲覧

pytorch-unetの損失値はマイナスになりますか?

tiroha

総合スコア109

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/06 06:44

編集2021/10/07 04:55

train.pyを実行したときにloss値がマイナスとなります。
一部ですが、
0.9684 --- loss: -0.006312
Epoch finished ! Loss: -0.022088063708708985
これってありえないですよね?
epoch数が5(最後)にマイナスが多く出てきたので、過学習ですかね?
セットしたデータが同じ個体の真正面ばかりで過学習が起きたのか?

試したこと
・0,1以外の数値があると、マイナスになると聞いて、学習させたい物を1,背景が0に設定。

python

1 for epoch in range(epochs): 2 print('Starting epoch {}/{}.'.format(epoch + 1, epochs)) 3 net.train() 4 5 # reset the generators 6 train = get_imgs_and_masks(iddataset['train'], dir_img, dir_mask, img_scale) 7 val = get_imgs_and_masks(iddataset['val'], dir_img, dir_mask, img_scale) 8 9 epoch_loss = 0 10 11 for i, b in enumerate(batch(train, batch_size)): 12 imgs = np.array([i[0] for i in b]).astype(np.float32) 13 true_masks = np.array([i[1] for i in b]) 14 15 imgs = torch.from_numpy(imgs) 16 true_masks = torch.from_numpy(true_masks) 17 18 if gpu: 19 imgs = imgs.cuda() 20 true_masks = true_masks.cuda() 21 22 masks_pred = net(imgs) 23 masks_probs_flat = masks_pred.view(-1) 24 25 true_masks_flat = true_masks.view(-1) 26 27 loss = criterion(masks_probs_flat, true_masks_flat) 28 epoch_loss += loss.item() 29 30 print('{0:.4f} --- loss: {1:.6f}'.format(i * batch_size / N_train, loss.item())) 31 32 optimizer.zero_grad() 33 loss.backward() 34 optimizer.step() 35 36 print('Epoch finished ! Loss: {}'.format(epoch_loss / i))

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

mask画像がjpg形式だとセグメントしたとき、0,1以外も含まれるためマイナスになった。
ファイルの拡張子をpng,gif形式にすれば解決。
ただし、renameなどのコマンドでjpgからpngにしてもマイナスのままだった。
境界部分のベクトルが記録されたファイル(jsonファイルなど)からpngに変換しなければならない。
○.json→.png
☓.jpg→.png

投稿2021/10/08 06:44

編集2021/10/08 06:46
tiroha

総合スコア109

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

損失関数の定義によっては負になりうると思います.
コードのcriterionが何なのかによります.

投稿2021/10/07 10:02

dark-eater-kei

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問