在熟悉了简单操作后,做一点有意思的事情吧
本文实现的功能:
1.使用Keras创建,DNN深度学习网络模型,解决多分类问题,数据集是IRIS数据集。
2.Keras模型保存,及重新加载
2.结合我的上一篇文章的结果,最终实现了,由网页写入data,将data传入已经训练好的模型,predict结果输入数据库,最终将predict显示在网页。
此篇project非常适合入门,能够快速看到结果,但某些细节好比较粗糙,有待完善。欢迎指正与交流。
参考的博客,但调试时有很多bug,自己做了些改动,此处附上原博客链接:
是https://www.jianshu.com/p/1d88a6ed707e
OK
1.Keras创建DNN深度学习网络模型
前期准备
如果想用在你的电脑上使用Keras,需要以下工具:
Python
TensorFlow
Keras
这里,选择TensorFlow作为Keras的后端工具。使用以下Python代码,可以输出Python、TensorFlow以及Keras的版本号:
import sys
import keras as K
import tensorflow as tf
py_ver = sys.version
k_ver = K.__version__
tf_ver = tf.__version__
print("Using Python version " + str(py_ver))
print("Using Keras version " + str(k_ver))
print("Using TensorFlow version " + str(tf_ver))
OK
IRIS数据集
IRIS数据集(鸢尾花数据集),经典的机器学习数据集,适合作为多分类问题的测试数据。
IRIS数据集是用来给鸢尾花做分类的数据集,一共150个样本,每个样本包含了花萼长度(sepal length in cm)、花萼宽度(sepal width in cm)、花瓣长度(petal length in cm)、花瓣宽度(petal width in cm)四个特征,将鸢尾花分为三类,分别为Iris Setosa,Iris Versicolour,Iris Virginica,每一类都有50个样本。
DNN代码
DNN结构:
搭建的DNN由输入层、隐藏层、输出层和softmax函数组成,其中输入层由4个神经元组成,对应IRIS数据集中的4个特征,作为输入向量。
隐藏层有两层,每层分别有5和6个神经元。
之后就是输出层,由3个神经元组成,对应IRIS数据集的目标变量的类别个数。
最后,就是一个softmax函数,用于解决多分类问题而创建。
直接上代码:
# 导入模块
import os
import numpy as np
import keras as K
import tensorflow as tf
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelBinarizer
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
#from keras.models import load_model
from keras.models import load_model as keras_load_model
# 读取CSV数据集,并拆分为训练集和测试集
# 该函数的传入参数为CSV_FILE_PATH: csv文件路径
def load_data(CSV_FILE_PATH):
IRIS = pd.read_csv(CSV_FILE_PATH)
target_var = 'Species' # 目标变量
# 数据集的特征
features = list(IRIS.columns[1:6])
features.remove(target_var)
# 目标变量的类别
Class = IRIS[target_var].unique()
# 目标变量的类别字典
Class_dict = dict(zip(Class, range(len(Class))))
# 增加一列target, 将目标变量进行编码
IRIS['target'] = IRIS[target_var].apply(lambda x: Class_dict[x])
# 对目标变量进行0-1编码(One-hot Encoding)
lb = LabelBinarizer()
lb.fit(list(Class_dict.values()))
transformed_labels = lb.transform(IRIS['target'])
y_bin_labels = [] # 对多分类进行0-1编码的变量
for i in