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

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

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

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

Q&A

解決済

3回答

1362閲覧

どんなにエポックを繰り返しても学習精度が0.5ほどになってしまう

taiyo2017

総合スコア170

Python

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

0グッド

1クリップ

投稿2018/11/26 09:22

編集2018/11/27 04:07

CNNでディープラーニングをしています。
どんなにエポックを繰り返しても学習精度が0.5ほどになってしまいます。どう言う原因が考えられますか?
データ数は1万件もあり、過学習の可能性はないです。

コードは以下のように書きました。

# coding: utf-8 import tensorflow as tf import tflearn from tflearn.layers.core import input_data,dropout,fully_connected from tflearn.layers.conv import conv_2d, max_pool_2d from tflearn.layers.normalization import local_response_normalization from tflearn.layers.estimator import regression tf.reset_default_graph() net = input_data(shape=[None, 4, 42]) net = conv_2d(net, 4, 16, activation='relu') net = max_pool_2d(net, 1) net = tflearn.activations.relu(net) net = dropout(net, 0.5) net = tflearn.fully_connected(net, 2, activation='softmax') net = tflearn.regression(net, optimizer='adam', learning_rate=0.5, loss='categorical_crossentropy') model = tflearn.DNN(net) model.fit(np.array(trainDataSet), np.array(trainLabel), n_epoch=400, batch_size=32, validation_set=0.1, show_metric=True) pred = np.array(model.predict(np.array(testDataSet)).argmax(axis=1)) label = np.array(testLabel).argmax(axis=0) accuracy = np.mean(pred == label, axis=0) print(accuracy)

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

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

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

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

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

guest

回答3

0

ベストアンサー

ポイントとしてはLossが飽和していてAccがそれに対応していれば過学習です
Accが0.5で落ち着くというのは相当難しいTrainかGANの場合以外大抵は過学習です

投稿2018/11/27 02:48

hamiru

総合スコア29

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

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

taiyo2017

2018/11/27 03:27

ありがとうございます。過学習かと思い、dropout層を増やしてみたところ、lossは下がりましたが、accは依然として0.5から変わりませんでした。この状態は、一体どう言う現象なのでしょうか?
hamiru

2018/11/27 03:43

TrainDataからValDataを拾ってませんか? Codeを見ないとわからないですね。
hamiru

2018/11/27 03:44

でもLossがさがってもAccが下がらないのはやはり過学習の典型です
taiyo2017

2018/11/27 04:08

多分拾っていないと思います。コードを質問文に貼り付けました。
taiyo2017

2018/11/27 04:08

もしご存知ならよろしくお願いいたします。なるほど、そうなのですね。。。
hamiru

2018/11/27 11:17 編集

もしこのcodeがどこからかの引用でそこそこaccがでているのなら見当違いの回答になってしまいますが、個人的な見解を。 ValDataを入れるときはDropoutの値を1にしないとaccが下がってしまいますけど、その点は問題ないですよね? しかし最初はDropout入れていなかったということなのでその他で考えられることといえば、Convが少ないような気がします。あと二つくらい追加したらいかがでしょうか?Convが少ない状態でLeaning rate0.5だと極値に落ちてもどってこられないのではないかとおもいます。Convを増やさないのであれば文献値の5e-4とかがいいのでは
taiyo2017

2018/11/29 08:31

ありがとうございます。conv層はどこに追加した方がいいとかありますか?
guest

0

minibatchの作り方として順番に取り出す方法が良く提案されていますが、
やはりClipしてランダムに都度作成するのがTrainDataを有効に使える方法だと思います。
Imageの場合はKerasのImageDataGeneratorが特に有効です。
私自身Tensorflowを使ってますがTrainDataの水増しには上記を使っています。

投稿2018/11/27 03:15

hamiru

総合スコア29

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

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

0

やはり過学習でしょう
BNしてますか?Dropoutは?WeightDecayは?
TrainDataのClipはしてますか?

投稿2018/11/27 01:55

hamiru

総合スコア29

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

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

taiyo2017

2018/11/27 02:18

ありがとうございます。BNとは何でしょうか?
taiyo2017

2018/11/27 02:19

また、TrainDataのClipとは何でしょうか?
hamiru

2018/11/27 02:45

なんのデータを使ってるか不明ですがImageの場合は引き延ばしたりひずませたりした後に部分的に取り込むのがClipでBNはバッチノーマリゼーションです。BNする場合はDropoutする必要がないといいわれていますが、併用する人がおおいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問