TensorFlow 核心运算符
以下是 TensorFlow 核心操作的详尽列表, 具有“选择 TensorFlow 操作”功能的 LiteRT 运行时。
raw_ops.TokenizerFromLogits
TensorFlow Text 和 SentencePiece 运算符
以下 TensorFlow 文字和 支持 SentencePiece 运算符 如果您使用 Python API 进行转换并导入这些库,
TF.Text 运算符:
CaseFoldUTF8
ConstrainedSequence
MaxSpanningTree
NormalizeUTF8
NormalizeUTF8WithOffsetsMap
RegexSplitWithOffsets
RougeL
SentenceFragments
SentencepieceOp
SentencepieceTokenizeOp
SentencepieceTokenizeWithOffsetsOp
SentencepieceDetokenizeOp
SentencepieceVocabSizeOp
SplitMergeTokenizeWithOffsets
UnicodeScriptTokenizeWithOffsets
WhitespaceTokenizeWithOffsets
WordpieceTokenizeWithOffsets
SentencePiece 运算符:
SentencepieceGetPieceSize
SentencepiecePieceToId
SentencepieceIdToPiece
SentencepieceEncodeDense
SentencepieceEncodeSparse
SentencepieceDecode
以下代码段展示了如何使用上述运算符转换模型:
import tensorflow as tf
# These imports are required to load operators' definition.
import tensorflow_text as tf_text
import sentencepiece as spm
converter = tf.lite.TFLiteConverter.from_keras_model(your_model)
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS
]
model_data = converter.convert()
在运行时,还需要将 TensorFlow Text 或 SentencePiece 库导入最终应用或二进制文件。
用户定义的运算符
如果您创建了自己的 TensorFlow,
运算符,还可以将
并列出包含这些特征的必要运算符,
experimental_select_user_tf_ops
如下所示:
import tensorflow as tf
ops_module = tf.load_op_library('./your_ops_library.so')
converter = tf.lite.TFLiteConverter.from_saved_model(your_model)
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS
]
converter.target_spec.experimental_select_user_tf_ops = [
'your_op_name1',
'your_op_name2'
]
model_data = converter.convert()
在运行时,还需要将运算符库链接到 最终的应用或二进制文件。
将 TensorFlow 核心运算符添加到许可名单中。
如果您遇到上面没有 TensorFlow 核心运算符的情况 许可列表后,您可以向用户提出功能请求, 此处,并附上 TensorFlow 核心运算符,未在允许列表中列出。
您还可以通过源代码创建自己的拉取请求。例如,如果
您想在许可名单中添加 raw_ops.StringToNumber
操作,
有 3 个地方更新,就像这样
commit。
(1) 将运营商内核源代码添加到 portable_extended_ops_group2
BUILD 规则中。
filegroup(
name = "portable_extended_ops_group2",
srcs = [
...
+ "string_to_number_op.cc",
...
],
)
为了在
tensorflow/core/kernels
目录中,您可以搜索源代码位置,
它包含以下带运算符名称的内核声明:
REGISTER_KERNEL_BUILDER(Name("StringToNumber") \
.Device(DEVICE_CPU) \
.TypeConstraint<type>("out_type"), \
StringToNumberOp<type>)
如果 tensorflow/core/kernels
目录下有任何头文件,
是运营商内核源代码中必需的代码,则需要将头文件
复制到 portable_extended_ops_headers
BUILD 规则中,如下所示:
filegroup(
name = "portable_extended_ops_headers",
srcs = [
...
+ "string_util.h",
...
],
)
(2) 将运营商名称添加到许可名单中。
许可名单在
tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc
。TensorFlow 核心
需要列出运营商名称,才能通过“Select TF”(选择 TF)
选项。
static const std::set<std::string>* allowlisted_flex_ops =
new std::set<std::string>({
...
+ "StringToNumber",
...
});
由于以上列表是按字母顺序排序的,因此务必将 放在正确的位置上
(3) 将运营商名称添加到此指南页面。
为了向其他开发者展示该运算符包含的运营商,本指南页面应
也会随之更新此页面位于
tensorflow/lite/g3doc/guide/op_select_allowlist.md
。
## TensorFlow core operators
The following is an exhaustive list of TensorFlow core operations that are
supported by LiteRT runtime with the Select TensorFlow Ops feature.
...
+* `raw_ops.StringToNumber`
...
由于以上列表是按字母顺序排序的,因此务必将 放在正确的位置上