"Function" (神经网络编码器)

NetEncoder[{"Function",f,{d1,d2,,dn}]

表示一个编码器,使用自定义函数 f 编码一个输入,产生维数为 d1×d2××dn的输出张量.

更多信息

  • NetEncoder[{"Function",}] 通常用于定义神经网络的自定义预处理.
  • NetEncoder[][input] 把编码器应用于一个输入,并产生一个输出.
  • NetEncoder[][{input1,input2,}] 把编码器应用于一个输入列表,并产生一个输出列表.
  • 编码器 inputi 的输入是使得 f[inputi] 产生维度为 d1×d2××dn 数组的任何类型. 数组可以是一个 NumericArray 表达式或一个多维数字列表.
  • 在构建网络时,可通过指定 "port"->NetEncoder[] 将编码器附加到网络的输入端口上.
  • 参数
  • 支持以下参数:
  • "Pattern"None函数输入期待的模式
    "Batched"False函数是否应该提供批输入
    SaveDefinitionsTrue是否应自动保存与编码器运算相关的当前定义
    InitializationNone首次应用编码器时要计算的表达式
    ExcludedContextsAutomatic其符号不会以递归方式保存定义的上下文
    IncludedContextsAll其符号以递归方式保存定义的上下文
  • 参数 "Pattern"patt 指定编码器的输入应匹配模式 patt. "Pattern" None 表明不需要执行检查.
  • 当参数 "Batched" True,该函数一次应用于一批示例,而不是单独应用于每个示例.
  • 默认情况下,NetEncoder[{"Function",f,}] 保存计算 f 所需的所有符号的定义,并在第一次运行编码器时恢复这些定义. 可以使用选项 SaveDefinitionsInitializationExcludedContextsIncludedContexts 更改要保存的定义的选择.

范例

打开所有单元关闭所有单元

基本范例  (1)

创建一个函数编码器,接受一个标量并产生这些标量长度为 2 的列表:

把编码器应用于一个标量:

把编码器应用于标量列表:

范围  (2)

创建一个自定义编码器,编码弧度输入作为它们的笛卡尔坐标:

把编码器应用于角度列表:

创建一个返回正边界整数序列的编码器:

使用带有 EmbeddingLayer 的编码器:

参数  (3)

"Pattern"  (1)

创建一个函数编码器,检查输入是否包含实数:

"Batched"  (1)

创建一个编码器,将函数一次性应用到一批输入:

与将函数单独应用到每个输入的编码器比较:

SaveDefinitions  (1)

默认情况下,保存运行编码器所需的定义:

清除定义:

首次应用编码器时,将恢复定义:

可用 SaveDefinitionsFalse 禁用这种行为:

清除定义:

无法恢复定义:

可能存在的问题  (1)

当参数为 "Pattern"None,输入是单个示例还是示例列表是不明确的. 因此,在提供示例列表的情况下,该函数会被额外调用: