tensorflow - 创建自定义图层
解决方案
一般来说,这可以通过tf.custom_gradient
. 这允许您编写一个前向函数以及一个自定义梯度函数,该函数取决于“传入”梯度(从模型更下方的层)以及前向函数。
有了它,你可以创建一个这样的函数:
@tf.custom_gradient
def sign_with_grad(x):
output = tf.sign(x)
def grad_fn(dy):
check_range = tf.where(tf.less_equal(tf.abs(x), 1.), 1., 0.)
return dy*check_range
return output, grad_fn
在这里,我们编写了一个自定义梯度,它简单地穿过上面的层——除了它将输入超出范围 [-1, 1] 的所有元素归零。我们返回正向函数的结果(符号)以及梯度函数本身。装饰者负责处理其余部分。
请注意,我没有检查代码是否运行——如果没有,请告诉我!特别是,less_equal
and 或where
检查可能需要显式广播——例如使用tf.ones_like(x)
代替1.
(对于 0 相同)。
推荐阅读
- sql - SAS:PROC SQL:如何在不创建新列的情况下将字符格式(dd/mm/yyyy)读取为日期格式?
- database - OneToOne 关系中的孤儿
- android - 如何更改ActionBar上的溢出按钮(3个垂直点)和ToolbarItem的文本颜色?
- annotations - 大型数据集的图像标注
- java - Javax.Validation - 允许 null 但如果值不是则验证
- javascript - 在 firebase 函数中使用 google apis
- javascript - Vue 组件 $emit 触发两次
- c# - 后台工作人员不会在 c# WinForm 应用程序中收到 CancellationPending
- r - ggarrange in for 循环和 pdf 中的多个页面
- javascript - 未捕获的类型错误:无法读取 null 的属性“拆分”