相关链接:
MMdnn
Keras README
TensorFlow README
逐步转换(用于调试):
1.将模型(包括架构和权重)从Keras转换为IR
例子:
把cnn.h5和cnn.json转换生成了tf-cnn.json,tf-cnn.npy,tf-cnn.pb
命令: mmtoir -f keras -d tf-cnn -n cnn.json -w cnn.h5
转化成功:
可能出现的错误:
这个错误是因为 cnn.h5文件和cnn.json文件不匹配导致的。即不是同一套代码生成的。
2.将模型从IR转换为Tensorflow代码段
例子:mmtocode -f tensorflow --IRModelPath tf-cnn.pb --IRWeightPath tf-cnn.npy --dstModelPath tf-cnn.py
这个时候生成了tf-cnn.py
注意:会遇到这个问题,对照下面图片修改,3个地方即可。注意改axis = 1
3.将模型从IR转换为Tensorflow模型
例子: mmtomodel -f tensorflow -in tf-cnn.py -iw tf-cnn.npy -o tf_cnn --dump_tag SERVING
这时候生成了tf_cnn文件夹,tf_cnn文件夹里面有这variables和saved_model.pb两个文件
4.重用转换后的Tensorflow模型
如果要重新训练转换后的模型,可以在转换后的代码文件中将变量is_train从“False”更改为“True”,然后使用“–dump_tag TRAINING”将其转储。
export_dir = "./tf_resnet152"
with tf.Session(graph=tf.Graph()) as sess:
tf.saved_model.loader.load(sess, [tf.saved_model.tag_constants.TRAINING], export_dir)
x = sess.graph.get_tensor_by_name('input:0')
y = sess.graph.get_tensor_by_name('xxxxxx:0')
......
_y = sess.run(y, feed_dict={x: _x})
例子:mmtomodel -f tensorflow -in tf-cnn.py -iw tf-cnn.npy -o tf_cnn --dump_tag TRAINING
5.MMdnn的局限性:
把keras的CNN部分转换完后,后面加上RNN