问题描述
我正在做一个对每个变量进行编码的神经网络,当我要拟合模型时,会出现错误.
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.reorder
或scipy.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`创建正确排序的副本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!