jupyter notebook
# 打开variable_vs_get_variable.ipynb
jupyter notebook
# 打开basic.ipynb
jupyter notebook
# 打开dataset.ipynb
注意:第8个cell会死循环,需要我们手动通过"kenerl->interrupt"停止。
jupyter notebook
# 打开batch-norm.ipynb
jupyter notebook
# 打开time-series.ipynb
python lstm-mnist.py
首先训练:
python cnn_mnist.py
然后运行TensorBoard(不用等训练结束):
deep_learning_theory_and_practice/src/ch6$ tensorboard --logdir mnist_convnet_model/
# 然后用浏览器打开命令行里出现的链接,可能类似于http://lili-Precision-7720:6006
python premade_estimator.py
cd serving
python save_variables.py
我们指定保存的路径是"tf_save_variables/model.ckpt",最终会生成一个目录tf_save_variables,它包含如下内容:
$ tree tf_save_variables/
tf_save_variables/
├── checkpoint
├── model.ckpt.data-00000-of-00001
├── model.ckpt.index
└── model.ckpt.meta
python view_ckpt.py
python restore_graph.py
python linear_regression_save_model.py
SavedModel API把模型保存到lr_model目录:
$ tree lr_model
lr_model
└── 1
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
$ saved_model_cli show --dir lr_model/1
The given SavedModel contains the following tag-sets:
serve
接着看serve这个tag_set:
$ saved_model_cli show --dir lr_model/1 --tag_set serve
The given SavedModel MetaGraphDef contains SignatureDefs with the following keys:
SignatureDef key: "predict"
接着查看一个signature:
$ saved_model_cli show --dir lr_model/1 --tag_set serve --signature_def predict
The given SavedModel SignatureDef contains the following input(s):
inputs['x'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 1)
name: x:0
The given SavedModel SignatureDef contains the following output(s):
outputs['y'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 1)
name: add:0
Method name is: tensorflow/serving/predict
请参考官网文档,不过作者更建议使用Docker来运行ModelServer,更多内容参考在Docker中使用Tensorflow Serving。不过下面为了和原书保持一致,还是假设直接安装了ModelServer,如果读者使用Docker,那么请参考上网启动服务。
(py3.6-env) lili@lili-Precision-7720:~/codes/deep_learning_theory_and_practice/src/ch6/serving$ tensorflow_model_server --port=9000 --model_name=lr --model_base_path=/home/lili/codes/deep_learning_theory_and_practice/src/ch6/serving/lr_model
....
最终应该输出类似"I tensorflow_serving/model_servers/main.cc:323] Running ModelServer at 0.0.0.0:9000 ..."
的信息,则说明启动成功。
注意:上面的命令一定要把--model_base_path设置成lr_model的绝对路径,请读者更加自己的情况修改。
注意:我们首先需要安装Python clinet:
pip install tensorflow-serving-api
然后再运行:
python linear_regression_client.py
首先需要把jar包安装,读者也可以自己打包,参考这个文章,这个过程相对麻烦,还需要Tensorflow源代码)。作者是用到比较老的1.5.0版本的Tensorflow和gRPC 1.4编译的,不过似乎ProtoBuffer和gRPC还是比较稳定的,在新的版本的Tensorflow Serving一般也是可以使用的。如果不行,那么只能读者自己编译了。当然如果输入数据不大,建议使用新版本Tensorflow Serving的REST接口。
$ cd tensor-serving-client-test
$ mvn install:install-file -Dfile=tensorflow-serving-java-client-tf-1.5.0-SNAPSHOT.jar -DgroupId=com.easemob.ai.robotapi \
-DartifactId=tensorflow-serving-java-client -Dversion=tf-1.5.0-SNAPSHOT -Dpackaging=jar
$ mvn package
新版的Tensorflow Serving提供REST接口,这样客户端调用更加方便,如果输入或者输出需要传输的数据特别大,gRPC的方式可能有优势,但是REST接口简单易用便于调试。因为本书基于Tensorflow 1.6.0,因此没有介绍这部分内容,感兴趣的读者请参考官方文档。
python linear_regression_dataset_save_model.py
运行后模型会保存在lr_model_ds,如果要使用这个模型请参考前面的"启动Model Server服务",需要修改"model_name"和"model_base_path"两个参数。
python linear_regression_keras_save_model.py
python pytorch-to-onnx.py
最终保存的模型为lr.onnx。
首先需要安装onnx-tensorflow:
pip install onnx-tf
然后运行:
python onnx-to-tf.py