2017-06-27 25 views
6

में प्रत्येक वर्ण को पुनर्प्राप्त करें मैं चरित्र स्तर पूर्वानुमान के लिए स्ट्रिंग टेंसर में वर्णों को पुनर्प्राप्त करने का प्रयास कर रहा हूं। ग्राउंड सच्चाई वे शब्द हैं जहां प्रत्येक चरित्र में शब्दकोश में एक आईडी होती है। मेरे पास स्ट्रिंग की लंबाई के अनुरूप एक टेंसर है।टेन्सफोर्लो - एक स्ट्रिंग टेंसर

अब, मुझे स्ट्रिंग टेंसर में प्रत्येक वर्ण प्राप्त करना होगा। संबंधित पदों की जांच करने के बाद, एक सरल पुनर्प्राप्ति निम्नानुसार हो सकती है। उदाहरण स्ट्रिंग है "यह"

a= tf.constant("This",shape=[1]) 
b=tf.string_split(a,delimiter="").values #Sparse tensor has the values array which stores characters 

अब मैं "यह" यानी "टी एच मैं एस" अक्षरों के बीच में रिक्त स्थान के साथ एक स्ट्रिंग बनाना चाहते हैं। मुझे शुरुआत और अंत में अंतर की भी आवश्यकता है। मैं यह कैसे कर सकता हूं?

मैं की तरह नीचे

for i in xrange(b.dense_shape[1]): # b.dense_shape[1] has the length of string 
     x=b.values[i] 

पात्रों के माध्यम से पुनरावृति करने की कोशिश की लेकिन पाश एक टेन्सर बजाय एक पूर्णांक की उम्मीद है।

उपरोक्त कार्यों को कैसे करें इस पर कोई विचार है? मुझे इससे संबंधित कोई दस्तावेज नहीं मिला (tf.string_split फ़ंक्शन के अलावा)। किसी भी सुझाव का स्वागत है। धन्यवाद

उत्तर

5

आपकी समस्या यह है कि आप टेंसर पर फिर से प्रयास करने की कोशिश कर रहे हैं, यह पुनरावर्तनीय नहीं है। इस कार्य के लिए कुछ विकल्प हैं, जैसे इसे numpy सरणी में eval() के साथ परिवर्तित करें या tf.map_fn का उपयोग करें।

आप खतरे से bnumpy array के रूप में आप केवल इस प्रकार .values से पहले कॉल .eval() जोड़ सकते हैं और परिणाम पर पुनरावृति करने की आवश्यकता चाहते हैं:

with tf.Session() as sess: 
    a = tf.constant("This", shape=[1]) 
    b = tf.string_split(a, delimiter="").values.eval() 

    for i in b: 
     print(i) 

दूसरा विकल्प अधिक इसकी वजह से उचित है का लाभ लेता है TensorFlow के ग्राफ। यह एक ऐसे फ़ंक्शन के उपयोग में आधारित है जो टेंसर "मानचित्र" करता है। यह इस प्रकार किया जा सकता है (जहां fn में आप यात्रा के डी व्यवहार परिभाषित कर सकते हैं):

with tf.Session() as sess: 
    a = tf.constant("This", shape=[1]) 
    b = tf.string_split(a, delimiter="").values 

    fn = lambda i: i 

    print(tf.map_fn(fn, b).eval()) 
+0

वास्तव में मेरी समस्या टेन्सर से अधिक पुनरावृति करने के लिए है, न कि प्रत्येक चरित्र नहीं है। मैं eval() का उपयोग नहीं कर सकता क्योंकि मुझे टेंसर के रूप में वर्णों की आवश्यकता है। मेरा मुख्य कार्य मूल स्ट्रिंग के बीच सम्मिलित रिक्त स्थान के साथ एक स्ट्रिंग टेंसर प्राप्त करना है। मेरा विचार वांछित स्ट्रिंग टेंसर प्राप्त करने के लिए वैकल्पिक रूप से रिक्त स्थान के साथ प्रत्येक वर्ण टेंसर को जोड़ना है। लेकिन मुझे यकीन नहीं है कि यह कैसे करें। –

+1

कार्य दूसरे दृष्टिकोण के साथ आसान है। आप इसे निम्नानुसार कर सकते हैं: 'tf.string_split (tf.map_fn (lambda i: i +" ", b), delimiter =" ")। मान 'का अर्थ है कि आप प्रत्येक वर्ण के अंत में एक स्थान जोड़ते हैं और फिर फिर से परिणामस्वरूप टेंसर को लागू करें। – garciparedes

+0

एक आकर्षण की तरह काम करता है। धन्यवाद –

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