🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2690閲覧

u-netでlossが下がらない原因について

Nyankoy

総合スコア15

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/12/12 01:59

編集2019/12/12 12:25

u-netを使用した2クラス分類の学習のlossが下がらない原因が分かりません。
現在のlossはこのようになっています。
イメージ説明
学習率を変えたりしましたが全く改善されません。入力のサイズはあっていると思いますので入力の値の形式に問題があるのかもしれないと現在考えています。
ネットワークはchainerを使用したu-netです。入力画画像(batchsize×1×W_img×H_img)に対してラベル画像(batchsize×1×W_label×H_label)を対応させて学習しています。(W_label≒W_img,H_label≒H_img)ラベル画像は01のマスク画像です。コードの詳細部分はところどころ****で略しています。
もし可能性として考えられるものがありましたら、教えていただきたいです。よろしくお願いいたします。

python

1 2def main(gpu, epoch, ites, bsize, trfolder, trlabel, modelname): 3 chainer.cuda.get_device(gpu).use() 4 net = UNET() 5 net.to_gpu() 6 opt = chainer.optimizers.Adam() 7 opt.setup(net) 8 stime = time.clock() 9 train = data.TrainData(trfolder, trlabel) 10 x_train = train.get_len() 11 train_batchnum = -(-x_train // bsize) 12 print('epoch time train/loss test/loss ') 13 for ep in range(1, 1+epoch): 14 train_loss_sum = cp.float32(0) 15 train.shuffle() 16 for b in range(ites): 17 x_batch, y_batch, r_batch = train.u_data(b, min(b + bsize, x_train)) 18 x, y = Variable(cuda.to_gpu(x_batch)), Variable(cuda.to_gpu(y_batch)) 19 r = Variable(cuda.to_gpu(r_batch)) 20 h = net(x) 21 loss = ***** 22 net.cleargrads() 23 loss.backward() 24 opt.update() 25 train_loss_sum += loss.data 26 print('{0:5} {1:7.1f} {2:.6f}'.format(ep, time.clock()-stime, float(train_loss_sum)/ites) 27 chainer.serializers.save_npz('{}_{}'.format(modelname, ep), net) 28

python

1import cv2 2import os 3import numpy as np 4import random 5import sys 6import math 7 8class TrainData: 9 def __init__(self, folder, labelfolder): 10 self.lst = [] 11 files = os.listdir(folder) 12 for i in range(len(files)): 13 img = cv2.imread(folder + files[i], 0).astype(np.float32) / 255.0 14 img = cv2.resize(img, (W_img, H_img), interpolation=cv2.INTER_NEAREST) 15 label = cv2.imread(labelfolder + files[i]) 16 label = cv2.resize(label, (W_label, H_label), interpolation=cv2.INTER_NEAREST) 17 labelb = np.zeros_like(label) 18 labelb[**********] = 1 19 label = labelb[:, :, 0] 20 self.lst.append((img, label, files[i])) 21 22 def shuffle(self): 23 np.random.shuffle(self.order) 24 25 def get_len(self): 26 return len(self.lst) 27 28 def u_data(self, _from, _to): 29 x = np.empty((batchsize, 1, W_img, H_img), dtype=np.float32) 30 y = np.empty((batchsize, 1 , W_label, H_label), dtype=np.float32) 31 for i in range(_from, _to): 32 img, label, fname = self.lst[self.order[i]] 33 height = img.shape[0] 34 width = img.shape[1] 35 center = (int(width/2), int(height/2)) 36 angle = ***** 37 scale = ***** 38 trans = cv2.getRotationMatrix2D(center, angle , scale) 39 img = cv2.warpAffine(img, trans, (W_img,H_img)) 40 label = cv2.warpAffine(label, trans, (W_label,H_label)) 41 x[i-_from, :, :, :] = img 42 y[i-_from, :, :, :] = label 43 ratio = np.maximum(np.float32(np.count_nonzero(label)), *****) / ((*****)*batchsize) 44 r = np.where(y > *****, *****, *****).astype(np.float32) 45 return x, y, r

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

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

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

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

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

guest

回答1

0

自己解決

for b in range(ites):
の部分を for b in range(0, len(test), bsize):
に変更し、ラベルの数値を見直しましたら無事にlossは収束いたしました

投稿2019/12/12 12:26

Nyankoy

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問