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

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

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

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

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

解決済

CNNのトレーニングデータの精度を良くしたい

semisemi
semisemi

総合スコア15

Keras

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

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

1回答

0リアクション

0クリップ

281閲覧

投稿2022/09/28 09:08

編集2022/09/29 05:22

CNNを用いた分類を行っているのですが、トレーニングデータよりもテストデータのほうが精度が高くトレーニングデータの学習の進み方があまりよくありません。
これは、学習回数の問題とトレーニングデータの数の問題なのでしょうか。
以下が結果のグラフになります。

イメージ説明
図1 accuracyの精度グラフ
イメージ説明
図2 lossの精度グラフ
イメージ説明
図3 ドロップアウト0のaccuracyの精度グラフ
イメージ説明
図4 ドロップアウト0のlossの精度グラフ
イメージ説明
図5 ドロップアウト0.25で250で学習率1/10, 375でさらに1/10のaccuracy
イメージ説明
図5 ドロップアウト0.25で250で学習率1/10, 375でさらに1/10のloss

実現したいこと

・トレーニングデータの精度を良くしたい

発生している問題・エラーメッセージ

トレーニングデータよりテストデータの方が精度が高く、トレーニングデータの学習の進みが遅い。

該当のソースコード(層の部分)

python

from tensorflow.python.keras.models import Sequential model = Sequential() from tensorflow.python.keras.layers import Conv2D model.add( #畳み込み Conv2D( filters=8, #出力 input_shape=(50,50,3), kernel_size=(3,3), #フィルタサイズ strides=(1,1), padding='valid', activation='relu' ) ) from tensorflow.python.keras.layers import MaxPooling2D from tensorflow.python.keras.layers import Dropout model.add(MaxPooling2D(pool_size=(2,2))) #マックスプーリング # #追加畳み込み model.add( Conv2D( filters =16, kernel_size = (3,3), strides = (1,1), padding = 'valid', activation = 'relu' )) model.add(MaxPooling2D(pool_size=(2,2))) #追加畳み込み model.add( Conv2D( filters = 32, kernel_size = (3,3), strides = (1,1), padding = 'valid', activation = 'relu' )) model.add(MaxPooling2D(pool_size=(2,2))) #追加畳み込み model.add( Conv2D( filters = 64, kernel_size = (3,3), strides = (1,1), padding = 'valid', activation = 'relu' )) model.add(MaxPooling2D(pool_size=(2,2))) from tensorflow.python.keras.layers import Flatten model.add(Flatten()) #2次元配列に from tensorflow.python.keras.layers import Dense model.add(Dense(units=192 ,activation='relu')) #全結合 model.add(Dropout(0.5)) model.add(Dense(units=3,activation='softmax',name="f3")) #全結合 # 追加の学習率減衰 def step_decay(epoch): x = 0.001 if epoch >= 250: x = 0.0001 if epoch >= 375: x = 0.00001 return x lr_decay = LearningRateScheduler(step_decay) model.compile( optimizer=Adam(), #自動で学習率が設定される loss='categorical_crossentropy', #多分類のときにしていできる交差エントロピー metrics=['accuracy'] ) #全結合 history_model = model.fit_generator( x_train_generator, epochs = 10, validation_data = val_test_generator, validation_steps = None, shuffle = True, callbacks=[lr_decay] )

データの詳細

トレーニングデータには三種類の画像が入っており、それぞれ7256, 8356, 4720合計すると20332程のデータ数があります。
対してテストデータには、それぞれ716,2089,550の計3335程のデータ数があります

補足情報(FW/ツールのバージョンなど)

windows10(64bit)
anacondaを使用
python 3.8.13
TensorFlow 2.3
Spyder 5.3.1を利用

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jbpb0

2022/09/28 10:04

Dropout(0.5)の数値を小さくしたら、どうなりますでしょうか?
semisemi

2022/09/28 10:11

質問ありがとうございます。 数値を小さくとは0.3程の数字で良いでしょうか。
jbpb0

2022/09/29 02:42 編集

どれくらいがいいのかは、やってみないと分からないです 0.1〜0.3くらいに適当に変えてみて、傾向としてどうなるのかを見て、望ましい方向に変われば、さらに数値を変えてみる あるいは、ドロップアウトを無くしたらどうなるか、を確認する val(test)があまり変わらずtrainが良くなればいいですが、逆にtrainがあまり変わらずval(test)が悪化することもあるので
meg_

2022/09/28 12:48

トレーニングデータとテストデータで四種類の画像の割合はほぼ同じですか?
jbpb0

2022/10/03 03:33

> トレーニングデータには三種類の画像が入っており、それぞれ7256, 8356, 4720合計すると20332程のデータ数があります。 対してテストデータには、それぞれ716,2089,550の計3335程のデータ数があります トレーニングデータの三種類の画像の数は近いですが、テストデータは二種類目の画像の数(2089)が他と比べて多いので、2089を半分の1000くらいに減らしてみたら、いかがでしょうか?

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Keras

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

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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