主要工作为:
:* 安装并配置Python 3.5
:* 在Python中安装并配置TensorFlow库
获取pb文件和ckpt文件:
#generate model.pb from model import KerasModel import keras.backend as K from tensorflow.python.training import saver model = KerasModel() model.load_weights('save_51.h5') #use the model from round 52 gDef = K.get_session().graph_def with open('model.pb', 'wb') as f: f.write(gDef.SerializeToString()) #generate model.ckpt saver.Saver().save(K.get_session(), 'model.ckpt')
from model import KerasModel冻图命令如下,在cmd中执行,需要预先将freeze_graph.py拷贝至执行根目录下。前四个参数是强制的,后一个参数缺省值是False,由于我们的pb文件是二进制,所以要设置为True,否则无法decode。所有的参数都不能有任何引号包括。
import keras python freeze_graph.backend as Kpy --input_graph=model.pb --input_checkpoint=model.ckpt --output_graph=asrModel.pb --output_node_names=dense_2/Softmax --input_binary=True
model = KerasModel()为得到output_node_names,我们可以在model.py中添加一句代码,然后找到相应输出即可。
model .load_weights.. #x = Dropout(DROP_RATE)(x) x = Dense(24, activation='save_51.h5softmax') (x) print(x.name) #use the add this line model from round 52= Model(input=In, output=x) ...
gDef = K最后部署到android工程里就非常轻松。但是结果略有点鬼畜,我们训练了这么久的模型,最终得到了一个人工智障。在实验室环境下,如果很认真地发音,那么识别准确率在百分之九十以上;只要说得稍微随便一些,识别基本上就会错误,这和此前的模型的效果相去甚远,多半是训练过程出了问题。助教和我们排查了一系列问题,包括学习轮次、批次样本数目、是否过学习等等,结果并没有发现设置不正常的地方。又检查了sox工作是否正常,发现样本在加载后的确都被正常修饰了,按理来说训练效果应该很好。我们修改脚本,从第十轮的文件开始跑训练,发现第十轮的accuracy虽然已经0.get_session()9+,但是val_acc也就是test出的accuracy却只有0.graph_def064,这个值直到训练的最后基本都没有变化过,甚至还降低了,这非常令人困惑,需要之后再继续探究原因了。
with open('model.pb', 'wb') as f<gallery>文件: fLow_Accuracy.write(gDef.SerializeToString())png|极低的val_acc #generate model.ckpt from tensorflow.python.training import saver saver.Saver().save(K.get_session(), 'model.ckpt') 冻图命令如下,在cmd中执行,需要预先将freeze_graph.py拷贝至执行根目录下。前四个参数是强制的,后一个参数缺省值是False,由于我们的pb文件是二进制,所以要设置为True,否则无法decode。所有的参数都不能有任何引号包括。</gallery>
python freeze_graph.py --input_graph=model.pb --input_checkpoint=model.ckpt --output_graphSummary=asrModel.pb --output_node_names=dense_2/Softmax --input_binary=TrueTensorFlow这个深度学习的工具,我也不是第一次听说了,去年在做一个小项目的编写的时候就了解到这个工具,但是当时觉得深度学习的门槛很高,也就没有深入了解。这次体验最大的收获,就是发现了TensorFlow给我们带来的无限可能性与易用性。谷歌出品,必属精品。虽然关于人工神经网络的理论必定是高深的,但是可用于实际应用的模型却并没有特别高的门槛。当硬件开发都走向了高中生初中生的课堂的时候,深度学习也即将大规模进入大学研究者的课题了,现在可能还处于起步阶段,未来发展一定迅速。仅仅就我们专业来说,在医学影像识别上,神经网络必然成为下一个热点,而系统神经科学的研究就更加不用说了,人工智能与神经科学本来就是相互促进的。神经网络的研究与应用值得我们去关注。
得到output_node_names,我们可以在model.py中添加一句代码,然后找到相应输出即可。当然,还要清楚地认识到,仅仅有工具、会用工具是不行的。通用型的神经网络以外的部分才是最核心的构建——将学习对象的数据转化为神经网络能够处理的张量的算法、使用何种神经网络的结构才能充分解析一类数据的特征、如何选取合适的输入与网络来匹配有限的算力。甚至说,仅仅做到将数据转化并输入神经网络也是不够的,如果算法不够好,可能会丢失大量的信息,学习再久也没有任何意义;学习的参数调试得不恰当,也会导致学习没有成效,有时候就算没有显性的错误,也可能导致效果极差,这一次我们训练的模型就是一个例子。神经网络提供的可能性太多了,所以使用的它的难度也绝对不小,这对我们来说才是真正的挑战。
... #x = Dropout(DROP_RATE)(x) x = Dense(24, activation='softmax')(x) print(x.name) #add this line model = Model(input=In, output=x)...当然,还有点非主题的东西,就是关于python的。说实话,python无论是写起来还是读起来都太舒服了,代码不冗余,接近自然语言,尤其是强制缩进,简直是强迫症的福音,我觉得可以将它作为主力语言去学习一下了。