【问题标题】:How to pass epoch and batch size when using label powerset in keras在keras中使用label powerset时如何传递epoch和batch size
【发布时间】:2019-11-06 21:52:43
【问题描述】:

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

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

由于我有一个多标签问题,我使用了 sklearn 的 MultiLabelBinarizer,所以我的每个目标行看起来像这样 [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 进行逆变换这个。

【问题讨论】:

    标签: keras neural-network deep-learning multilabel-classification scikit-multilearn


    【解决方案1】:

    KERAS_PARAMS是keras scikit wrapper的参数。它的文档是相当稀疏的。

    基本上它似乎是您将通过的参数,例如,到987654324 @。

    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而不是分类。

    【讨论】:

    • 事物是labelPowerset使所有不同类的组合和这些组合成为一个类使得从多标签到多级的问题,因此使用softmax是很重要的丢失作为类别的多级问题_crossentropy? span>
    • 假设您有三个类A,B,C.和最终目标是能够拥有多标签分类,在那里您可以获得这些类的概率。这可以通过Keras直接使用'sigmoid'激活/ binary_crossentrophy丢失来实现。或者您可以拥有LabelPowerset创建每个置换的人工类。空,A,B,C,AB,AC,BC,ABC和使用KERAS多级模型(SoftMax / Cateorical_CrossentErophy)。对我来说,似乎是第一种方法是优选的。 span>
    • 如果有人想象的是keras()。这是一个Meka包装器,如果您不确定如何使用,只需使用此行```来自skmultilearn.ext keras``` span>
    猜你喜欢
    • 2017-12-14
    • 2020-12-11
    • 2019-10-12
    • 2017-07-23
    • 2015-05-23
    • 2021-04-25
    • 1970-01-01
    • 2019-11-08
    • 2020-05-05
    相关资源
    最近更新 更多