深層学習超初心者です。
深層学習によって画像認識を行い、結果について学習曲線を見て評価したいと考えています。
ある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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/05 00:59
2020/10/05 04:53
2020/10/06 02:44
2020/10/06 04:11