python - 如何在 Keras/TensorFlow 的自定义层中应用内核正则化?
问题描述
考虑 TensorFlow 教程中的以下自定义层代码:
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
def build(self, input_shape):
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]),
self.num_outputs])
def call(self, input):
return tf.matmul(input, self.kernel)
如何tf.keras.regularizers.L1
对自定义层的参数应用任何预定义的正则化(例如)或自定义正则化?
解决方案
该add_weight
方法采用一个regularizer
参数,您可以使用该参数对权重应用正则化。例如:
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]), self.num_outputs],
regularizer=tf.keras.regularizers.l1_l2())
或者,要像其他内置层一样拥有更多控制权,您可以修改自定义层的定义并kernel_regularizer
为方法添加参数__init__
:
from tensorflow.keras import regularizers
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs, kernel_regularizer=None):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
self.kernel_regularizer = regularizers.get(kernel_regularizer)
def build(self, input_shape):
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]), self.num_outputs],
regularizer=self.kernel_regularizer)
有了它,你甚至可以在构造层时传递一个类似或参数的字符串,'l1'
它会被正确解析。'l2'
kernel_regularizer
推荐阅读
- javascript - 如何为组件定义未知道具警告?
- python - ModuleNotFoundError:没有名为“dnspython”的模块
- c - 多线程快速排序使最后 1/6 未排序
- netlogo - 我在 netlogo 中是否错误地使用了 n-of 函数?
- python - 为什么 Tkinter Canvas 小部件以错误的比例显示图像?
- android-studio - 在 Android Studio 的 Koltin 类中生成 Getter 和 Setter
- python - 将绝对偏差编程为线性程序
- authlogic - 未初始化的常量 Authlogic::Session::Validation
- kotlin - 如何检查 Kotlin BufferedReader 使用 { return something } 调用了方法 close()?
- reactjs - 如何使用 react-router-dom 将我的按钮路由到另一个页面?