tf.keras.layers.CuDNNLSTM中的偏差向量的维数

时间:2019-01-23 15:11:46

标签: tensorflow keras lstm cudnn

我在tf.keras.layers.CuDNNLSTM上进行实验,发现偏差大小的尺寸为[8 * num_units,]。 (Source code

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

我唯一的假设是他们也分别为输入权重和递归权重实现了偏向矢量,但是我找不到对此的参考。

1 个答案:

答案 0 :(得分:0)

fatal: [cloudguru1]: FAILED! => {"changed": true, "cmd": "nc -vz Bigdog_server 443" 中存在 2X 偏差,但在 CuDNNLSTM 中实现的方式不同。
根据 this 代码,它的编写方式不会对 Tensorflow 使用单独的偏差,而是调用作为基类的 recurrent kernel