keras是深度学习简单易上手的python第三方库。在实际应用中,常常需要将keras训练好的深度学习模型生成独立于python环境的文件,供不会python的人或未安装python环境的设备调用。在windows环境下比较好的选择是生成.exe文件。虽然在matlab中可以采用https://zhuanlan.zhihu.com/p/92081119的方法直接调用python,但是当python中导入一些第三方库时,该调用方法常常产生问题,这些问题很难很好地解决。因此,将keras训练好的深度学习模型生成独立于python环境的EXE文件,供matlab调用,是一个非常好的选择。本文对此进行了成功的探索。本文主要内容如下

  1. 利用keras构建一个简单的深度学习模型
  2. 利用PyInstaller将python文件编译成.exe文件
  3. .exe文件功能测试
  4. matlab中调用该.exe文件
    由于本文篇幅较长,分上下两部分,上篇主要介绍内容1和内容2. 下篇介绍内容3和内容4,下篇的链接为https://blog.csdn.net/graceful_snow/article/details/103228785

一、 利用keras构建一个简单的深度学习模型

输入变量具有两个特征,输出变量具有一个特征,数据存在data.mat文件中。利用keras构建一个单隐含层的神经网络,进行简单的回归预测,并将训练好的神经网络参数存在bp.h5文件中,具体代码如下

import numpy as np
import tensorflow as tf
import keras
from keras.models import Sequential
from keras.layers import Conv2D,MaxPooling2D, Dense, Flatten, Reshape,Dropout
from keras.optimizers import SGD,Adam
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt
import scipy.ioa=scipy.io.loadmat('data.mat')
x=a['x']
y=a['alpha']
xtrain=x[0:110000,:]
xtest=x[110000:,:]
ytrain=y[0:110000,:]
ytest=y[110000:,:]
xntrain=(xtrain-np.min(xtrain,axis=0))/(np.max(xtrain,axis=0)-np.min(xtrain,axis=0))#normalize the training dato to (0,1)
xntest=(xtest-np.min(xtrain,axis=0))/(np.max(xtrain,axis=0)-np.min(xtrain,axis=0))
yntrain=(ytrain-np.min(ytrain,axis=0))/(np.max(ytrain,axis=0)-np.min(ytrain,axis=0))#normalize the training dato to (0,1)
yntest=(ytest-np.min(ytrain,axis=0))/(np.max(ytrain,axis=0)-np.min(ytrain,axis=0))num_inputs =2  # 2 features
num_layers = 1
num_neurons = [15]
learning_rate = 0.001
n_epochs = 40
batch_size = 64model = Sequential()
model.add(Dense(units=num_neurons[0], activation='sigmoid', input_shape=(num_inputs,)))
model.add(Dense(units=1))
model.summary()
model.compile(loss='mse',optimizer=Adam(lr=learning_rate))
model.fit(xntrain, yntrain,batch_size=batch_size,epochs=n_epochs)
y_pre=model.predict(xntest)
score = model.evaluate(xntest, yntest)
print('\nTest loss:', score)plt.plot(y_pre,'r')
plt.ion
plt.plot(yntest,'b')
plt.figure()
plt.plot(y_pre*(np.max(ytrain,axis=0)-np.min(ytrain,axis=0))+np.min(ytrain,axis=0),'r')
plt.ion
plt.plot(yntest*(np.max(ytrain,axis=0)-np.min(ytrain,axis=0))+np.min(ytrain,axis=0),'b')##save trained model
model.save('bp.h5')

新撰写一个python文件,命名为mlp.py, 用于调用训练好的神经网络参数,对输入数据进行预测,并将预测结果保存在y_pre.txt文件中。该文件具体代码如下

