Функция Теано() сообщает, что мое значение `givens` не требуется для графика

#python #neural-network #deep-learning #theano #conv-neural-network

#python #нейронная сеть #глубокое обучение #теано #conv-нейронная сеть

Вопрос:

Извините, что не публикую целые фрагменты — код очень большой и разбросанный, так что, надеюсь, это может проиллюстрировать мою проблему. У меня есть эти:

 train = theano.function([X], output, updates=update_G,
                        givens={train_mode=:np.cast['int32'](1)})
  

и

 test = theano.function([X], output, updates=update_G,
                       givens={train_mode=:np.cast['int32'](0)})
  

насколько я понимаю, givens будет вводить значение train_mode (т. Е. 1 / 0 ) везде, где это необходимо для вычисления выходных данных.

output Вычисляется в строках этого:

      ...
     network2 = Net2()
     # This is sort of a dummy variable so I don't get a NameError when this
     # is called before `theano.function()` is called. Not sure if this is the
     # right way to do this.
     train_mode = T.iscalar('train_mode')
     output = loss(network1.get_outputs(network2.get_outputs(X, train_mode=train_mode)),something).mean()

 ....
 class Net2(): 
      def get_outputs(self, x, train_mode):
           from theano.ifelse import ifelse
           import theano.tensor as T
           my_flag = ifelse(T.eq(train_mode, 1), 1, 0)
           return something if my_flag else something_else
  

So train_mode используется в качестве аргумента в одной из вложенных функций, и я использую его, чтобы отличить train от test , поскольку я хотел бы обрабатывать их немного по-другому.

Однако, когда я пытаюсь запустить это, я получаю эту ошибку:

 theano.compile.function_module.UnusedInputError: theano.function was
asked to create a function computing outputs given certain inputs, but
the provided input variable at index 1 is not part of the computational
graph needed to compute the outputs: <TensorType(int32, scalar)>.To make 
this error into a warning, you can pass the parameter 
on_unused_input='warn' to theano.function. To disable it completely, use 
on_unused_input='ignore'.    
  

Если я удалю givens параметр, ошибка исчезнет, поэтому, насколько я понимаю, Теано считает, что мое train_mode значение не требуется для вычисления function() . Я могу использовать on_unusued_input='ignore' согласно их предложению, но это просто проигнорировало бы мое train_mode , если они думают, что оно не используется. Я неправильно обхожу это? По сути, я просто хочу обучить нейронную сеть с отсевом, но не использовать отсев при оценке.

Ответ №1:

почему вы используете знак «=»? Я думаю, что это сделало train_mode недоступным для чтения, мой код хорошо работает при написании: givens = {train_mode:1}

Комментарии:

1. Извините, =: была опечатка. Я выполняю приведение, чтобы сохранить согласованность типов, но я попробую без этого, когда вернусь к компьютеру.