Deep Learningの学習データについて
状況
現在,機械工学部の研究室でディープラーニングを用いた研究をしています.
その研究の中で,CNNを用いて分類問題に取り組んでいます.
疑問
学習データについて疑問があります.
学習データは
(1)ラベル順に並べる
(2)ラベル順に関係なくランダムに並べる
どちらが良いのでしょうか?
できれば理由も知りたいです.
例)
ラベルがa, b, c, dだった時,
train_label = [a, a, a, a, a, b, b, b, b, b, c, c, c, c, c, d, d, d, d, d]
となるように学習データを整理するべきなのか,それとも
train_label = [a, d, b, c, a, b, ...]
とランダムなデータを使うべきなのかどうか.
自分で試したこと
使ったモデル
def build_model():
inputs = tf.keras.layers.Input((501,3))
x = tf.keras.layers.Conv1D(16,64,1,kernel_initializer = 'he_normal')(inputs) #畳み込み層(64*1)*16
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.ReLU()(x)
#x = tf.keras.layers.MaxPooling1D(pool_size=2, strides=2, padding='valid')(x)
x = tf.keras.layers.Conv1D(16,32,1,kernel_initializer = 'he_normal')(x)
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.ReLU()(x)
#x = tf.keras.layers.MaxPooling1D(pool_size=2, strides=None, padding='valid')(x)
x = tf.keras.layers.Conv1D(16,16,1,kernel_initializer = 'he_normal')(x)
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.ReLU()(x)
#x = tf.keras.layers.MaxPooling1D(pool_size=2, strides=None, padding='valid')(x)
x = tf.keras.layers.Conv1D(16,8,1,kernel_initializer = 'he_normal')(x)
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.ReLU()(x)
#x = tf.keras.layers.MaxPooling1D(pool_size=2, strides=None, padding='valid')(x)
x = tf.keras.layers.Conv1D(16,4,1,kernel_initializer = 'he_normal')(x)
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.ReLU()(x)
#x = tf.keras.layers.MaxPooling1D(pool_size=2, strides=None, padding='valid')(x)
x = tf.keras.layers.Flatten()(x)
x = tf.keras.layers.Dense(num_class)(x)
x = tf.keras.activations.softmax(x)
return tf.keras.models.Model(inputs, x)
model = build_model()
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
history = model.fit(train_dataset, train_label,epochs=100,verbose=1,batch_size=32)
実際に自分は両方試してみて,結果は
(1)正答率:約97%
(2)正答率:約20%
でした.
手元には(467, 3)のデータが一クラス当たり21あります.
総クラス数は19で,かなり少ないと思います.
したがって,(2)の並べ方が正しいのかなと個人的に思っています.