环境:python 3.6 +opencv3+Keras
训练集:MNIST
下面划重点:因为MNIST使用的是黑底白字的图片,所以你自己手写数字的时候一定要注意把得到的图片也改成黑底白字的,否则会识别错(至少我得到的结论是这样的 ,之前用白底黑字的图总是识别出错)
注意:需要测试图片需要为与训练模时相同大小的图片,RGB图像需转为gray
代码:
import cv2 import numpy as np from keras.models import load_model model = load_model('fm_cnn_BN.h5') #选取自己的.h模型名称 image = cv2.imread('6_b.png') img = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY) # RGB图像转为gray #需要用reshape定义出例子的个数,图片的 通道数,图片的长与宽。具体的参加keras文档 img = (img.reshape(1, 1, 28, 28)).astype('int32')/255 predict = model.predict_classes(img) print ('识别为:') print (predict) cv2.imshow("Image1", image) cv2.waitKey(0)
补充知识:keras转tf并加速(1)Keras转TensorFlow,并调用转换后模型进行预测
由于方便快捷,所以先使用Keras来搭建网络并进行训练,得到比较好的模型后,这时候就该考虑做成服务使用的问题了,TensorFlow的serving就很合适,所以需要把Keras保存的模型转为TensorFlow格式来使用。
Ker本文来源gao@daima#com搞(%代@#码@网&as模型转TensorFlow
其实由于TensorFlow本身以及把Keras作为其高层简化API,且也是建议由浅入深地来研究应用,TensorFlow本身就对Keras的模型格式转化有支持,所以核心的代码很少。这里给出一份代码:https://github.com/amir-abdi/keras_to_tensorflow,作者提供了一份很好的工具,能够满足绝大多数人的需求了。原理很简单:原理很简单,首先用 Keras 读取 .h5 模型文件,然后用 tensorflow 的 convert_variables_to_constants 函数将所有变量转换成常量,最后再 write_graph 就是一个包含了网络以及参数值的 .pb 文件了。
如果你的Keras模型是一个包含了网络结构和权重的h5文件,那么使用下面的命令就可以了:
python keras_to_tensorflow.py --input_model="path/to/keras/model.h5" --output_model="path/to/save/model.pb"
两个参数,一个输入路径,一个输出路径。输出路径即使你没创建好,代码也会帮你创建。建议使用绝对地址。此外作者还做了很多选项,比如如果你的keras模型文件分为网络结构和权重两个文件也可以支持,或者你想给转化后的网络节点编号,或者想在TensorFlow下继续训练等等,这份代码都是支持的,只是使用上需要输入不同的参数来设置。
如果转换成功则输出如下:
begin==================================================== I1229 14:29:44.819010 140709034264384 keras_to_tf.py:119] Input nodes names are: [u'input_1'] I1229 14:29:44.819385 140709034264384 keras_to_tf.py:137] Converted output node names are: [u'dense_2/Sigmoid'] INFO:tensorflow:Froze 322 variables. I1229 14:29:47.091161 140709034264384 tf_logging.py:82] Froze 322 variables. Converted 322 variables to const ops. I1229 14:29:48.504235 140709034264384 keras_to_tf.py:170] Saved the freezed graph at /path/to/save/model.pb
这里首先把输入的层和输出的层名字给出来了,也就是“input_1”和“dense_2/Sigmoid”,这两个下面会用到。另外还告诉你冻结了多少个变量,以及你输出的模型路径,pb文件就是TensorFlow下的模型文件。