2016-08-21 2 views
6

मैं "debugf.py IPython" चलाने के लिए पूर्णांक के टुकड़ा प्रविष्टि मजबूर करने के लिए असफल हो और यह मेरेIndexError: tensorvariable प्रकार

IndexError        Traceback (most recent call last) 
/home/ml/debugf.py in <module>() 
     8 fff = theano.function(inputs=[index], 
     9       outputs=cost, 
---> 10       givens={x: train_set_x[index: index+1]}) 

IndexError: failed to coerce slice entry of type TensorVariable to integer" 

मैं मंच और कोई भाग्य खोज नीचे के रूप में त्रुटि संदेश दिया था, वहाँ कोई कर सकता है मदद ? धन्यवाद!
debugf.py:

import theano.tensor as T  
import theano  
import numpy  
index =T.lscalar()  
x=T.dmatrix()  
cost=x +index  
train_set_x=numpy.arange(100).reshape([20,5])  
fff=theano.function(inputs=[index],  
    outputs=cost,  
    givens={x:train_set_x[index: index+1]}) #<--- Error here  
+0

आपकी पोस्ट की शुरुआत में कुछ याद आ रही है। आपने इंडेक्स एरर क्या दिया? – Anthon

उत्तर

2

बदलें train_set_x चर चर theano.shared के लिए, और कोड ठीक है। मुझे कारण पता नहीं है, लेकिन यह काम करता है! उम्मीद है कि यह पोस्ट दूसरों की मदद कर सकती है। सही कोड

import theano.tensor as T  
import theano  
import numpy  
index =T.lscalar()  
x=T.dmatrix()  
cost=x +index  
train_set_x=numpy.arange(100.).reshape([20,5]) #<--- change to float, 
            #because shared must be floatX type 

#change to shared variable 
shared_x = theano.shared(train_set_x) 

fff=theano.function(inputs=[index],  
    outputs=cost,  
    givens={x:shared_x[index: index+1]}) #<----change to shared_x 
+0

यहां तक ​​कि अगर आप 'cost = x [इंडेक्स: इंडेक्स + 1] + इंडेक्स 'डालते हैं और बस' givens = {x: shared_x}' – BGabor

1

नीचे के रूप में कारण यह इसलिए होता है क्योंकि सूचकांक एक टेन्सर प्रतीकात्मक चर रहा है (एक लंबे अदिश, जैसा कि आप लाइन 4 पर देख सकते हैं) है। तो जब पायथन उस शब्दकोश को बनाने की कोशिश करता है जिसे थानो को इसके 'दिए गए' इनपुट के लिए जरूरी है, तो यह प्रतीकात्मक चर का उपयोग करके numpy सरणी को टुकड़ा करने की कोशिश करता है - जो स्पष्ट रूप से ऐसा नहीं कर सकता क्योंकि इसमें अभी तक कोई मान नहीं है (यह केवल जब आप फ़ंक्शन में कुछ इनपुट करते हैं तो सेट करें)।

जैसा कि आपने डेटा के माध्यम से डेटा को पारित करने का एहसास किया है। शेर सबसे अच्छा तरीका है। इसका मतलब है कि सभी प्रशिक्षण डेटा को जीपीयू में ऑफलोड किया जा सकता है, और फिर प्रत्येक उदाहरण को चलाने के लिए फ्लाई पर कटा हुआ/अनुक्रमित किया जा सकता है।

हालांकि आपको लगता है कि आपके GPU की स्मृति में फिट होने के लिए आपके पास बहुत अधिक प्रशिक्षण डेटा है, या किसी अन्य कारण से साझा चर का उपयोग नहीं करना चाहते हैं। तो फिर तुम सिर्फ

fff(index) 

लिखने की तो

data = T.matrix() 
fff=theano.function(inputs=[data], 
    outputs=cost, 
    givens={x: data} 
) 

बदल सकता है आपकी समारोह परिभाषा के बजाय आप लिखना

fff(train_set_x[index: index+1]) 

डेटा ले जाने पर GPU धीमी है की प्रक्रिया को चेतावनी दी हो, तो यह है यदि संभव हो तो स्थानांतरण की संख्या को कम करने के लिए बहुत बेहतर है।

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