#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. Извините,
=:
была опечатка. Я выполняю приведение, чтобы сохранить согласованность типов, но я попробую без этого, когда вернусь к компьютеру.