Классификация с несколькими выходами с помощью Keras

Я использую keras для построения модели классификации с несколькими выходами. Мой набор данных такой как

[x1,x2,x3,x4,y1,y2,y3]

x1, x2, x3 - это функции, а y1, y2, y3 - метки, y1, y2, y3 - это мультиклассы.

И я уже построил модель (я добавил несколько скрытых слоев):

def baseline_model(input_dim=23,output_dim=3):
    model_in = Input(shape=(input_dim,))
    model = Dense(input_dim*5,kernel_initializer='uniform',input_dim=input_dim)(model_in)
    model = Activation(activation='relu')(model)
    model = Dropout(0.5)(model)

    ...................

    model = Dense(output_dim,kernel_initializer='uniform')(model)
    model = Activation(activation='sigmoid')(model)

    model = Model(model_in,model)
    model.compile(optimizer='adam',loss='binary_crossentropy', metrics=['accuracy'])
    return model

А затем я пытаюсь использовать метод keras, чтобы он поддерживал классификацию:

estimator = KerasClassifier(build_fn=baseline_model)
estimator.fit()
estimator.predict(df[0:10])

Но я обнаружил, что результат не является многопоточным, выводится только одно измерение.

[0,0,0,0,0,0,0,0,0,0]

Итак, для задачи классификации с несколькими выходами мы не можем использовать функцию KerasClassifier, чтобы изучить ее?




Ответы (1)


Оборачивать модель в KerasClassifier не нужно. Эта оболочка предназначена для того, чтобы вы могли использовать модель Keras с Scikit-Learn. Тип модели (классификатор, регрессия, многоклассовый классификатор и т. Д.) В конечном итоге определяется формой и активацией последнего слоя вашей модели.

Вы можете просто использовать функцию model.fit (), которая является частью Keras. Убедитесь, что вы передаете данные в функцию. Дополнительную информацию о функции подгонки можно найти здесь: https://keras.io/models/model/#fit

Также ваша потеря настроена как binary_crossentropy. Для задачи с несколькими классами вы захотите использовать категориальную_кросцентропию.

model.compile(optimizer='adam',loss='categorical_crossentropy', metrics=['accuracy'])

Насколько я могу судить, эта модель на самом деле не то, что Керас называет мульти-выводом. С несколькими выходами вы пытаетесь получить результат из нескольких разных слоев и, возможно, применить к ним разные функции потерь.

Основываясь на настройке в вашем вопросе, вы могли бы использовать модель Keras Sequential вместо функциональной модели, если хотите. Керас рекомендует по возможности использовать последовательную модель, потому что она проще. https://keras.io/getting-started/sequential-model-guide/ < / а>

person Jeremy Bare    schedule 06.07.2018