TensorFlow好乱,各种版本,各种API,保存的模型格式都有好多种,发展得太快,已经扯到蛋了。
我就是想加载一个模型,然后看一看网络结构,就这么简单的事情,真是吐了。
1.用了TensorFlow2.3,因为它能够打开h5格式的模型,但是它的API变化很大,官网教程看得稀里糊涂,没什么章法,还是要到博客上去找,这里有一个取巧的办法,可以把TensorFlow2当作TensorFlow1用
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
2.TensorFlow里模型保存至少有四种格式,TensorFlow1有三种,TensorFlow2有两种
https://my.oschina.net/u/4357584/blog/3345911
https://geektutu.com/post/tf2doc-ml-basic-save-model.html
其中saved_model格式两个版本都支持,我下载的一个模型也是这个格式的,按照上边博客的方法
tf.keras.experimental.export_saved_model(model, saved_model_path)
会提示没有export_saved_model这个方法,去官网查了一下TF2.3的API,发现确实没有这个方法,TF2.0的时候是有这个方法的(你更新这么快,然后官网教程这么垃圾,叫人怎么学啊)
3.SavedModel格式的介绍
https://www.tensorflow.org/guide/saved_model?hl=zh-cn
按照官网上的教程,竟然work了
#mobilenet_save_path = './container_vol/ssd' 这里只需要写到文件夹就行了,不用写到文件
loaded = tf.saved_model.load(mobilenet_save_path)
4.如何现实模型结构
因为pytorch里可以直接把网络结构打印出来,但是TensorFlow里貌似没有这样的函数,但是它有一个更为强大的工具TensorBoard,看看能不能通过TensorBoard来查看
https://github.com/tensorflow/tensorboard
通过阅读上边的说明,发现要使用TensorBoard必须连接一个log文件
Before running TensorBoard, make sure you have generated summary data in a log directory by creating a summary writer:
# sess.graph contains the graph definition; that enables the Graph Visualizer.
file_writer = tf.summary.FileWriter('/path/to/logs', sess.graph)
但是也没说明白到底要不要有数据,而且TensorFlow2里没有session模块了(https://blog.csdn.net/yuan_xiangjun/article/details/105469721),怎么能把加载好的模型的计算图弄出来呢?
5.TF1和TF2的区别
https://zhuanlan.zhihu.com/p/70232196
看来TF2在graph上边改动很大,因为TensorFlow1的教程比较多,所以放弃TF2了,重新下载一个docker镜像,在TF1上弄。