我在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个权重。
我唯一的假设是他们也分别为输入权重和递归权重实现了偏向矢量,但是我找不到对此的参考。
答案 0 :(得分:0)
fatal: [cloudguru1]: FAILED! => {"changed": true, "cmd": "nc -vz Bigdog_server 443"
中存在 2X 偏差,但在 CuDNNLSTM
中实现的方式不同。
根据 this 代码,它的编写方式不会对 Tensorflow
使用单独的偏差,而是调用作为基类的 recurrent kernel
。