在keras中使用label powerset时如何传递历元和批大小

在keras中使用label powerset时如何传递历元和批大小,keras,neural-network,deep-learning,multilabel-classification,scikit-multilearn,Keras,Neural Network,Deep Learning,Multilabel Classification,Scikit Multilearn,我有一个多标签问题,通过一些研究,我能够将标签powerset与ML算法结合使用。现在我想使用神经网络的标签功率集,根据我可以使用标签功率集。但我无法理解如何修改现有代码以使用Label Powerset 我想知道我们如何在模型的fit函数中传递epoch或batch_size或任何其他参数 因为我有一个多标签问题,我使用了sklearn的MultiLabelBinarizer,所以我的每个目标行都是这样的[1,0,0,1,0,0,0,0,0,0] 最后,如果有人能在下面一行向我解释什么是KER

我有一个多标签问题,通过一些研究,我能够将标签powerset与ML算法结合使用。现在我想使用神经网络的标签功率集,根据我可以使用标签功率集。但我无法理解如何修改现有代码以使用Label Powerset

我想知道我们如何在模型的fit函数中传递epoch或batch_size或任何其他参数

因为我有一个多标签问题,我使用了sklearn的MultiLabelBinarizer,所以我的每个目标行都是这样的[1,0,0,1,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]这样,因为稍后我将使用我的多LabelBinarizer对其进行逆变换。

KERAS_参数是KERAS scikit的参数。关于它的文档相当稀少

基本上,它似乎是您要传递的参数,例如,keras.fit

通过阅读文档,我觉得LabelPowerset通过创建类排列将多标签问题转化为多类问题。您可以考虑只使用本地KLAS解决方案来解决多标签问题,而不是使用包装器。 以下教程似乎合理:


关键区别在于,您的输出层应该有一个sigmoid激活,而不是softmax,并且损失应该是二进制的,而不是分类的。

问题是LabelPowerset使所有不同类的组合成为一个类,使问题从多标签变成多类,将softmax用于损失作为分类交叉熵的多类别问题不是很重要吗?假设您有三个类别A、B、C。最终目标是能够有一个多标签分类,其中您可以获得这些类别存在的概率。这可以通过使用“S形”激活/二元交叉熵损失直接使用KERA实现。或者,您可以让LabelPowerset使用每个集合排列创建人工类,例如空、A、B、C、AB、AC、BC、ABC,并使用Keras多类模型softmax/Category_crossentrophy。在我看来,第一种方法似乎更可取,以防有人想知道什么是Keras。它是一个MEKA包装器,如果您不确定如何使用它,请使用skmultilearn.ext import Keras中的这一行“`”```
KERAS_PARAMS = dict(epochs=10, batch_size=100, verbose=0)