如何访问Tensorflow中循环单元的权重?

在深度Q学习任务中,提高稳定性的一种方法是保持一组用于计算Q值目标的网络目标权重,这些权重更新缓慢。在学习过程中,不同时间会使用两组不同的权重进行前向传递。对于普通的DQN,这并不难实现,因为权重是可以使用feed_dict设置的tensorflow变量,例如:

sess = tf.Session()input = tf.placeholder(tf.float32, shape=[None, 5])weights = tf.Variable(tf.random_normal(shape=[5,4], stddev=0.1)bias = tf.Variable(tf.constant(0.1, shape=[4])output = tf.matmul(input, weights) + biastarget = tf.placeholder(tf.float32, [None, 4])loss = ......#在这里,我们明确地将权重设置为缓慢更新的目标权重sess.run(output, feed_dict={input: states, weights: target_weights, bias: target_bias})#使用此输出计算学习过程的目标.....#现在我们运行学习过程,使用最新的权重,以及之前计算的目标sess.run(loss, feed_dict={input: states, target: targets})

我想在DQN的循环版本中使用这种目标网络技术,但我不知道如何访问和设置循环单元内部使用的权重。具体来说,我使用的是tf.nn.rnn_cell.BasicLSTMCell,但我想知道如何对任何类型的循环单元执行此操作。


回答:

BasicLSTMCell不会将其变量作为公共API的一部分公开。我建议您查找这些变量在图中的名称,并使用这些名称进行输入(这些名称不太可能改变,因为它们在检查点中,更改这些名称会破坏检查点兼容性)。

或者,您可以制作一个公开变量的BasicLSTMCell副本。我认为这是最干净的方法。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注