环境: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格式来使用。
Keras模型转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下的模型文件。
使用TensorFlow模型
转换后我们当然要使用一下看是否转换成功,其实也就是TensorFlow的常见代码,如果只用过Keras的,可以参考一下:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np from tensorflow.python.platform import gfile import cv2 import os os.environ["CUDA_VISIBLE_DEVICES"] = "6" # img = cv2.imread(os.path.expanduser('/test_imgs/img_1.png')) # img = cv2.resize(img, dsize=(1000, 1000), interpolation=cv2.INTER_LINEAR) # img = img.astype(float) # img /= 255 # img = np.array([img]) # 初始化TensorFlow的session with tf.Session() as sess: # 读取得到的pb文件加载模型 with gfile.FastGFile("/path/to/save/model.pb",'rb') as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) # 把图加到session中 tf.import_graph_def(graph_def, name='') # 获取当前计算图 graph = tf.get_default_graph() # 从图中获输出那一层 pred = graph.get_tensor_by_name("dense_2/Sigmoid:0") # 运行并预测输入的img res = sess.run(pred, feed_dict={"input_1:0": img}) # 执行得到结果 pred_index = res[0][0] print('Predict:', pred_index)
在代码中可以看到,我们用到了上面得到的输入层和输出层的名称,但是在后面加了一个“:0”,也就是索引,因为名称只是指定了一个层,大部分层的输出都是一个tensor,但依然有输出多个tensor的层,所以需要制定是第几个输出,对于一个输出的情况,那就是索引0了。输入同理。
如果你输出res,会得到这样的结果:
('Predict:', array([[0.9998584]], dtype=float32))
这也就是为什么我们要取res[0][0]了,这个输出其实取决于具体的需求,因为这里我是对一张图做二分类预测,所以会得到这样一个结果
运行的结果如果和使用Keras模型时一样,那就说明转换成功了!
以上这篇使用Keras训练好的.h5模型来测试一个实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
Keras,训练,h5模型
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]