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

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

新規登録して質問してみよう
ただいま回答率
85.35%
CNN (Convolutional Neural Network)

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

Q&A

解決済

1回答

4741閲覧

深層学習の学習曲線の見方について教えてください

tanukichi4010

総合スコア1

CNN (Convolutional Neural Network)

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

0グッド

0クリップ

投稿2020/10/04 13:54

編集2020/10/05 00:58

深層学習超初心者です。

深層学習によって画像認識を行い、結果について学習曲線を見て評価したいと考えています。

あるWEBサイトに載っているものを実際に動かしてみたのですが、精度を示すグラフが、学習データを用いた精度よりも検証データを用いた精度のほうが高くなってしまっているのですが、これは正しく学習できていないということなのでしょうか?
添付した画像のような学習曲線になっています。
(オレンジ:検証精度、青:学習精度)

精度を示す学習曲線

初歩的なことで申し訳ありませんがよろしくお願いいたします。

##追記
ソースコードは以下のWEBサイトを参考にしました。
https://qiita.com/tomo_20180402/items/e8c55bdca648f4877188
https://spjai.com/keras-fine-tuning/

python

1import os 2import numpy as np 3from keras.preprocessing.image import ImageDataGenerator 4from keras import models 5from keras import layers 6from keras import optimizers 7from keras.layers import Conv2D, MaxPooling2D,Input 8from keras.layers import Dense, Dropout, Flatten 9import matplotlib.pyplot as plt 10import keras 11 12IMAGE_SIZE = 224 13N_CATEGORIES = 20 14BATCH_SIZE = 64 15NUM_EPOCHS = 20 16 17train_data_dir = '' 18validation_data_dir = '' 19 20NUM_TRAINING = 80000 21NUM_VALIDATION = 12000 22 23 24model = models.Sequential() 25model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(224,224,3))) 26model.add(layers.MaxPooling2D((2,2))) 27model.add(layers.Conv2D(64,(3,3),activation="relu")) 28model.add(layers.MaxPooling2D((2,2))) 29model.add(layers.Conv2D(128,(3,3),activation="relu")) 30model.add(layers.MaxPooling2D((2,2))) 31model.add(layers.Conv2D(256,(3,3),activation="relu")) 32model.add(layers.MaxPooling2D((2,2))) 33 34 35model.add(layers.Flatten()) 36model.add(layers.Dense(128,activation="relu")) 37model.add(layers.Dropout(0.5)) 38model.add(layers.Dense(N_CATEGORIES,activation="softmax")) 39 40 41model.compile(loss='categorical_crossentropy', 42 optimizer=optimizers.SGD(lr=1e-4,momentum=0.9), 43 metrics=['acc']) 44model.summary() 45 46 47train_datagen = ImageDataGenerator( 48 rescale=1.0 / 255, 49 shear_range=0.2, 50 zoom_range=0.2, 51 horizontal_flip=True, 52 rotation_range=10) 53test_datagen = ImageDataGenerator( 54 rescale=1.0 / 255, 55) 56 57train_generator = train_datagen.flow_from_directory( 58 train_data_dir, 59 target_size=(IMAGE_SIZE, IMAGE_SIZE), 60 batch_size=BATCH_SIZE, 61 class_mode='categorical', 62 shuffle=True 63) 64validation_generator = test_datagen.flow_from_directory( 65 validation_data_dir, 66 target_size=(IMAGE_SIZE, IMAGE_SIZE), 67 batch_size=BATCH_SIZE, 68 class_mode='categorical', 69 shuffle=True 70) 71 72history = model.fit_generator(train_generator, 73 steps_per_epoch=NUM_TRAINING//BATCH_SIZE, 74 epochs=NUM_EPOCHS, 75 verbose=1, 76 validation_data=validation_generator, 77 validation_steps=NUM_VALIDATION//BATCH_SIZE, 78 ) 79 80 81model.save('model.h5') 82 83 84# グラフ描画 85# Accuracy 86plt.plot(range(1, NUM_EPOCHS+1), history.history['acc'], "o-") 87plt.plot(range(1, NUM_EPOCHS+1), history.history['val_acc'], "o-") 88plt.title('model accuracy') 89plt.ylabel('accuracy') # Y軸ラベル 90plt.xlabel('epoch') # X軸ラベル 91plt.legend(['train', 'test'], loc='upper left') 92plt.show() 93# loss 94plt.plot(range(1, NUM_EPOCHS+1), history.history['loss'], "o-") 95plt.plot(range(1, NUM_EPOCHS+1), history.history['val_loss'], "o-") 96plt.title('model loss') 97plt.ylabel('loss') # Y軸ラベル 98plt.xlabel('epoch') # X軸ラベル 99plt.legend(['train', 'test'], loc='upper right') 100plt.show() 101

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

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

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

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

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

guest

回答1

0

ベストアンサー

仰る通り、テストが高いのですがこのグラフだけでは何とも言えないかと思います。
出典元のWebサイトをご紹介頂く事は難しいでしょうか。
そちらのサイトを見れれば、どういうデータを使ったのか、
またサイトとこちらのグラフとの差から考察できるかと思います。

投稿2020/10/04 23:14

yasutakatou

総合スコア446

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

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

tanukichi4010

2020/10/05 00:59

追記を行いましたので確認のほどお願いいたします。 データは自身で収集した画像を使用しました。
yasutakatou

2020/10/05 04:53

ご対応ありがとうございました。データの詳細が分からないとなんともですが、 ・転移学習をしていない(学習量の少なさをカバーする) ・画像枚数は大幅な差が無い数十枚規模(特徴量の抽出差が少ない) だと過学習の可能性が高いと思われます。 私の回答が悪く大変申し訳ないですが、コードよりデータの影響が大きる出るカテゴリですので データ無しで出来る回答としてはこの程度となってしまいますが如何でしょうか。 (「どういうデータを使ったのか」は同じデータで学習した事を期待していました。)
tanukichi4010

2020/10/06 02:44

こちらこそ回答いただきありがとうございました。 諸事情によりデータについての詳細を申し上げることはできないのですが、ご指摘いただきました可能性を基に再度検討していこうと思います。 この度はありがとうございました。
yasutakatou

2020/10/06 04:11

分かりました。あまりお役に立たなかった回答ですみません。次の検証はうまくいくと良いですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問