TensorFlow: Откуда BasicRNNCell () получает веса и смещения? - PullRequest
0 голосов
/ 04 марта 2019

Я не совсем понимаю, как работает TensorFlow tf.contrib.rnn.BasicRNNCell.
Мы определили набор весов, который должен использоваться в разных местах на графике, но я не понимаю, как я могу сказать команду вышегде ему нужен какой вес, или вообще, как я могу сказать, чтобы он использовал особенно указанный dict в качестве веса.
Может кто-нибудь это уточнить?

1 Ответ

0 голосов
/ 04 марта 2019

Когда вы вызываете tf.contrib.rnn.BasicRNNCell, скажем,

cell = tf.contrib.rnn.BasicRNNCell(num_units=100)

, его веса (в тензорном потоке это называется kernel) и смещение не будет создано.На данный момент cell знает только количество нейронов, которые он собирается создать, и как активировать их потом.(Логически, вам нужно указать cell размер ввода, чтобы создать переменную веса.)

Тогда вы, вероятно, сделаете:

rnn = tf.nn.dynamic_rnn(cell, rnn_inputs, dtype=tf.float32)

Во время tf.nn.dynamic_rnn, 2 важные вещипроизойдет последовательно:

  1. cell.build будет вызван.Так как ввод указан, cell создаст его весовые коэффициенты (ядро) и смещение.После этого вы можете получить к ним доступ, используя cell._kernel и cell._bias.Соответствующие узлы будут добавлены к графу вычислений тензорного потока, но еще не связаны с другими узлами. Будет вызван

  2. cell.call.Узлы веса и смещения, созданные в 1, связаны с некоторыми новыми узлами для получения результата RNN.

Таким образом, буквально вам не нужно указывать команде, как все делать точно.Что вам нужно сделать, так это использовать API TensorFlow надлежащим образом, и большинство деталей реализации будут очень хорошо проработаны.

...