Команды, которые я использую для построения тензорного потока с пользовательским оператором следующие, порядок сохраняется:
Код: Выделить всё
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package --local_ram_resources=4096 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
pip install /tmp/tensorflow_pkg/tensorflow-2.5.3-cp36-cp36m-linux_x86_64.whl
bazel build --config=opt //tensorflow/core/user_ops:Resampler.so --local_ram_resources=6000 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"
Код: Выделить всё
load(
"//tensorflow/core/platform:rules_cc.bzl",
"cc_library",
)
load(
"//tensorflow:tensorflow.bzl",
"tf_copts",
)
package(
default_visibility = [
"//tensorflow/core:__pkg__",
],
licenses = ["notice"], # Apache 2.0
)
cc_library(
name = "user_ops_op_lib",
srcs = glob(["*.cc"]),
hdrs = glob(["*.h"]),
copts = tf_copts(),
linkstatic = 1,
visibility = ["//tensorflow/core:__pkg__"],
deps = ["//tensorflow/core:framework"],
alwayslink = 1,
)
load("//tensorflow:tensorflow.bzl", "tf_custom_op_library")
tf_custom_op_library(
name = "Resampler.so",
Обратите внимание, что пользовательский оператор также содержит следующий регистрационный код в Resampler.cc:
Код: Выделить всё
REGISTER_OP("Resample")
.Attr("T: {float, int32}")
.Input("input_image: T")
.Input("transformation: float")
.Input("output_size: int32")
.Output("output_image: T")
...
#define REGISTER_CPU(T) \
REGISTER_KERNEL_BUILDER( \
Name("Resample").Device(DEVICE_CPU).TypeConstraint("T"), \
ResamplerOp);
Подробнее здесь: https://stackoverflow.com/questions/786 ... s-no-attri