基本细胞偏见没有得到训练

2024-05-23 17:18:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我的网络被困在70%左右的训练准确率与验证准确率略高于50%(这是一个两类分类问题)。我正在调试它,并希望排除以下原因。你知道吗

除其他外,网络由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)

在我的理解中,每个训练步骤都应该像重量一样更新偏差。你知道吗

这是预期的行为吗?这是不是让我的学习陷入困境的原因?你知道吗


Tags: 网络basictftensorflowcell原因networkvariable
1条回答
网友
1楼 · 发布于 2024-05-23 17:18:21

以我的经验,我不会把重点放在那样的细节上。很难说从你给出的是否应该有一个非零的偏见。使用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)

一般来说,1到5之间的最大梯度标准效果最好。我也更喜欢adamOptimizer。我希望这有帮助!你知道吗

相关问题 更多 >