Keras / Tensorflow: оптимизировать обучение для лучшей чувствительности и специфичности? - PullRequest
0 голосов
/ 04 июня 2018

В настоящее время я учусь так:

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          shuffle='batch',
          validation_data=(x_test, y_test),
          callbacks=callbacks)

Эти метрики выводятся каждую эпоху, поэтому я знаю, насколько хорошо они работают:

from sklearn.metrics import confusion_matrix

predictions = model.predict(x_test)
y_test = np.argmax(y_test, axis=-1)
predictions = np.argmax(predictions, axis=-1)
c = confusion_matrix(y_test, predictions)
print('Confusion matrix:\n', c)
print('sensitivity', c[0, 0] / (c[0, 1] + c[0, 0]))
print('specificity', c[1, 1] / (c[1, 1] + c[1, 0]))

В зависимости от моей архитектуры,Я получаю лучшие результаты в эпоху 93 или 155;тогда становится хуже.Ясно, что мои metrics не правы.

Как я могу узнать из результатов чувствительности и специфичности в каждую эпоху?

1 Ответ

0 голосов
/ 04 июня 2018

Чтобы учиться на результатах чувствительности и специфичности, вы можете написать пользовательскую функцию потерь, в которой потери рассчитываются в зависимости от результатов вашей матрицы путаницы.В качестве альтернативы, вы можете попробовать параметр class_weight в keras model.fit () и присвоить классам разные весовые коэффициенты в зависимости от того, какие из них вашей модели труднее усвоить.

...