arisama_1212
@arisama_1212

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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で学習したときの損失と正答率のグラフは下のようになります。
download.png

全く学習が進行していない様子です。拡張前のデータで学習するとすぐに学習損失が減少していたので、モデル自体に問題はなさそうです。また、上記のコードで作成した拡張後の画像を観察いたしました。ラベルの貼り間違えも、同じ画像の出力も見られませんでした。元の画像はばらつきを持って移動・回転しているようでした。また拡張したデータに偏りもないようです。

0

No Answers yet.

Your answer might help someone💌