Матрица путаницы с нейронной сеткой свертки - PullRequest
0 голосов
/ 17 марта 2020

Я новичок в использовании нейронных сетей и машинного обучения. Я пытался получить результат от моей нейронной сети в виде матрицы путаницы. В настоящее время у меня возникли проблемы с тем, как сделать визуально более понятным и как это работает.

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, но я не могу найти способ заставить его работать вообще. введите описание изображения здесь

Пожалуйста, помогите !! Спасибо за ваше время

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