Ошибка Spares Ops при построении модели keras в python - PullRequest
0 голосов
/ 12 июля 2020

Я делаю свою первую текстовую нейронную сеть с несколькими метками

Я обработал свой набор текстовых данных

сделал TFIDF и все остальное.

Я разделяю данные на обучение и тестирование данные для функций и результатов

Мои окончательные фреймы данных:

xtrain_tfidf : it has matrix of 800 records with 10,000 features for training
<799x10000 sparse matrix of type '<class 'numpy.float64'>'
    with 383772 stored elements in Compressed Sparse Row format>

xval_tfidf : it has matrix of 200 records with 10,000 features for testing
<200x10000 sparse matrix of type '<class 'numpy.float64'>'
    with 97643 stored elements in Compressed Sparse Row format>

ytrain : array of array that has all labels one-hot-encoded for training
(799, 668)

array([[0, 1, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 1, 0]])




yval : array of array that has all labels one-hot-encoded for training
(200, 668)

array([[0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])

Я построил эту модель NN

from keras.models import Sequential
from keras import layers

input_dim = xtrain_tfidf.shape[1]  # Number of features
output_dim=len(df['Categories'].explode().unique()) # Number of Classes

model = Sequential()
model.add(layers.Dense(10, input_dim=input_dim, activation='relu'))
model.add(layers.Dense(output_dim, activation='sigmoid'))

model.compile(loss='binary_crossentropy', 
              optimizer='adam', 
              metrics=['accuracy'])
model.summary()

history = model.fit(xtrain_tfidf, ytrain,
                    epochs=100,
                    verbose=False,
                    validation_data=(xval_tfidf, yval),
                    batch_size=10)

Когда код достигает последней истории строки, я получаю эту ошибку

~\anaconda3\lib\site-packages\six.py in raise_from(value, from_value)

InvalidArgumentError: indices[1] = [0,1277] is out of order. Many sparse ops require sorted indices.
    Use `tf.sparse.reorder` to create a correctly ordered copy.

 [Op:SerializeManySparse]

Мой главный вопрос: почему я получаю эту ошибку и как ее исправить? Я попытался изменить input_dim и output put, все еще получаю ту же ошибку.

Мой другой вопрос: нужно ли однократно закодировать результаты с несколькими метками, чтобы выполнять NLP с нейронной сетью? будет ли он работать, если оставить его без горячего кодирования. (Я, вероятно, протестирую это, когда получу код работающим)

...