ImageDataGeneratorで拡張しても学習が全く進行しない?
解決したいこと
現在pythonでCNNについて学習している者です。keras.preprocessing.imageのImageDataGeneratorを用いてデータ拡張を試みておりますが、学習が全く進行していません。原因や解決方法を教えていただけると幸いです。
なお、Augmentorを用いることも検討しておりますが、学習したい画像がnpy形式で持っていて、このarray型のままモデルに入力させたいので、やはりImageDataGeneratorを使うことにこだわりたいです。
発生している問題・エラー
出ているエラーメッセージを入力
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
# X_train : 画像に関するarray型。(2100, 1, 28, 28)
# y_train : 画像のラベル。One-Hotベクトルであり、(2100, 15)
# kerasのversionは2.2.4
import numpy as np
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator
pic_num = 2100
pic_num_augmented = 42000
X_train_augmented = np.empty((pic_num, 1, 28, 28))
y_train_augmented = np.empty((pic_num, 15))
X_train_augmented[:pic_num_augmented] = X_train
y_train_augmented[:pic_num_augmented] = y_train
datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.2,
zoom_range=0.1,
fill_mode='constant',
cval=1)
X_train = X_train.transpose(0, 2, 3, 1)
datagen.fit(X_train)
gen = datagen.flow(X_train, y_train, batch_size=pic_num)
count = pic_num
while count < pic_num_augmented:
data, label = next(gen)
data = data.transpose(0, 3, 1, 2)
X_train_augmented[count : count + batch_size] = data
y_train_augmented[count : count + batch_size] = label
count += batch_size
自分で試したこと
これで作成したX_train_augmented、y_train_augmentedで学習したときの損失と正答率のグラフは下のようになります。
全く学習が進行していない様子です。拡張前のデータで学習するとすぐに学習損失が減少していたので、モデル自体に問題はなさそうです。また、上記のコードで作成した拡張後の画像を観察いたしました。ラベルの貼り間違えも、同じ画像の出力も見られませんでした。元の画像はばらつきを持って移動・回転しているようでした。また拡張したデータに偏りもないようです。
0