У меня есть модель Keras, которая принимает преобразованный вектор x в качестве входных данных и выводит вероятности того, что каждое входное значение равно 1.
Я бы хотел взять прогнозы из этой модели и найти оптимальный порог. То есть, возможно, значение отсечения для «это значение равно 1» должно быть 0,23, или, возможно, оно должно быть 0,78, или что-то еще. Я знаю, что перекрестная проверка - хороший инструмент для этого.
Мой вопрос: как это отработать на тренировке? Например, скажем, у меня есть следующая модель (взято из здесь ):
def create_baseline():
# create model
model = Sequential()
model.add(Dense(60, input_dim=60, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
Я обучаю модель и получаю некоторые выходные вероятности:
model.fit(train_x, train_y)
predictions = model.predict(train_y)
Теперь я хочу узнать пороговое значение для каждой записи в predictions
, которое, например, дало бы наилучшую точность. Как я могу узнать этот параметр вместо того, чтобы просто выбрать его после завершения обучения?
РЕДАКТИРОВАТЬ: Например, скажем, у меня есть это:
def fake_model(self):
#Model that returns probability that each of 10 values is 1
a_input = Input(shape=(2, 10), name='a_input')
dense_1 = Dense(5)(a_input)
outputs = Dense(10, activation='sigmoid')(dense_1)
def hamming_loss(y_true, y_pred):
return tf.to_float(tf.reduce_sum(abs(y_true - y_pred))) /tf.to_float(tf.size(y_pred))
fakemodel = Model(a_input, outputs)
#Use the outputs of the model; find the threshold value that minimizes the Hamming loss
#Record the final confusion matrix.
Как я могу тренировать такую модель, как эта?