2016-11-30 16 views
6

मेरे पास एसवीएम-लाइट प्रारूप में स्पैस टीएफ-आईडीएफ फीचर मैट्रिक्स से निर्मित एक सिसी स्पैस सीएसआर मैट्रिक्स है। सुविधाओं की संख्या बहुत बड़ी है और यह स्पैस है इसलिए मुझे स्पैरसेन्सर का उपयोग करना है या नहीं, यह बहुत धीमी है।सेंसर स्पैस सीएसआर मैट्रिक्स टेंसरफ्लो स्पैरसेन्सर - मिनी-बैच ग्रेडियेंट वंश

उदाहरण के लिए, सुविधाओं की संख्या 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) मैं इसे स्पैरसेन्सर (sp_ids, sp_weights) में कुशलता से कैसे परिवर्तित करता हूं ताकि मैं लुकअप का उपयोग करके तेज़ गुणा (डब्ल्यूएक्स) कर सकूं: 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) 
+0

क्या आपने कभी इसके लिए एक और अधिक कुशल समाधान खोजा है? – Alt

उत्तर

12

मैं आपके प्रश्न के पहले भाग का उत्तर दे सकता हूं।

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) 

सबसे पहले आप मैट्रिक्स को सीओओ प्रारूप में परिवर्तित करते हैं। फिर आप सूचकांक, मूल्यों और आकार को निकालें और सीधे उन स्पैसटेन्सर कन्स्ट्रक्टर को पास करें।

+2

बदले में tf.SparseTensor के बदले में (जो मेरे लिए अपवाद फेंक दिया) मैंने tf.SparseTensorValue का उपयोग किया और यह मेरे लिए बहुत अच्छा काम किया। – Ash

संबंधित मुद्दे