Размерность вектора смещения в tf.keras.layers.CuDNNLSTM - PullRequest
0 голосов
/ 23 января 2019

Я экспериментировал с tf.keras.layers.CuDNNLSTM и понял, что размер смещения равен [8 * num_units,]. ( Исходный код )

import tensorflow as tf

#Data Parameters
num_timesteps = 24
num_features = 33

#Network Parameters
num_units = 2048

inputs = tf.placeholder(tf.float32, shape=[None, num_timesteps, num_features])
LSTM1 = tf.keras.layers.CuDNNLSTM(units = num_units, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, return_sequences=True, return_state=False)(inputs)
#<tf.Tensor 'cu_dnnlstm_1/transpose_1:0' shape=(?, 24, 2048) dtype=float32>

tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)
#[<tf.Variable 'cu_dnnlstm/kernel:0' shape=(33, 8192) dtype=float32>,
# <tf.Variable 'cu_dnnlstm/recurrent_kernel:0' shape=(2048, 8192) dtype=float32>,
# <tf.Variable 'cu_dnnlstm/bias:0' shape=(16384,) dtype=float32>]

Однако, если вы посмотрите на формулировку блока LSTM, для каждого входа гейта и блока есть только 4 веса.

enter image description here

Единственное предположение, которое у меня есть, они также реализовали векторы смещения отдельно для входных и повторяющихся весов, однако я не смог найти ссылку на него.

...