Факел, нейронные сети — форвардная функция на объекте gmodule — класс nngraph

Я новичок в torch и lua (как может подтвердить любой, кто следил за моими последними сообщениями :), и у меня есть следующий вопрос о функции пересылки для объекта gmodule (класс nngraph).

согласно исходному коду (https://github.com/torch/nn/blob/master/Module.lua — поскольку класс gmodule наследуется от nn.module) синтаксис:

function Module:forward(input)
   return self:updateOutput(input)
end

Однако я обнаружил случаи, когда в качестве входных данных передается таблица, например:

local lst = clones.rnn[t]:forward{x[{{}, t}], unpack(rnn_state[t-1])}

куда:

clones.rnn[t]

сам является объектом gmodule. В свою очередь, rnn_state[t-1] — это таблица с 4 тензорами. В итоге имеем нечто похожее на

result_var = gmodule:forward{[1]=tensor_1,[2]=tensor_2,[3]=tensor_3,...,[5]=tensor_5}

Вопрос в том, в зависимости от архитектуры сети, можете ли вы передавать входные данные, отформатированные в виде таблицы, не только на входной слой, но и на скрытые слои?

В этом случае вы должны проверить, что вы передаете ровно один вход на слой? (за исключением выходного слоя)

Огромное спасибо


person Alejandro Simkievich    schedule 10.01.2016    source источник


Ответы (1)


Я наконец нашел ответ. Класс модуля (а также унаследованный класс gmodule) имеет вход и выход.

Однако вход (а также выход) не обязательно должен быть вектором, но это может быть набор векторов — это зависит от конфигурации нейронной сети, в данном конкретном случае это довольно сложная рекурсивная нейронная сеть.

Итак, если сеть имеет более одного входного вектора, вы можете сделать:

result_var = gmodule:forward{[1]=tensor_1,[2]=tensor_2,[3]=tensor_3,...,[5]=tensor_5}

где каждый тензор/вектор является одним из входных векторов. Только один из этих векторов является вектором X или вектором признаков. Остальные могут служить входными данными для других промежуточных узлов.

В свою очередь, result_var (который является выходом) может иметь один выход в виде тензора (прогноз) или набор тензоров в качестве выхода (набор тензоров), в зависимости от конфигурации сети.

В последнем случае один из этих выходных тензоров является прогнозом, а напоминание обычно используется в качестве входных данных для промежуточных узлов на следующем временном шаге, но это опять же зависит от конфигурации сети.

person Alejandro Simkievich    schedule 11.01.2016