web-dev-qa-db-ja.com

indices [201] = [0,8]は順不同です。多くのスパース演算は、ソートされたインデックスを必要とします。正しい順序でコピーを作成するには、 `tf.sparse.reorder`を使用してください

すべての変数をエンコードするニューラルネットワークを実行していて、モデルにフィットしようとすると、エラーが発生します。

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

 [Op:SerializeManySparse]

私はそれを解決する方法を知りません。私はここにいくつかのコードを印刷することができます、そしてあなたがもっと欲しいのであれば私はまだそれを印刷することができます

def process_atributes(df, train, test):

    continuas = ['Trip_Duration']
    cs = MinMaxScaler()
    trainCont = cs.fit_transform(train[continuas])
    testCont = cs.transform(test[continuas])

    discretas = ['Start_Station_Name', 'End_Station_Name', 'User_Type', 'Genero', 'Hora_inicio']
    ohe = OneHotEncoder()
    ohe.fit(train[discretas])

    trainDisc = ohe.transform(train[discretas])
    testDisc = ohe.transform(test[discretas])

    trainX = sc.sparse.hstack((trainDisc, trainCont))
    testX = sc.sparse.hstack((testDisc, testCont))
    return (trainX, testX)

def prepare_targets(df, train, test):

    labeled_col = ['RangoEdad']

    le = LabelEncoder()
    le.fit(train[labeled_col].values.ravel())
    trainY = le.transform(train[labeled_col])
    testY = le.transform(test[labeled_col])
    return trainY, testY

X_train_enc, X_test_enc = process_atributes(dataFrameDepurado2, train, test)
Y_train_enc, Y_test_enc = prepare_targets(dataSetPrueba, train, test)

model = Sequential()
model.add(Dense(10, input_dim = X_train_enc.shape[1], activation = 'tanh', kernel_initializer = 'he_normal'))
model.add(Dense(4, activation = 'sigmoid'))

model.compile(loss = 'sparse_categorical_crossentropy', optimizer = SGD(lr = 0.01), metrics = ['accuracy'])

model.fit(X_train_enc, Y_train_enc, validation_data = (X_test_enc, Y_test_enc), epochs = 20, batch_size = 64, shuffle = True) 

これは私のデータセットです

this is my dataSet

前もって感謝します。

4
Xcelsior

コミュニティの利点のために、コメントセクションに存在する場合でも、ここ(回答セクション)でソリューションに言及します。

SparseTensor 状態のドキュメント

By convention, indices should be sorted in row-major order (or equivalently 
lexicographic order on the tuples indices[i]). This is not enforced when
SparseTensor objects are constructed, but most ops assume correct ordering. If 
the ordering of sparse tensor st is wrong, a fixed version can be obtained by
calling [tf.sparse.reorder(st)][2].

したがって、いずれかのtf.sparse.reorderまたはscipy.sort_indices行列、X_train_enc, X_test_enc, Y_train_enc, Y_test_enc、コード行の前、

model.fit(X_train_enc, Y_train_enc, validation_data = (X_test_enc, 
Y_test_enc), epochs = 20, batch_size = 64, shuffle = True)

問題を解決します。

詳細については、 Sparse Tensor および tf.sparse.reorder のドキュメントを参照してください。

お役に立てれば。ハッピーラーニング!

2