import numpy as np
import keras
import scipy.ioa=scipy.io.loadmat('data.mat')
x=a['x']
y=a['alpha']
xtrain=x[0:110000,:]
xtest=x[110000:,:]
ytrain=y[0:110000,:]
ytest=y[110000:,:]
xntrain=(xtrain-np.min(xtrain,axis=0))/(np.max(xtrain,axis=0)-np.min(xtrain,axis=0))#normalize the training dato to (0,1)
xntest=(xtest-np.min(xtrain,axis=0))/(np.max(xtrain,axis=0)-np.min(xtrain,axis=0))
yntrain=(ytrain-np.min(ytrain,axis=0))/(np.max(ytrain,axis=0)-np.min(ytrain,axis=0))#normalize the training dato to (0,1)
yntest=(ytest-np.min(ytrain,axis=0))/(np.max(ytrain,axis=0)-np.min(ytrain,axis=0))model1 = keras.models.load_model("bp.h5")  # load models
weight_dense_27,bias_dense_27 = model1.get_layer('dense_27').get_weights()
weight_dense_28,bias_dense_28 = model1.get_layer('dense_28').get_weights()
y_pre=model1.predict(xntest)
np.savetxt('y_pre.txt', y_pre) #save predicted results

二、利用PyInstaller将python文件编译成.exe文件

PyInstaller是将python文件编译成exe文件的常用第三方库,具体安装过程见我的上一篇博客
https://blog.csdn.net/graceful_snow/article/details/103216781
第一步,将要生成exe文件的mlp.pydata.matbp.h5三个文件放在同一个文件夹下,我放在了D盘的mlpinference子文件的mlp文件夹下。


