张量流:向LSTM添加正则化

2024-10-01 11:33:50 发布

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

Tensorflow LSTM Regularization之后,我试图在LSTM单元的参数训练时,在代价函数中加入正则化项。在

抛开一些常数,我有:

def RegularizationCost(trainable_variables):
    cost = 0
    for v in trainable_variables:
        cost += r(tf.reduce_sum(tf.pow(r(v.name),2)))
    return cost

...

regularization_cost = tf.placeholder(tf.float32, shape = ())
cost = tf.reduce_sum(tf.pow(pred - y, 2)) + regularization_cost
optimizer = tf.train.AdamOptimizer(learning_rate = 0.01).minimize(cost)

...

tv = tf.trainable_variables()
s = tf.Session()
r = s.run

...

while (...):
    ...

    reg_cost = RegularizationCost(tv)
    r(optimizer, feed_dict = {x: x_b, y: y_b, regularization_cost: reg_cost})

我遇到的问题是,添加正则化项极大地减慢了学习过程,实际上,当与pred - y相关的项几乎停滞时,正则化项{}随着每次迭代明显增加,即{}似乎没有被考虑在内。在

我怀疑我用完全错误的方式添加了这个术语。我不知道如何在成本函数本身中添加这个术语,所以我使用了标量的解决方法tf.占位符并“人工”计算了正规化成本。如何正确处理?在


Tags: 函数reducetfvariablesoptimizersumlstmcost
2条回答

因为每次迭代都会减慢你的代码。这不是你用TF编写代码的方式。首先,创建整个图,包括正则化项,然后在while循环中只执行每个转铁器XXX“操作创建新节点。在

仅计算一次L2损耗:

tv = tf.trainable_variables()
regularization_cost = tf.reduce_sum([ tf.nn.l2_loss(v) for v in tv ])
cost = tf.reduce_sum(tf.pow(pred - y, 2)) + regularization_cost
optimizer = tf.train.AdamOptimizer(learning_rate = 0.01).minimize(cost)

您可能需要删除bias的变量,因为这些变量不应该正则化。在

相关问题 更多 >