我想计算l2损失超过我所有的重量和偏见在我的神经网络。为此,我将所有权重和偏差添加到“tf.GraphKeys.REGULARIZATION_LOSSES”中,并希望使用in定义的函数计算l2损失:
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)
...在后面的代码中:
...
vars = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
l2_loss = tf.nn.l2_loss(vars) * config.L2PENALTY使用3层网络上的函数时,我得到了这个错误,但找不到解决方案:
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].发布于 2018-10-29 14:10:16
虽然tf.nn.l2_loss接收张量作为它的参数,但是您向tf.nn.l2_loss传递了一个张量列表。因此,错误消息意味着l2_loss不能将列表转换为张量。
我们应该像这样计算L2损失
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“这样的原名。
https://stackoverflow.com/questions/53043683
复制相似问题