首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在形状不同的向量集合上使用tf.nn.l2_loss

在形状不同的向量集合上使用tf.nn.l2_loss
EN

Stack Overflow用户
提问于 2018-10-29 10:37:56
回答 1查看 652关注 0票数 0

我想计算l2损失超过我所有的重量和偏见在我的神经网络。为此,我将所有权重和偏差添加到“tf.GraphKeys.REGULARIZATION_LOSSES”中,并希望使用in定义的函数计算l2损失:

代码语言:javascript
复制
W = tf.Variable(tf.truncated_normal([inputDim, outputDim], stddev=0.1), name='W')
b = tf.Variable(tf.ones([outputDim])/10, name='b')

tf.add_to_collection(tf.GraphKeys.REGULARIZATION_LOSSES, W)
tf.add_to_collection(tf.GraphKeys.REGULARIZATION_LOSSES, b)
...

在后面的代码中:

代码语言:javascript
复制
...
vars = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
l2_loss = tf.nn.l2_loss(vars) * config.L2PENALTY

使用3层网络上的函数时,我得到了这个错误,但找不到解决方案:

代码语言:javascript
复制
ValueError: Tried to convert 't' to a tensor and failed. Error: Shapes must be equal rank, but are 2 and 1
    From merging shape 4 with other shapes. for 'l2_loss/L2Loss/packed' (op: 'Pack') with input shapes: [784,512], [512], [512,256], [256], [256,10], [10].
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-29 14:10:16

虽然tf.nn.l2_loss接收张量作为它的参数,但是您向tf.nn.l2_loss传递了一个张量列表。因此,错误消息意味着l2_loss不能将列表转换为张量。

我们应该像这样计算L2损失

代码语言:javascript
复制
vars = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
list_l2_loss = []
for v in vars:
    list_l2_loss.append(tf.nn.l2_loss(v))
total_l2_loss = tf.add_n(list_l2_loss)

添加信息

您可以通过tf.add_to_collection将n-D张量添加到集合中.但是tf.GraphKeys.REGULARIZATION_LOSSES是tf.get_variable创建的正则化程序的保留名称。所以我们应该给你一个像"MyReguralizers“这样的原名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53043683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档