2016-03-03 13 views
8

मैं tensorflow में निम्न कैसे कर सकता हूं?tensorflow में मैट्रिक्स तत्वों को मैनिपुलेट करना

mat = [4,2,6,2,3] # 
mat[2] = 0 # simple zero the 3rd element 

मैं [] कोष्ठक उपयोग नहीं कर सकते क्योंकि यह केवल स्थिरांक पर चर पर नहीं काम करता है और। मैं स्लाइस फ़ंक्शन का उपयोग नहीं कर सकता क्योंकि यह एक टेंसर देता है और आप टेंसर को असाइन नहीं कर सकते हैं।

import tensorflow as tf 
sess = tf.Session() 
var1 = tf.Variable(initial_value=[2, 5, -4, 0]) 
assignZerosOP = (var1[2] = 0) # < ------ This is what I want to do 

sess.run(tf.initialize_all_variables()) 

print sess.run(var1) 
sess.run(assignZerosOP) 
print sess.run(var1) 

प्रिंट होगा

[2, 5, -4, 0] 
[2, 5, 0, 0]) 

उत्तर

11

आप एक टेन्सर नहीं बदल सकते हैं - लेकिन, जैसा कि आप का उल्लेख किया है, तो आप एक चर बदल सकते हैं।

(क) का प्रयोग करें tf.scatter_update सीधे चर आप बदलना चाहते हैं के हिस्से को निकालने के लिए:

तीन पैटर्न आप आप क्या चाहते हैं पूरा करने के लिए इस्तेमाल कर सकते हैं कर रहे हैं।

import tensorflow as tf 

a = tf.Variable(initial_value=[2, 5, -4, 0]) 
b = tf.scatter_update(a, [1], [9]) 
init = tf.initialize_all_variables() 

with tf.Session() as s: 
    s.run(init) 
    print s.run(a) 
    print s.run(b) 
    print s.run(a) 

[2 5 -4 0]

[2 9 -4 0]

[2 9 -4 0]

(ख) बनाएं दो tf.slice() टेंसर का, उस आइटम को छोड़कर जिसे आप बदलना चाहते हैं, और फिर tf.concat(0, [a, 0, b]) उन्हें एक साथ वापस ले जाएं।

(ग) b = tf.zeros_like(a) बनाएँ, और उसके बाद tf.select() का उपयोग a से जो आइटम आप चाहते हैं चुनने के लिए, और जो b जो आप चाहते से शून्य।

मैंने (बी) और (सी) शामिल किया है क्योंकि वे सामान्य टेंसर के साथ काम करते हैं, केवल चर नहीं।

+0

बहुत बहुत धन्यवाद, यह निश्चित रूप से मदद की थी और मैं इसके साथ काम कर सकता था लेकिन यह कुछ हद तक कमजोर होगा। अगर मुझे वास्तव में टेंसर बदलने की ज़रूरत है? क्या ऐसा करने का कोई तरीका नहीं है? मैं नेटवर्क विज़ुअलाइजेशन को कार्यान्वित करना चाहता हूं और मुझे एक सक्रियण परत तक एक छवि को प्रसारित करने की आवश्यकता है, एक यादृच्छिक एक को छोड़कर सभी सक्रियण शून्य करें, फिर उस पर प्रचार करें। – Shagas

+0

टेंसर अपरिवर्तनीय हैं। आम तौर पर, यदि आप राज्य को सहेजना और बदलना चाहते हैं, तो आप इसे एक चर में संग्रहीत करेंगे, जिसे आप * म्यूटेट कर सकते हैं। लेकिन अन्यथा, आप मूल से व्युत्पन्न एक नया टेंसर बनाते हैं और इसका उपयोग करते हैं। यदि आप वर्णन कर रहे हैं, तो शायद यह दृष्टिकोण है। – dga

+0

उत्तर के लिए धन्यवाद। जैसा आपने सुझाव दिया है, मूल से व्युत्पन्न एक नया टेंसर का उपयोग करके मैंने समस्या हल की। – Shagas

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