با سلام. مدل cnn ای دارم اموزش میدم که روی تصاویر اسپکتروگرام اموزش میبینه. به دقت ۹۴ رسیدم ولی val_loss خیلی بالاست و ۰.۴۷ هست. از adam و lr=0.001 و categorical_crossentropy با تعداد کلاس ۱۲۰۰ تا استفاده میکنم. Dataaugmentation هم استفاده میکنم.
بنظرتون اشکال از کجای کاره؟ بعد از لایه های conv یک لایه dense 4096 دارم که قبل و بعدش از dropout 0.5 استفاده کردم. ودر نهایت dense 1200 .
def create_model():
return tf.keras.Sequential(
[tf.keras.layers.Conv2D(16,(3,3),activation='relu',input_shape=(128,161,1),padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(16,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),
tf.keras.layers.Conv2D(32,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(32,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),
tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),
tf.keras.layers.Conv2D(128,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(128,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),
tf.keras.layers.Conv2D(256,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(256,(3,3),activation='relu',padding='same'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(4096,activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(1200,activation='softmax')])
with tf.device("/device:GPU:0"):
model=create_model()
model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.001),
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=['accuracy'])
my_callbacks=[
tf.keras.callbacks.ModelCheckpoint(filepath="/content/drive/My Drive/best.h5",verbose=1,save_best_only=True,monitor='val_accuracy')]
model.fit(trainAug.flow(x_train,y_train,batch_size=512),epochs=700,steps_per_epoch=len(x_train)//512,validation_data=(x_val,y_val),
validation_steps=len(x_val)//512,callbacks=my_callbacks)