Sal*_*med 10 scipy sparse-matrix gradient-descent tensorflow
我有一个Scipy稀疏CSR矩阵,它是用SVM-Light格式的稀疏TF-IDF特征矩阵创建的.功能的数量是巨大的,它是稀疏的所以我必须使用SparseTensor,否则它太慢.
例如,要素数量为5,示例文件可能如下所示:
0 4:1
1 1:3 3:4
0 5:1
0 2:1
Run Code Online (Sandbox Code Playgroud)
解析后,训练集如下所示:
trainX = <scipy CSR matrix>
trainY = np.array( [0,1,00] )
Run Code Online (Sandbox Code Playgroud)
我有两个重要问题:
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).
像logistic回归这样的简单模型的示例代码将非常受欢迎.图表将是这样的:
# 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)
Run Code Online (Sandbox Code Playgroud)
Dav*_*rio 26
我可以回答你问题的第一部分.
def convert_sparse_matrix_to_sparse_tensor(X):
coo = X.tocoo()
indices = np.mat([coo.row, coo.col]).transpose()
return tf.SparseTensor(indices, coo.data, coo.shape)
Run Code Online (Sandbox Code Playgroud)
首先,将矩阵转换为COO格式.然后提取索引,值和形状,并将它们直接传递给SparseTensor构造函数.
| 归档时间: |
|
| 查看次数: |
6436 次 |
| 最近记录: |