Как передать эпоху и размер партии при использовании ярлыка powerset в керасе - PullRequest
0 голосов
/ 25 июня 2019

У меня проблема с несколькими метками, и благодаря некоторым исследованиям я смог использовать Powerset Label в сочетании с алгоритмами ML. Теперь я хочу использовать Label powerset с нейронной сетью, и согласно официальному сайту я могу использовать Label powerset. Но я не могу понять, как изменить существующий код, чтобы использовать 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 для обратного преобразования это.

1 Ответ

1 голос
/ 25 июня 2019

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, а не категориальной.

...