tensorflow:3.1)add_to_collection和L2正则化

1.add_to_collection
add_to_collectio为Graph的一个方法,可以简单地认为Graph下维护了一个字典,key为name,value为list,而add_to_collection就是把变量添加到对应key下的list中

add_to_collection(name,value)
Stores value in the collection with the given name.
Note that collections are not sets, so it is possible to add a value to a collection several times.
Args:
name: The key for the collection. The GraphKeys class contains many standard names for collections.
value: The value to add to the collection.

下面给出一个简单的demo,其目的是为了说明在collection中的变量是对象引用

sess=tf.InteractiveSession()
#初始化2个Variable
v1=tf.Variable(tf.constant(1))
v2=tf.Variable(tf.constant(1))
#设置保存到collection的name为collection
name='collection'
#把v1和v2添加到默认graph的collection中
tf.add_to_collection(name,v1)
tf.add_to_collection(name,v2)
#获得名为name的集合
c1 = tf.get_collection(name)
tf.global_variables_initializer().run()
print("the first collection: %s"%sess.run(c1))
#修改v1和v2的值,必须使用eval()或run()进行执行
tf.assign(v1,tf.constant(3)).eval()
tf.assign(v2,tf.constant(4)).eval()
#再次查看collection中的值
c2 = tf.get_collection(name)
print("the second collection: %s"%sess.run(c2))
print("the sum of collection: %s"%sess.run(tf.add_n(c2))
#resut:
#the first collection: [1, 1]
#the second collection: [3, 4]
#the sum of collection: 7

2.L2正则化
你可以简单理解L2为欧式距离,具体如何正则化权重,请参考neural-networks-and-deeplearning,这里我只进行简单的介绍。 loss0 表示原始的损失函数,后面的部分为L2正则化。

loss=loss0+λ2ww2

规范化的效果是让网络倾向于学习小一点的权重,大的权重只有能够给出代价函数第一项足够的提升时才被允许。换言之,规范化可以当做一种寻找小的权重和最小化原始的代价函数之间的折中。这两部分之前相对的重要性就由的值来控制了 λ 越小,就偏向于最小化原始代价函数,反之,倾向于小的权重。

在下一节,因为要使用L2正则化权重,所以使用collection来保存多个权重向量的L2值,在把它们累加即 λ2Σw2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值