CompiledLayer
CompiledLayer[func]
表示一个网络层,执行的计算由可编译函数 func 定义.
CompiledLayer[func,gradientfunc]
指定允许在 NetTrain 中使用该层的梯度传播函数.
更多信息和选项
- CompiledLayer 通常用于创建一个网络层,用于计算其他层无法实现的自定义函数.
- CompiledLayer[func],如 CompiledLayer[func,Automatic],试图自动对 func 进行微分产生梯度传播函数. CompiledLayer[func,None] 禁止自动微分.
- 函数 func 和 gradientfunc 必须是适宜于由 FunctionCompile 处理的有效的 Function 对象(例如,必须用 Typed 和 TypeSpecifier 构建它们的参数说明).
- 目前,CompiledLayer 只支持单个输入和输出端口.
- 函数 func 表示该层执行的计算,也称为前向传播.
- 函数 func 必须以单个数组作为输入(表示网络层的输入),并且必须产生单个数组作为输出(表示网络层的输出).
- 函数 gradientfunc 用于根据输出梯度计算输入梯度,也称为反向传播.
- 函数 gradientfunc 应至少采用两个数组作为输入,分别表示网络层的输入和输出梯度. 或者,也可将之前计算所得的输出作为第三个参数给出. 函数 gradientfunc 的结果是一个表示网络层的输入梯度的数组.
- 可将函数 func 定义为接受一个样例或一批样例. 可用 CompiledLayer[func,"Input"…] 指定输入的秩,以消除这两种情况之间的歧义(通过与 func 中定义的秩进行比较). func 和 gradientfunc 应都接受一个样例,或都接受一批样例.
- CompiledLayer 开放下列端口以便用在 NetGraph 等中:
-
"Input" 一个数组 "Output" 一个数组 - 当给出 NumericArray 作为输入时,输出也将是 NumericArray.
- Options[CompiledLayer] 给出构建网络层的默认选项的列表. Options[CompiledLayer[…]] 给出在一些数据上运行网络层的默认选项列表.
- Information[CompiledLayer[…]] 给出关于该网络层的报告.
- Information[CompiledLayer[…],prop] 给出 CompiledLayer[…] 的属性 prop 的值. 可能的属性与 NetGraph 相同.
- CompiledLayer 尚未编译为 GPU 架构. 当设置 TargetDevice"GPU" 时,训练和推理都将在 CPU 上进行.
范例
打开所有单元关闭所有单元基本范例 (2)
范围 (3)
创建带有梯度传播函数的 CompiledLayer:
有了梯度传播函数,可用该网络层计算梯度及在 NetTrain 中使用:
在梯度传播函数中指定第三个参数,以便在计算梯度时重复使用之前计算所得的输出:
创建一个 CompiledLayer,对一批元素进行处理. 对于一个函数,对秩为 2 的数组进行反向排序:
在 CompiledLayer 中指定秩为 1 的输入. 该函数被解释为对批数据进行处理:
当以这种方式使用时,CompiledLayer 可以使一个批次中的不同元素彼此相互作用,一般的网络层无法做到这一点.
可能存在的问题 (5)
在第二个参数中指定梯度传播函数时,必须满足许多严格的兼容性约束条件:
网络层和梯度函数产生的输出的形状应只取决于输入的形状,而不是输入的值. 创建一个函数,其输出的形状取决于输入的值:
在推断形状时,CompiledLayer 在测试输入上运行函数,以获得预期的输出的形状:
如果输出的形状与预期的形状一致,则认为成功完成了接下来的计算:
为了提高速度,CompiledLayer 禁用了通常编译函数使用的完整性检查. 这可能导致错误的代码,引发意外行为,甚至导致内核崩溃. 以一个访问其输入数组范围之外的元素的函数为例:
FunctionCompile 生成的 CompiledCodeFunction 给出了一条出错消息:
在没有查看数组的范围的情况下,CompiledLayer 运行函数,从而导致未定义错误:
文本
Wolfram Research (2020),CompiledLayer,Wolfram 语言函数,https://reference.wolfram.com/language/ref/CompiledLayer.html (更新于 2021 年).
CMS
Wolfram 语言. 2020. "CompiledLayer." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2021. https://reference.wolfram.com/language/ref/CompiledLayer.html.
APA
Wolfram 语言. (2020). CompiledLayer. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/CompiledLayer.html 年