可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I run "ipython debugf.py" and it gave me error message as below
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"
I search the forum and no luck, is there someone can help ? thanks!
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
回答1:
Change train_set_x variable to theano.shared variable, and the code is OK. I dont know the reason, but it works! Hope this post can help others. The correct code is as below
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
回答2:
As you've realised passing the data through theano.shared is the best approach. This means all the training data can be offloaded to the GPU, and then sliced/indexed on the fly to run each example.
However you might find that you have too much training data to fit in your GPU's memory, or for some other reason don't want to use a shared variable. Then you could just change your function definition
data = T.matrix() fff=theano.function(inputs=[data], outputs=cost, givens={x: data} )
Then instead of writing
fff(index)
You write
fff(train_set_x[index: index+1])
Be warned the process of moving data onto the GPU is slow, so it's much better to minimise the number of transfers if possible.