python – 使用TensorFlow重整化权重矩阵
发布时间:2020-12-16 22:54:36 所属栏目:Python 来源:网络整理
导读:我想在我的TensorFlow图中为几个权重矩阵添加一个最大范数约束,ala Torch的 renorm 方法. 如果任何神经元的权重矩阵的L2范数超过max_norm,我想缩减其权重,使其L2范数正好是max_norm. 使用TensorFlow表达这一点的最佳方式是什么? 解决方法 这是一个可能的实
我想在我的TensorFlow图中为几个权重矩阵添加一个最大范数约束,ala Torch的
renorm 方法.
如果任何神经元的权重矩阵的L2范数超过max_norm,我想缩减其权重,使其L2范数正好是max_norm. 使用TensorFlow表达这一点的最佳方式是什么? 解决方法
这是一个可能的实现:
import tensorflow as tf def maxnorm_regularizer(threshold,axes=1,name="maxnorm",collection="maxnorm"): def maxnorm(weights): clipped = tf.clip_by_norm(weights,clip_norm=threshold,axes=axes) clip_weights = tf.assign(weights,clipped,name=name) tf.add_to_collection(collection,clip_weights) return None # there is no regularization loss term return maxnorm 以下是您将如何使用它: from tensorflow.contrib.layers import fully_connected from tensorflow.contrib.framework import arg_scope with arg_scope( [fully_connected],weights_regularizer=max_norm_regularizer(1.5)): hidden1 = fully_connected(X,200,scope="hidden1") hidden2 = fully_connected(hidden1,100,scope="hidden2") outputs = fully_connected(hidden2,5,activation_fn=None,scope="outs") max_norm_ops = tf.get_collection("max_norm") [...] with tf.Session() as sess: sess.run(init) for epoch in range(n_epochs): for X_batch,y_batch in load_next_batch(): sess.run(training_op,feed_dict={X: X_batch,y: y_batch}) sess.run(max_norm_ops) 这将创建一个3层神经网络,并在每一层(阈值为1.5)对其进行最大范数正则化训练.我只是尝试过,似乎工作.希望这可以帮助!欢迎提出改进建议. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |