python - Keras 权重约束同时包括偏差和核矩阵
问题描述
我的问题与 keras 如何实现权重约束有关,特别是在密集层中。我主要使用R
它的 keras 实现,所以我将在这里使用他们的符号,但如果有人在Python
.
据我所知,像 keras 这样的约束constraint_maxnorm()
可以应用于layer_dense()
带有参数的 akernel_constraint
或bias_constraint
,其中内核指的是没有偏置项的权重矩阵。但是,为了测试新方法,我认为能够将约束应用于完整权重矩阵也会很有用,其中偏差向量在权重矩阵中形成额外的行。这种约束的一个例子是将入射到神经元的权重向量的 L1 范数限制为 1(考虑到该神经元处的偏差也作为所述向量的一个元素)。
从这个意义上说,可以创建自定义约束,但问题是它们接收内核权重作为输入,而不是内核权重和偏差,并且输出也只是内核权重,而不是完整的权重矩阵。
是否可以在 keras 或 tensorflow 中实现这种同时影响内核和偏差的约束?从这个意义上说,能够创建同时接受内核权重和偏差作为输入的自定义约束,然后在内核和偏差处两次应用所需的约束就足够了。
解决方案
您可以通过定义一个自定义层来实现这一点,该层将权重和偏差组合成一个带有约束的张量。call
然后,您可以在 layers方法中拆分张量。例如:
library(tensorflow)
library(keras)
my_custom_constraint <- ...
MyCustomLayer(keras$layers$Layer) %py_class% {
initialize <- function(units = 32) {
super$initialize()
self$units <- units
}
build <- function(input_shape) {
self$combined_w_b <- self$add_weight(
shape = shape(tail(input_shape, 1) + 1, self$units)
initializer = "random_normal",
trainable = TRUE,
constraint = my_custom_constraint
)
}
call <- function(inputs) {
b <- self$combined_w_b[1, , drop = TRUE]
w <- self$combined_w_b[2:NULL,]
tf$matmul(inputs, w) + b
}
}
推荐阅读
- arrays - VAADIN 7:来自字节数组的图像只能工作一次
- python - Python 堆栈!特别是 stack.push(stack.pop))
- angularjs - AngularJS中的自定义orderBy没有绝对字符串比较?
- android - 同时滚动两个视图
- python - Python gettext i18n 具有相同语言的不同版本
- node.js - 我如何使用 nodejs 压缩 html
- uiscrollview - 在 addSubview 中调用具有动态 ScrollView ContentSize Autolayout 的 CustomView
- python - 将python连接到elasticsearch时出现连接错误
- sql-server - 用 SQL 透视查询中的默认值替换行中的空值
- python - 如果列字符串值是另一列的子字符串,如何替换它