代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

Keras中类不平衡多类分类器的损失函数

  •  0
  • ScalaBoy  · 技术社区  · 6 年前

    我试图将深度学习应用到一个目标班(10万、500万、90万、30万)之间的高班级不平衡的多班级分类问题上。我想写一个自定义丢失函数。 这是我目前的型号:

    model = Sequential()
    
    model.add(LSTM(
                    units=10, # number of units returned by LSTM
                    return_sequences=True, 
                    input_shape=(timestamps,nb_features),
                    dropout=0.2, 
                    recurrent_dropout=0.2
                  )
             )
    
    model.add(TimeDistributed(Dense(1)))
    
    model.add(Dropout(0.2))
    
    model.add(Flatten())
    
    model.add(Dense(units=nb_classes,
                   activation='softmax'))
    
    model.compile(loss="categorical_crossentropy",
                  metrics = ['accuracy'],
                  optimizer='adadelta')
    

    不幸的是,所有预测都属于1类!!!!模型总是预测任何输入为1…

    感谢任何关于我如何解决这个任务的建议。

    更新:

    输入数据的尺寸:

    94981 train sequences
    29494 test sequences
    X_train shape: (94981, 20, 18)
    X_test shape: (29494, 20, 18)
    y_train shape: (94981, 4)
    y_test shape: (29494, 4)
    

    基本上在列车数据中,我有94981个样本。每个样本包含一个20个时间戳的序列。共有18个功能。

    目标等级(10K、500K、90K、30K)之间的不平衡就是一个例子。我在我的真实数据集中有相似的比例。

    enter image description here

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   Szymon Maszke    6 年前

    10 x 1

    0 class class 2

    sklearn's documentation