BasicRNNCell 偏差没有得到训练
BasicRNNCell biases do not get trained
我的网络在训练时卡在了大约 70% 的准确率,而验证准确率刚刚超过 50%(这是一个两个 class class 化的问题)。我正在调试它并想排除以下原因。
除其他外,网络由 BasicRNNCell
:
rnn_cell = tensorflow.contrib.rnn.BasicRNNCell(100)
tensorflow 为这个 RNN 层创建权重和偏差,我可以使用 tf.trainable_variables()
:
找到它
<tf.Variable 'network/rnn/basic_rnn_cell/kernel:0' shape=(200, 100) dtype=float32_ref>,
<tf.Variable 'network/rnn/basic_rnn_cell/bias:0' shape=(100,) dtype=float32_ref>
在训练过程中,kernel:0
的值会按照我的预期改变每一步,另一边的 bias
的值都是零并且不会改变。我正在使用 AdagradOptimizer:
optimizer = tf.train.AdagradOptimizer(learning_rate=learning_rate).minimize(cost)
根据我的理解,偏差应该像权重一样在每个训练步骤中更新。
这是预期的行为吗?难道这就是让我的学习停滞不前的原因吗?
根据我的经验,我不会关注那样的细节。从您提供的内容很难说是否应该存在 non-zero 偏见。使用 RNN 时,最好使用裁剪梯度。我已经看到使用这个
在训练方面有很大的改进
optimizer = tf.train.AdamOptimizer(learning_rate)
# Calculate and clip gradients
params = tf.trainable_variables()
gradients = tf.gradients(rnn.loss, params)
clipped_gradients, _ = tf.clip_by_global_norm(
gradients, FLAGS.max_gradient_norm)
train_op = optimizer.apply_gradients(zip(clipped_gradients,params), global_step=global_step)
通常 max_gradient_norm 介于 1 和 5 之间效果最佳。我也更喜欢 adamOptimizer。希望对您有所帮助!
我的网络在训练时卡在了大约 70% 的准确率,而验证准确率刚刚超过 50%(这是一个两个 class class 化的问题)。我正在调试它并想排除以下原因。
除其他外,网络由 BasicRNNCell
:
rnn_cell = tensorflow.contrib.rnn.BasicRNNCell(100)
tensorflow 为这个 RNN 层创建权重和偏差,我可以使用 tf.trainable_variables()
:
<tf.Variable 'network/rnn/basic_rnn_cell/kernel:0' shape=(200, 100) dtype=float32_ref>,
<tf.Variable 'network/rnn/basic_rnn_cell/bias:0' shape=(100,) dtype=float32_ref>
在训练过程中,kernel:0
的值会按照我的预期改变每一步,另一边的 bias
的值都是零并且不会改变。我正在使用 AdagradOptimizer:
optimizer = tf.train.AdagradOptimizer(learning_rate=learning_rate).minimize(cost)
根据我的理解,偏差应该像权重一样在每个训练步骤中更新。
这是预期的行为吗?难道这就是让我的学习停滞不前的原因吗?
根据我的经验,我不会关注那样的细节。从您提供的内容很难说是否应该存在 non-zero 偏见。使用 RNN 时,最好使用裁剪梯度。我已经看到使用这个
在训练方面有很大的改进 optimizer = tf.train.AdamOptimizer(learning_rate)
# Calculate and clip gradients
params = tf.trainable_variables()
gradients = tf.gradients(rnn.loss, params)
clipped_gradients, _ = tf.clip_by_global_norm(
gradients, FLAGS.max_gradient_norm)
train_op = optimizer.apply_gradients(zip(clipped_gradients,params), global_step=global_step)
通常 max_gradient_norm 介于 1 和 5 之间效果最佳。我也更喜欢 adamOptimizer。希望对您有所帮助!