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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

Q&A

1回答

1718閲覧

Kerasの学習時のacc等の値について

kotetsu1004

総合スコア4

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

0グッド

0クリップ

投稿2018/04/03 05:02

前提・実現したいこと

Kerasを利用して画像認識やセマンティックセグメンテーションを実施しているのですが、学習時の検証データの精度の捉え方について確認させてください。

##①学習時に表れる周期性について
汎化性検証のためのテストデータは別に設けた上で、学習時は訓練データ:検証データ=8:2として以下のコードで学習を行なっております。

python

1 model.compile(optimizer=SGD(lr=0.0001, momentum=0.9), 2 loss='categorical_crossentropy', metrics=['accuracy'])

その際、学習の進捗のグラフが以下のように周期的なものとなるのですが、何か問題があるのでしょうか。
イメージ説明
イメージ説明
訓練データはShuffle=True、検証データはShuffle=Falseとしておりますので、各エポック終了時の検証では順番に全ての検証データの精度を確かめるものと考えており、過学習はしていなそうではありますが周期性が表れるのは何かおかしい気がします。
このModelAccuracyを見るに最大80%程度の精度が期待できますが、データをいくつかに分けて交差検証を行なっても実際には60-75%程度の精度しか出ません。
当然検証データよりは精度が低下するものだとは思っていますが、学習の度に大きく精度が上下するところも含め、正しく学習がなされているか疑問が残ります。

##②val_accの認識について(セマンティックセグメンテーションの固有の現象?)
以下のコードのように、2値(白黒)で塗り分けるようなセグメンテーション(segnetなど)を学習したく、数千枚のデータを集め学習処理をしております。

python

1model.compile(optimizer = Adam(lr = 1e-4), loss = 'binary_crossentropy', metrics = ['accuracy'])

学習中、val_accの値を見ると、以下は1Epoch完了時なのに高精度な結果が得られている事に違和感を感じ、テストデータ=学習時の検証データとしてval_accと同様の結果が得られるのか確認をしました。(汎化性検証のためのテストデータは別に設けるべきなことは理解しておりますが、学習が正しくなされているのかの確認のため)

loss: 0.6931 - acc: 0.8460 - val_loss: 0.6911 - val_acc: 0.8708

そうしましたところ、やはり全くもってこのような精度は得られませんでしたがこれは何故でしょうか。
1つの疑問として、私は1Epoch完了毎に全ての検証データの精度検証を行なってval_loss,val_accを出力している考えておりましたが、この認識がそもそも誤りなのでしょうか。
もしくは、この画像全体を0と塗るとacc=0.90となるくらい片方のラベルに寄っているのですが、そのせいでしょうか。
ただ、いずれにしても1Epoch目に限らず学習時のval_accとその後自分で精度評価した時の精度は、検証用データ=テストデータとして同一環境にしているにも関わらず、全く一致しません。
どなたか何故このようなことが起きるのかお分かりになる方いらっしゃいましたらご助言頂ければありがたいです。

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

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

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

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

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

guest

回答1

0

振動から何かがおかしいと感じるのはセンスがありますね。

https://stackoverflow.com/questions/42571445/what-i-am-doing-wrong-with-this-semantic-segmentation

このようなコメントがあります。

要約:初期値を上手いの使わないとうまく学習できない

何かの論文をすでに参考にしているのならその情報を追記してください。

今の質問文からは、拾ってきたコードを見よう見まねで実行しているだけなのか、先行研究を踏まえたものなのか、判断できません。

投稿2018/04/03 13:40

mkgrei

総合スコア8560

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

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

kotetsu1004

2018/04/13 04:17 編集

ご回答を頂いてからご返信が遅くなり申し訳ございません。 初期値についてですが、KerasのXceptionをモデルとしてImagenetのモデルからファインチューニングを行なっています。 https://keras.io/ja/applications/ 先行研究を踏まえたものではなく、exampleやgithub等を参照しながら作成した特別な工夫のない画像分類のコードで、ファインチューニングの重みの固定も層を適当に指定していますので、再度見直してみようと思います。 ご回答頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問