本文介绍了索引[201] = [0,8]乱序.许多稀疏操作要求索引排序,使用`tf.sparse.reorder`创建正确排序的副本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个对每个变量进行编码的神经网络,当我要拟合模型时,会出现错误.

Im doing a neural network encoding every variable and when im going to fit the model, an error raises.

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]

我不知道该如何解决.我可以在这里打印一些代码,如果您想要更多,我仍然可以打印它

I dunno how to solve it. I can print some code here and if u want more i can still printing it

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) 

这是我的数据集

谢谢.

推荐答案

在此处提及解决方案(答案部分),即使它存在于注释部分中,也是出于社区的好处.

Mentioning the solution here (Answer Section) even though it is present in the Comments Section, for the benefit of the Community.

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].

因此,在代码行之前在矩阵X_train_enc, X_test_enc, Y_train_enc, Y_test_enc上使用tf.sparse.reorderscipy.sort_indices

So, using either tf.sparse.reorder or scipy.sort_indices on the matrices, X_train_enc, X_test_enc, Y_train_enc, Y_test_enc, before the line of code,

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

将解决问题.

有关更多信息,请参阅稀疏张量 tf.sparse.reorder .

For more information, please refer documentation of Sparse Tensor and tf.sparse.reorder.

希望这会有所帮助.学习愉快!

Hope this helps. Happy Learning!

这篇关于索引[201] = [0,8]乱序.许多稀疏操作要求索引排序,使用`tf.sparse.reorder`创建正确排序的副本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-18 23:16