#python #tensorflow #machine-learning #keras
Вопрос:
модель cnn для классификации изображений
from keras.models import Sequential
from keras.layers import Dense,Activation,Flatten,Dropout
from keras.layers import Conv2D,MaxPooling2D
from keras.callbacks import ModelCheckpoint
model=Sequential()
model.add(Conv2D(200,(3,3),input_shape=data.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
#The first CNN layer followed by Relu and MaxPooling layers
model.add(Conv2D(100,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
#The second convolution layer followed by Relu and MaxPooling layers
model.add(Flatten())
model.add(Dropout(0.5))
#Flatten layer to stack the output convolutions from second convolution layer
model.add(Dense(50,activation='relu'))
#Dense layer of 64 neurons
model.add(Dense(2,activation='softmax'))
#The Final layer with two outputs for two categories
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
from sklearn.model_selection import train_test_split
train_data,test_data,train_target,test_target=train_test_split(data,target,test_size=0.1)
checkpoint = ModelCheckpoint('model-
{epoch:03d}.model',monitor='val_loss',verbose=0,save_best_only=True,mode='auto')
history=model.fit(train_data,train_target,epochs=4,callbacks=[checkpoint],validation_split=0.2)
from sklearn.metrics import classification_report
lb = LabelBinarizer()
print("[INFO] evaluating network...")
predIdxs = model.predict(test_data, batch_size=28)
# for each image in the testing set we need to find the index of the
# label with corresponding largest predicted probability
predIdxs = np.argmax(predIdxs, axis=1)
# show a nicely formatted classification report
print(classification_report(test_target.argmax(axis=1), predIdxs,
target_names=lb.classes_))
# compute the confusion matrix and and use it to derive the raw
# accuracy, sensitivity, and specificity
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(test_target.argmax(axis=1), predIdxs)
total = sum(sum(cm))
acc = (cm[0, 0] cm[1, 1]) / total
sensitivity = cm[0, 0] / (cm[0, 0] cm[0, 1])
specificity = cm[1, 1] / (cm[1, 0] cm[1, 1])
# show the confusion matrix, accuracy, sensitivity, and specificity
print(cm)
print("acc: {:.4f}".format(acc))
print("sensitivity: {:.4f}".format(sensitivity))
print("specificity: {:.4f}".format(specificity))
Мне нужно найти матрицу путаницы. мой код показывает, что объект ‘LabelBinarizer’ не имеет атрибута ‘classes_. я видел похожие проблемы, но решением было выполнить model.fit() перед labelbinarizer, но это не сработало
Комментарии:
1. Используйте
tf.math.confusion_matrix
для поиска вычислительной матрицы путаницы по прогнозам и меткам. Для бинарной классификации обратитесь к этому . Спасибо!