Keras - Точность прогноза тренировочных данных хуже? - PullRequest
0 голосов
/ 13 июня 2019

Я обучил свою модель и получил файл .hdf5.(точность обучения и проверки составляет около 0,9)

Ниже приведена моя кривая точности.

кривая обучения

Из-за дисбаланса моих данных яиспользовала SMOTE для пересчета моих данных, а затем разбила их на данные обучения и проверки.

 sm = SMOTE(random_state=42)

X_resampled, y_resampled = sm.fit_resample(X, Y)

X_resampled = X_resampled.reshape(X_resampled.shape[0],128,128,3)

X_tr, X_tst, y_tr, y_tst = train_test_split(X_resampled, y_resampled, test_size=0.33,random_state=22)

И ниже приведена структура моей модели.

image_input = Input(shape=(img_size, img_size, 3))

conv_1 = Conv2D(64, (5, 5), padding='same',
                input_shape=(img_size, img_size, 3), activation='relu')(image_input)
drop_2 = Dropout(0.4)(conv_1)
conv_3 = Conv2D(64, (3, 3), padding='same', activation='relu')(drop_2)
drop_4 = Dropout(0.4)(conv_3)
max_5 = MaxPooling2D(pool_size=(2, 2))(drop_4)

conv_6 = Conv2D(32, (5, 5), padding='same', activation='relu')(max_5)
drop_7 = Dropout(0.4)(conv_6)
conv_8 = Conv2D(32, (3, 3), padding='same', activation='relu')(drop_7)
drop_9 = Dropout(0.4)(conv_8)
max_10= MaxPooling2D(pool_size=(2, 2))(drop_9)

conv_11 = Conv2D(32, (5, 5), padding='same', activation='relu')(max_10)
drop_12 = Dropout(0.4)(conv_11)
conv_13 = Conv2D(32, (3, 3), padding='same', activation='relu')(drop_12)
drop_14 = Dropout(0.4)(conv_13)
max_15= MaxPooling2D(pool_size=(2, 2))(drop_14)

flat_16 = Flatten()(max_15)

den_17= Dense(8,activation='relu')(flat_16)

output = Dense(nb_classes, activation='softmax')(den_17)

img_size = 128         
nb_classes = 6          
batch_size = 256
nb_epoch=1000
savedModelName = 'M.hdf5'   
lr = 0.00001 

После того, как я закончил обучение своей модели, я сохранилэто (по ModelCheckpoint save_best_only в соответствии с точностью проверки).

А потом я использовал его, чтобы предсказать "те же самые" данные (то же самое random_state).

 sm = SMOTE(random_state=42)

X_resampled, y_resampled = sm.fit_resample(X, Y)

X_resampled = X_resampled.reshape(X_resampled.shape[0], 128, 128, 3)

X_tr, X_tst, y_tr, y_tst = train_test_split(X_resampled, y_resampled, test_size=0.33,random_state=22)

Но !!Я получаю точность прогноза около 0,3.

Почему?

Разве это не должно быть 0,9?

1 Ответ

0 голосов
/ 13 июня 2019

Не могли бы вы предоставить код вашей модели. И что произойдет, если вы прогнозируете первый набор тестов с вашей моделью? Не могли бы вы предоставить матрицу путаницы или значения точности / отзыва?

Мое первое предположение было бы, что ваша модель, возможно, переоснащается или на самом деле не учится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...