Параметры keras для классификации многослойных текстов - PullRequest
0 голосов
/ 30 ноября 2018

Я использую кераты в моей мультиклассовой текстовой классификации, набор данных содержит 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' , где food - это имя класса

, когда я изменяю потерю на категорийный_центр, я получаю ошибку Ошибка при проверке цели: ожидаетсяActivation_24 имеет форму (10,), но получил массив с формой (1,)

Обновление

'
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 голосов
/ 30 ноября 2018

В конце вы правильно использовали Dense(10), чтобы получить десять результатов, по одному для каждого класса.

Но вы должны иметь форму вывода y_train также с 10 классами.

Он должен иметь форму (numberOfTweets, 10).

Для этого вам необходимо:

  • Если у вас есть массив с индексами, преобразуйте их с помощью функции keras y_train=to_categorical(y_train).
  • Если у вас есть их как строки, вы должны преобразовать их в индексы, а затем использовать to_categorical
...