Keras
tensorflow
- yay bazelisk
pip install -U pip six numpy wheel setuptools mock
pip install -U keras_applications --no-deps
pip install -U keras_preprocessing --no-deps
# tf 2
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
# tf 1.15
wget https://github.com/tensorflow/tensorflow/archive/v1.15.0.tar.gz
tar zxvf v1.15.0.tar.gz
only for tf 2
wget https://git.archlinux.org/svntogit/community.git/plain/trunk/Add-grpc-fix-for-gettid.patch\?h\=packages/tensorflow -O Add-grpc-fix-for-gettid.patch
patch -Np1 -i Add-grpc-fix-for-gettid.patch
export TF_IGNORE_MAX_BAZEL_VERSION=1 export TF_NEED_CUDA=1 ./configure
for atf 1.15
echo 0.26.1 > .bazelversion
this produce .tf_configure.bazelrc
build --action_env PYTHON_BIN_PATH="/lab/gianoobserver/lib/bin/python" build --action_env PYTHON_LIB_PATH="/lab/gianoobserver/lib/lib/python3.8/site-packages" build --python_path="/lab/gianoobserver/lib/bin/python" build:xla --define with_xla_support=true build --config=xla build --action_env CUDA_TOOLKIT_PATH="/usr/local/cuda" build --action_env TF_CUDA_COMPUTE_CAPABILITIES="6.1" build --action_env LD_LIBRARY_PATH="/lab/dnn/lib/lib" build --action_env GCC_HOST_COMPILER_PATH="/usr/bin/gcc-8" build --config=cuda build:opt --copt=-march=native build:opt --copt=-Wno-sign-compare build:opt --host_copt=-march=native build:opt --define with_default_optimizations=true test --flaky_test_attempts=3 test --test_size_filters=small,medium test --test_tag_filters=-benchmark-test,-no_oss,-gpu,-oss_serial test --build_tag_filters=-benchmark-test,-no_oss,-gpu build --action_env TF_CONFIGURE_IOS="0"
compile
bazel build //tensorflow/tools/pip_package:build_pip_package # ??? bazelisk \ build --config=opt \ //tensorflow:libtensorflow.so \ //tensorflow:libtensorflow_cc.so \ //tensorflow:install_headers \ //tensorflow/tools/pip_package:build_pip_package ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg pip install /tmp/tensorflow_pkg/tensorflow*.whl
from keras to opencv
Export protobuf
prereq
bazel build tensorflow/python/tools:freeze_graph
import argparse
ap = argparse.ArgumentParser()
ap.add_argument('--input', required=True)
ap.add_argument('--output', default="/tmp/model/ckpt")
args = ap.parse_args()
from keras import backend as K
from keras.models import load_model
import tensorflow as tf
K.set_learning_phase(0)
# create model and load weights or ...
# model = create_model()
# model.load_weights(args.input)
# ... load h5 model
load_model(args.input)
saver = tf.train.Saver()
saver.save(K.get_session(), args.default)
print("Output node needed in freeze_graph: %s" % model.output.op.name)
print("Model created in: %s" % args.output)
result
/tmp/model ├── checkpoint ├── ckpt.data-00000-of-00001 ├── ckpt.index └── ckpt.meta
freeze
bazel-bin/tensorflow/python/tools/freeze_graph \ --input_meta_graph=/tmp/model/ckpt.meta \ --input_checkpoint=/tmp/model/ckpt \ --output_graph=frozen_graph.pb \ --input_binary \ --output_node_names="previous output node name"