Я новичок в использовании нейронных сетей и машинного обучения. Я пытался получить результат от моей нейронной сети в виде матрицы путаницы. В настоящее время у меня возникли проблемы с тем, как сделать визуально более понятным и как это работает.
batch_size = 60
# Image Processing Stage
train_data = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
test_data = ImageDataGenerator(rescale=1./255)
training_set = train_data.flow_from_directory('dataset/train_data', target_size=(128, 128), batch_size=batch_size, class_mode='binary')
test_set = test_data.flow_from_directory('dataset/test_data', target_size=(128, 128), batch_size=batch_size, class_mode='binary')
# Starting Convolution Neural Network
start_cnn = Sequential()
start_cnn.add(Conv2D(64, (3, 3), input_shape=(128, 128, 3), activation='relu', kernel_regularizer=l2(0.0001), bias_regularizer=l2(0.0001))) # 3*3*3*32+32
start_cnn.add(Conv2D(64, (3, 3), activation='relu', kernel_regularizer=l2(0.0001), bias_regularizer=l2(0.0001)))
start_cnn.add(MaxPooling2D(pool_size=(2, 2)))
for i in range(0, 2):
start_cnn.add(Conv2D(32, (3, 3), activation='relu', kernel_regularizer=l2(0.0001), bias_regularizer=l2(0.0001)))
start_cnn.add(MaxPooling2D(pool_size=(2, 2)))
for i in range(0, 2):
start_cnn.add(Conv2D(32, (3, 3), activation='relu', kernel_regularizer=l2(0.0001), bias_regularizer=l2(0.0001)))
start_cnn.add(MaxPooling2D(pool_size=(2, 2)))
start_cnn.add(Dropout(0.25))
# Flattening
start_cnn.add(Flatten())
# Step 4 - Full connection
start_cnn.add(Dense(activation="relu", units=32, kernel_regularizer=l2(0.0001), bias_regularizer=l2(0.0001)))
start_cnn.add(Dropout(0.5))
start_cnn.add(Dense(activation="sigmoid", units=1, kernel_regularizer=l2(0.0001), bias_regularizer=l2(0.0001)))
start_cnn.summary()
start_cnn.load_weights("weights.best.hdf5")
# Compiling the CNN
start_cnn.compile(Adam(learning_rate=0.0001), loss='binary_crossentropy', metrics=['accuracy'])
history = start_cnn.fit(training_set, steps_per_epoch=85, epochs=1, validation_data=test_set, verbose=2, shuffle = False) # step per epoch is 5065/batch size callbacks=callbacks_list,
Это краткое описание структуры моего кода. Пожалуйста, если есть какие-либо комментарии или проблемы, пожалуйста, сообщите мне, я новичок и хотел бы узнать как можно больше.
Вот код матрицы путаницы, которую я сделал
y_pred = start_cnn.predict_generator(test_set, steps = np.ceil(test_set.samples / test_set.batch_size), verbose=0, workers=0)
y_pred = np.where(y_pred>0.5, 1, 0)
print('Confusion Matrix')
print(confusion_matrix(test_set.classes, y_pred))
print('Classification Report')
print(classification_report(test_set.classes, y_pred))
labels = ['melanoma', 'non-melanoma']
cm = confusion_matrix(test_set.classes, y_pred)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cm)
plt.title('Confusion matrix')
fig.colorbar(cax)
ax.set_xticklabels([''] + labels)
ax.set_yticklabels([''] + labels)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()
Как вы можете видеть на изображении здесь. Значение отображается только в двух полях слева, но не справа. Кроме того, я бы тоже хотел использовать plot_confusion_matrix, но я не могу найти способ заставить его работать вообще. введите описание изображения здесь
Пожалуйста, помогите !! Спасибо за ваше время