第二步,进入anaconda powershell prompt, 利用cd命令进入上述文件夹
第三步 ,在anaconda powershell prompt中输入PyInstaller --add-data "data.mat; data" --add-data "bp.h5; weight" mlp.py命令,该命令表示将mlp.py文件生成.exe,同时将data.mat文件添加至data文件夹下,"bp.h5"文件添加至weight文件夹下。在输入该命令后会产生一个dist文件夹,里面有mlp子文件夹,可运行的exe文件及相应的其他编译后的依赖文件均在mlp子文件夹中。如果只想要一个exe文件,可以用PyInstaller --add-data "data.mat; data" --add-data "bp.h5; weight" -F mlp.py命令,但是这样一个exe文件,因为它太大了,运行的速度远不如前一种方法(PyInstaller --add-data "data.mat; data" --add-data "bp.h5; weight" mlp.py命令产生的结果文件)。关于PyInstaller各个命令的具体含义,推荐以下博客https://www.cnblogs.com/aziji/articles/9708258.html,以及PyInstaller官网https://pyinstaller.readthedocs.io/en/stable/spec-files.html
(期间也参考了博客https://blog.csdn.net/weixin_34226182/article/details/93664045和https://www.cnblogs.com/stigerzergold/p/9601319.html,但是没有用这两个博客中介绍的方法,而是在PyInstaller官网中找到了下图所示的更简单的方法)

第四步,解决第三步运行中的报错问题。
在第三步运行的过程中,会报如图所示的错误。

该错误的解决方法在博客https://blog.csdn.net/youzhouliu/article/details/77828658和博客https://www.cnblogs.com/huipengbo/p/9856361.html中进行了详细的介绍,具体报错原因,在博客https://blog.csdn.net/vblittleboy/article/details/6613815中进行了分析,这里仅给出解决方案,即:
(1)修改mlp.spec文件,具体方法为用记事本打开该文件,在图示位置处加入红色方框圈出的代码,然后保存文件。
(2)在anaconda powershell prompt中输入命令PyInstaller mlp.spec

(3)进入漫长的等待过程,大约5分钟左右,会成功完成编译,出现以下界面即为成功

后面的内容见下篇,下篇的链接为https://blog.csdn.net/graceful_snow/article/details/103228785

将keras训练好的神经网络模型生成独立于python环境运行的.exe文件并在matlab中调用(上篇)相关推荐

  1. 为什么matlab生成的exe文件只能在matlab中打开,在电脑的其他地方打不开?

    为什么matlab生成的exe文件只能在matlab中打开,在电脑的其他地方打不开? 2014-11-09 20:20147****3349 | 浏览 448 次  操作系统 在同一个电脑里,在mat ...

  2. python脱离环境运行_python 生成exe脱离python环境运行

    1. 简介 python 程序编写完之后需要进行打包成exe发布,不暴露源码,目前主要打包的工具有三种: 1) PyInstaller(推荐) 2) cx_Freeze 3) py2exe PyIns ...

  3. Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别

    Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # -*- codin ...

  4. matlab7 fig exe 阴影,Matlab 生成完全独立运行的 EXE文件的问题请教

    如何将matlab gui文件编辑成exe可执行文件 我现在用Matlab M文件写了一个计算程序,当输入一些数时,通过程序,计算出一些结果.(比如我的 程序是sum=(a+b+c)/d,即给定a,b ...

  5. jar包使用exe4j打成可双击运行的.exe文件和使用Inno Setup Compiler生成.exe安装包教程

    一.工具下载与准备 1.exe4j下载地址:链接:https://pan.baidu.com/s/156dLCKpIRDQdUZxKKvWjqA 提取码:q6fx 2.Inno Setup Compi ...

  6. python的.py文件生成可运行的exe文件

    使用PyInstaller生成可运行的exe文件 使用第三方库PyInstaller实现.py文件快速生成exe文件可执行文件 (cmd命令行)pyinstaller -F <文件名.py> ...

  7. keras concatenate_Keras结合Keras后端搭建个性化神经网络模型

    Keras是基于Tensorflow等底层张量处理库的高级API库.它帮我们实现了一系列经典的神经网络层(全连接层.卷积层.循环层等),以及简洁的迭代模型的接口,让我们能在模型层面写代码,从而不用仔细 ...

  8. 【Pytorch神经网络实战案例】14 构建条件变分自编码神经网络模型生成可控Fashon-MNST模拟数据

    1 条件变分自编码神经网络生成模拟数据案例说明 在实际应用中,条件变分自编码神经网络的应用会更为广泛一些,因为它使得模型输出的模拟数据可控,即可以指定模型输出鞋子或者上衣. 1.1 案例描述 在变分自 ...

  9. 【Pytorch神经网络实战案例】13 构建变分自编码神经网络模型生成Fashon-MNST模拟数据

    1 变分自编码神经网络生成模拟数据案例说明 变分自编码里面真正的公式只有一个KL散度. 1.1 变分自编码神经网络模型介绍 主要由以下三个部分构成: 1.1.1 编码器 由两层全连接神经网络组成,第一 ...

最新文章

  1. apue读书笔记-第十二章
  2. 时间计时android程序,Android 时间计时器控件 Chronometer
  3. 查询提升200倍,ClickHouse你值得拥有!
  4. jBPM专家力作——《深入浅出jBPM》
  5. 极大似然估计_干货|一文理解极大似然估计
  6. 调查:新冠病毒对全球结构化布线市场的影响
  7. linux播放到设备,linux - 将字节流式传输到ALSA播放设备 - 堆栈内存溢出
  8. uniapp 可视化开发_uniapp的简单安装流程使用教程
  9. 利用资源文件实现多语言的系统
  10. Intel Haswell/Broadwell架构/微架构/流水线 (6)-Unlamination微指令离解过程
  11. mysql join 循环_MySQL的JOIN(三):JOIN优化实践之内循环的次数
  12. ip地址怎么设置才有效_房产遗嘱怎么写才有效?需要公证吗?
  13. php imap gmail,php,imap,gmail和dreaded无法连接到'{imap.gmail.com:993 / imap / ssl}'
  14. 25~30K的国外企业招聘面试考题,10分钟就能写出来了?
  15. 【JSP笔记02】JSP注释、脚本、表达式、JSP三大指令、JSP七大动作的介绍及使用
  16. Typora常用快捷键(仅记录常用功能)
  17. 深入理解蓝牙BLE之“BQB认证”
  18. 市场模式缭乱,合适的模式脱颖而出?众筹卖货模式在线分享分析
  19. Darknet - How to improve object detection? - 如何提升物体检测?
  20. 日入上万,Jack 年入百万?

热门文章

  1. 计算机网络实验IP数据报分片,实验报告三IP数据分片.doc
  2. PHPEMS +XAMPP 验证码显示不出来解决方法
  3. U盘不被电脑识别问题
  4. STC89C51单片机
  5. 攻防世界-MISC-摩斯电码
  6. 【经验】不摸鱼的时光
  7. 【USACO 2020 January Silver】Loan Repayment
  8. 自动化测试和测试自动化你分的清楚吗?
  9. 服务器的主要防护手段有哪些
  10. MCE公司:表观遗传研究指导肿瘤个性化治疗