Как передать эпоху и размер пакета при использовании Label Powerset в keras

У меня проблема с несколькими метками, и после некоторых исследований я смог использовать набор мощности Label в сочетании с алгоритмами машинного обучения. Теперь я хочу использовать набор мощности Label с нейронной сетью, и в соответствии с официальным веб-сайтом я могу использовать набор мощности Label . Но я не могу понять, как изменить существующий код, чтобы использовать Label Powerset.

Я хочу знать, как мы можем передать epoch или batch_size или любой другой параметр, переданный в функции соответствия модели.

Поскольку у меня проблема с несколькими метками, я использовал MultiLabelBinarizer для sklearn, поэтому каждая моя целевая строка выглядит так [1,0,0,1,0,0,0,0,0,0,0,0].

и, наконец, если бы кто-нибудь мог объяснить мне, что такое KERAS_PARAMS и Keras () в строке ниже:

def create_model_multiclass(input_dim, output_dim):
    # create model
    model = Sequential()
    model.add(Dense(8, input_dim=input_dim, activation='relu'))
    model.add(Dense(output_dim, activation='softmax'))
    # Compile model
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model
clf = LabelPowerset(classifier=Keras(create_model_multiclass, True, KERAS_PARAMS), require_dense=[True,True])
clf.fit(X_train,y_train)
y_pred = clf.predict(X_test)

Ниже мой существующий код нейронной сети

cnn_model = Sequential()
cnn_model.add(Dropout(0.5))
cnn_model.add(Conv1D(25,7,activation='relu'))
cnn_model.add(MaxPool1D(2))
cnn_model.add(Dropout(0.2))
cnn_model.add(Conv1D(25,7,activation='relu'))
cnn_model.add(MaxPool1D(2))
cnn_model.add(Flatten())
cnn_model.add(Dense(25,activation='relu'))
cnn_model.add(Dense(12,activation='softmax'))
cnn_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
history = cnn_model.fit(X_train, y_train, validation_data=(X_test,y_test), batch_size=32, epochs=180,verbose=1)
plot_history(history)
predictions = cnn_model.predict(X_test)

Я хочу, чтобы моя выходная строка выглядела только так [1,0,0,1,0,0,0,0,0,0,0,0], поскольку позже я буду использовать свой MultiLabelBinarizer для обратного преобразования этого.


person Shubham Trivedi    schedule 25.06.2019    source источник


Ответы (1)


KERAS_PARAMS - это параметры оболочки Keras scikit. Документация к нему довольно скудная.

В основном это параметры, которые вы бы передали, например, keras.fit.

KERAS_PARAMS = dict(epochs=10, batch_size=100, verbose=0)

Читая документы, мне кажется, что LabelPowerset преобразует проблему с несколькими метками в проблему с несколькими классами, создавая перестановки классов. Вы можете просто использовать собственное решение Keras для решения проблемы с несколькими метками, а не использовать оболочку.

Следующий учебник кажется разумным: https://medium.com/@vijayabhaskar96/multi-label-image-classification-tutorial-with-keras-imagedatagenerator-cd541f8eaf24

Ключевые отличия заключаются в том, что ваш выходной слой должен иметь активацию sigmoid, а не softmax, и потери должны быть binary_crossentrophy, а не категориальными.

person Pedro Marques    schedule 25.06.2019
comment
Дело в том, что LabelPowerset объединяет все разные классы, и эти комбинации становятся одним классом, создавая проблему от Multi-Label до Multi-Class, поэтому не было бы значительным использовать softmax для решения проблемы с несколькими классами с потерями как categoryorical_crossentropy ? - person Shubham Trivedi; 25.06.2019
comment
Предположим, у вас есть три класса A, B, C. И конечная цель состоит в том, чтобы иметь возможность иметь классификацию с несколькими метками, при которой вы получаете вероятность наличия этих классов. Этого можно достичь с помощью Keras напрямую, используя «сигмовидную» активацию / потерю двоичной_кросцентрофии. Или вы можете заставить LabelPowerset создавать искусственные классы с каждой перестановкой набора, например. Пусто, A, B, C, AB, AC, BC, ABC и используйте мультиклассовую модель Keras (softmax / categoryorical_crossentrophy). Мне кажется, что первый подход предпочтительнее. - person Pedro Marques; 25.06.2019
comment
На случай, если кому-то интересно, что такое Керас (). Это оболочка MEKA, и если вы не знаете, как ее использовать, просто используйте эту строку `` из skmultilearn.ext import Keras '' - person Shubham Trivedi; 25.06.2019