У меня есть Scipy разреженная матрица CSR, созданная из разреженной матрицы функций TF-IDF в формате SVM-Light. Количество функций огромно и мало разрешено, поэтому я должен использовать SparseTensor, иначе он слишком медленный.Scipy разреженная матрица CSR для TensorFlow SparseTensor - мини-пакетный градиентный спуск
Например, число особенностей является 5, и образец файла может выглядеть следующим образом:
0 4:1
1 1:3 3:4
0 5:1
0 2:1
После разбора, обучающий набор выглядит следующим образом:
trainX = <scipy CSR matrix>
trainY = np.array([0,1,00])
У меня есть два важных вопросы:
1) Как я преобразую это в SparseTensor (sp_ids, sp_weights) эффективно, чтобы выполнить быстрое умножение (WX) с помощью поиска: https://www.tensorflow.org/versions/master/api_docs/python/nn.html#embedding_lookup_sparse
2) Как рандомизировать набор данных в каждую эпоху и пересчитать sp_ids, sp_weights, чтобы я мог кормить (feed_dict) для спуска градиента мини-партии.
Пример кода на простой модели, такой как логистическая регрессия, будет очень оценен. График будет таким:
# GRAPH
mul = tf.nn.embedding_lookup_sparse(W, X_sp_ids, X_sp_weights, combiner = "sum") # W.X
z = tf.add(mul, b) # W.X + b
cost_op = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(z, y_true)) # this already has built in sigmoid apply
train_op = tf.train.GradientDescentOptimizer(0.05).minimize(cost_op) # construct optimizer
predict_op = tf.nn.sigmoid(z) # sig(W.X + b)
Вы когда-нибудь находили более эффективное решение для этого? – Alt