Подтвердить что ты не робот

Назначение переменных "givens" в Theano.function

Я читал код для логистической функции, указанный в http://deeplearning.net/tutorial/logreg.html. Я смущен различием между переменными inputs и givens для функции. Функции, которые вычисляют ошибки, сделанные моделью на мини-баре, заключаются в следующем:

 test_model = theano.function(inputs=[index],
        outputs=classifier.errors(y),
        givens={
            x: test_set_x[index * batch_size: (index + 1) * batch_size],
            y: test_set_y[index * batch_size: (index + 1) * batch_size]})

validate_model = theano.function(inputs=[index],
        outputs=classifier.errors(y),
        givens={
            x: valid_set_x[index * batch_size:(index + 1) * batch_size],
            y: valid_set_y[index * batch_size:(index + 1) * batch_size]})

Почему бы не сделать/не просто сделать x & y общих входных переменных и определить их при создании фактического экземпляра модели?

4b9b3361

Ответ 1

Параметр givens позволяет отделить описание модели и точное определение переменной ввода. Это является следствием того, что делает данный параметр: измените граф для компиляции перед его компиляцией. Другими словами, мы заменяем на графике ключ в givens со связанным значением.

В учебнике глубокого обучения мы используем обычную переменную Theano для построения модели. Мы используем givens для ускорения работы графического процессора. Здесь, если мы сохраним набор данных на процессоре, мы передадим мини-пакет на GPU при каждом вызове функции. Поскольку мы выполняем много итераций в наборе данных, мы в конечном итоге переносим множество данных на GPU. Поскольку набор данных достаточно мал, чтобы соответствовать графическому процессору, мы помещаем его в общую переменную, чтобы передать его на GPU, если он доступен (или оставаться на центральном процессоре, если модуль обработки графики отключен). Затем при компиляции функции мы меняем ввод с помощью среза, соответствующего мини-пакетному набору данных для использования. Тогда вход функции Anano является только индексом той мини-партии, которую мы хотим использовать.

Ответ 2

Я не думаю, что что-то не мешает вам делать это таким образом (я не пробовал словарь updates=, используя входную переменную напрямую, но почему бы и нет). Однако обратите внимание, что для точного ввода данных в графический процессор вам понадобится быть в общей переменной (из которой в этом примере берутся x и y).