Назначение переменных «данные» в Theano.function


person user1245262    schedule 12.11.2014    source источник


Ответы (2)


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

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

person nouiz    schedule 13.11.2014
comment
это очень полезно и проясняет мои идеи об этих концепциях, спасибо! - person eickenberg; 13.11.2014
comment
@nouiz - Спасибо, позвольте мне посмотреть, правильно ли я понял: - person user1245262; 13.11.2014
comment
@nouiz - Спасибо, дайте мне посмотреть, понимаю ли я: 1. Использование «данного» предназначено для улучшения управления памятью Theano между процессором и графическим процессором (-ами). 2. «Данное» создаст (?) общую переменную только если ее можно поместить в GPU. 3. В отличие от общих переменных, данные переменные не сохраняют состояние - я не могу создавать для них обновления внутри функции, и если они изменятся вне функции, это не повлияет на последующие вызовы этой функции....... Я совершил какие-либо ошибки совершения или упущения?... Thx. (Извините - случайно ввел 1-й комментарий, а затем потратил слишком много времени на редактирование) - person user1245262; 13.11.2014
comment
1) Нет. Это общая переменная, которая полезна для улучшения использования графического процессора за счет меньшей передачи. 2) Нет. данный не создавать общую переменную. Пользователь должен создать их сам. Данные не являются переменной Theano и не создают переменную Theano. Они предназначены для изменения графика Theano, определенного параметром inputs и outputs, переданным в theano.function(). Это из принципа функционального программирования. Программа — это просто данные, как и другие данные. Вы можете изменить свою программу. данный позволит вам сделать это. - person nouiz; 13.11.2014
comment
@nouiz - Хорошо - я только что заметил, что наборы данных были созданы как общие переменные, поэтому я явно ошибался. Где я могу прочитать о том, как 'данный' изменяет график (я буду искать документы)? Прямо сейчас моя единственная мысль заключается в том, что это сигнализирует Theano построить график, чтобы заданные переменные были переданы на GPU, насколько это возможно. - person user1245262; 13.11.2014
comment
@nouiz - Хорошо. Кажется, я нашел ответ здесь: groups.google.com/ forum/#!topic/theano-users/wTYk_F-skW0 ... Общие переменные хранятся/используются на графическом процессоре. Объявляя общие переменные как «данные», они также будут храниться там. Таким образом, каждый вызов функции не потребует восстановления переменных в графическом процессоре. - person user1245262; 13.11.2014
comment
Вы ближе, но не совсем правы. Вам не нужно использовать данные для хранения на GPU. Процессор против графического процессора не зависит от заданного. То, что вы описываете, полезно только для общей переменной. данные - это способ изменить график. Исходный график не был построен на основе общей переменной. Если исходный график был построен на общей переменной, данный параметр не понадобится. Так зачем же использовать данные? Просто чтобы отделить построение графика от обработки набора данных. - person nouiz; 13.11.2014

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

person eickenberg    schedule 12.11.2014
comment
Итак, когда/почему я разрабатываю функцию для использования заданных переменных вместо общих? - person user1245262; 12.11.2014
comment
данные в вашем коде заменяют входные переменные общим переменным содержимым, поэтому вместо них нет данных - person eickenberg; 13.11.2014