har*_*nen 6 python neural-network deep-learning tensorflow
一些TensorFlow层,如tf.layers.dense和tf.layers.conv2d,接受一个kernel_constraint
参数,根据tf api docs文档实现了
由优化器更新后应用于内核的可选投影函数(例如,用于实现层权重的范数约束或值约束).
在[1]中,Salimans等人.提出了一种神经网络归一化技术,称为权重归一化,它对网络层的权重向量进行归一化,与例如批量归一化[2]形成对比,后者归一化流经该层的实际数据批量.在某些情况下,权重归一化方法的计算开销较低,并且还可以在使用批量归一化不可行的情况下使用.
我的问题是:是否可以使用上述TensorFlow层实现权重标准化kernel_constraint
?假设x
是一个带有形状的输入(batch, height, width, channels)
,我想我可以按如下方式实现它:
x = tf.layers.conv2d(
inputs=x,
filters=16,
kernel_size=(3, 3),
strides=(1, 1),
kernel_constraint=lambda kernel: (
tf.nn.l2_normalize(w, list(range(kernel.shape.ndims-1)))))
Run Code Online (Sandbox Code Playgroud)
什么是验证/使我的解决方案无效的简单测试用例?
[1] SALIMANS,蒂姆; KINGMA,Diederik P.体重标准化:一种简单的重新参数化,可加速深层神经网络的训练.在:神经信息处理系统的进展.2016.p.901-909.
[2] IOFFE,谢尔盖; SZEGEDY,Christian.批量标准化:通过减少内部协变量偏移来加速深度网络训练.arXiv preprint arXiv:1502.03167,2015.
尽管有标题,Salimans 和 Kingma 的论文建议将权重范数与其方向分离,而不是实际标准化权重(即将其 l2 范数设置为您建议的 1)。
如果您想验证您的代码是否具有预期效果,即使它不是他们建议的效果,您可以获取模型的权重并检查其范数。在伪代码中:
model = tf.models.Model(inputs=inputs, outputs=x)
weights = model.get_weights()[i] # checking the weights of the i-th layer
flat_weights = weights.flatten()
import numpy as np
print(np.linalg.norm(flat_weights, 2))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1379 次 |
最近记录: |