SVM поверх автоэнкодера для классификации изображений: 100% точность данных о поездах и тестах - PullRequest
2 голосов
/ 22 апреля 2020

У меня есть маленький набор данных изображения с 4 классами. Поэтому я использовал авто-кодировщик для автоматического извлечения функций.

Эти функции передаются в классификатор машины опорных векторов для выполнения задачи классификации.

После обучения авто-кодировщика для 10 эпох и обучение модели SVM на извлеченных особенностях У меня есть эти матрицы путаницы: accuracy on the training data

accuracy on the test data

My Вызывает беспокойство тот факт, что модель не настолько универсальна, насколько это возможно, чтобы быть применимой к новым данным.

Мой вопрос: Есть ли способ узнать, если модель более подходит, кроме тестирования на некоторых других образцах?

РЕДАКТИРОВАТЬ: Это код для автоматического кодировщика:

encoder_input = Input(shape=(IMG_HEIGHT, IMG_WIDTH, 3), name='original_img')
x = Conv2D(filters=32, kernel_size=3, padding="same", input_shape=(IMG_HEIGHT, IMG_WIDTH, 3))(encoder_input)
x = MaxPooling2D((2, 2))(x)
x = Conv2D(filters=64, kernel_size=3, padding="same", activation='relu')(x)
encoder_output = MaxPooling2D((2, 2))(x)

encoder = Model(encoder_input, encoder_output, name='encoder')
encoder.summary()

decoder_input = Input(shape=(32, 35, 64,), name='encoded_img')
x = Conv2D(filters=64, kernel_size=3, padding="same", activation='relu')   (decoder_input)
x = UpSampling2D((2, 2))(x)
x = Conv2D(filters=32, kernel_size=3, padding="same", activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoder_output  = Conv2D(filters=3, kernel_size=3, padding='same',   activation='relu')(x)

decoder = Model(decoder_input, decoder_output, name='decoder')
decoder.summary()
autoencoder_input = Input(shape=(IMG_HEIGHT, IMG_WIDTH, 3), name='img')
encoded_img = encoder(autoencoder_input)
decoded_img = decoder(encoded_img)
Autoencoder = Model(autoencoder_input, decoded_img, name='autoencoder')
Autoencoder.summary()

total_train = 80
total_val = 40
Autoencoder.compile(optimizer='adam',
                loss=tf.keras.losses.MeanSquaredError())

history = Autoencoder.fit_generator(
train_data_gen,
steps_per_epoch=total_train // batch_size,
epochs=epochs,
validation_data=val_data_gen,
validation_steps=total_val // batch_size

)

Код для SVM и матриц путаницы:

samples, y = next(train_data_gen_svm)
samples_val, y_val = next(val_data_gen_svm)

#Get features
X = encoder.predict(samples)
X_val = encoder.predict(samples_val)

# Reshape for the SVM input
X_reshape = X.reshape(80,32*35*64)
X_val_reshape = X_val.reshape(40,32*35*64)

clf = SVC(kernel='poly', degree=3)

print('X shape:', X_reshape.shape)
print('y shape: ', X_val_reshape.shape)

clf.fit(X_reshape, y)

y_pred_val = clf.predict(X_val_reshape)
y_pred_train = clf.predict(X_reshape)

cnf_matrix_val = confusion_matrix(y_val, y_pred_val,normalize='true')
cnf_matrix_train = confusion_matrix(y,y_pred_train,normalize='true')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...