首页 文章

用于多标签文本分类的keras参数

提问于
浏览
-1

我在我的多类文本分类中使用keras,数据集包含25000个带有10个类标签的阿拉伯语推文我使用此代码:

model = Sequential()
model.add(Dense(512, input_shape=(10902,)))#10902
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(10))
model.add(Activation('softmax'))
model.summary()
 #categorical_crossentropy
model.compile(loss='sparse_categorical_crossentropy',        optimizer='rmsprop',
              metrics=['accuracy'])
..
history = model.fit(X_train, y_train,
                    batch_size=100,
                    epochs=30,
                    verbose=1,
                    validation_split=0.5)

摘要:

Layer (type)                 Output Shape              Param #   
=================================================================
dense_23 (Dense)             (None, 512)               5582336   
_________________________________________________________________
activation_22 (Activation)   (None, 512)               0         
_________________________________________________________________
dropout_15 (Dropout)         (None, 512)               0         
_________________________________________________________________
dense_24 (Dense)             (None, 512)               262656    
_________________________________________________________________
activation_23 (Activation)   (None, 512)               0         
_________________________________________________________________
dropout_16 (Dropout)         (None, 512)               0         
_________________________________________________________________
dense_25 (Dense)             (None, 10)                5130      
_________________________________________________________________
activation_24 (Activation)   (None, 10)                0         
=================================================================
Total params: 5,850,122
Trainable params: 5,850,122
Non-trainable params: 0

但我得到错误:无法将字符串转换为浮点数:'food'其中食物是类名

当我将损失更改为categorical_crossentropy时,我在检查目标时得到错误错误:期望activation_24具有形状(10,)但是得到了具有形状的数组(1,)

Update

'
nd=data.replace(['ads', 'Politic', 'eco', 'food', 'health', 'porno', 'religion', 'sports', 'tech','tv'], 
                     [1, 2, 3, 4, 5,6,7,8,9,10]) 
model = Sequential()
    model.add(Dense(512, input_shape=(10902,10)))#no. of words
    model.add(Activation('relu'))
    model.add(Dropout(0.3))
    model.add(Dense(512))
    model.add(Activation('relu'))
    model.add(Dropout(0.3))
    model.add(Dense(10))
    model.add(Activation('softmax'))
    model.summary()
     #categorical_crossentropy
    model.compile(loss='categorical_crossentropy',        optimizer='rmsprop',
                  metrics=['accuracy'])
    y_train=keras.utils.to_categorical(y_train) 
    history = model.fit(X_train, y_train,
                        batch_size=100,
                        epochs=30,
                        verbose=1,
                        validation_split=0.5)'

1 回答

  • 0

    你最后正确地使用了 Dense(10) ,以产生十个结果,每个类一个 .

    但是你的输出 y_train 也应该有10个类 .

    它的形状应该是 (numberOfTweets, 10) .

    为此你应该:

    • 如果您有一个带索引的数组,请使用keras函数 y_train=to_categorical(y_train) 进行转换 .

    • 如果将它们作为字符串,则必须在索引中对它们进行转换,然后使用 to_categorical

相关问题