神经网络原理与实现(以鸢尾花分类为例)

  • 环境准备
  • 实现步骤
    • 第一步:导入Keras模型库,创建模型对象
      • Keras构建神经网络的两种模型
      • 导入keras库
        • 用顺序模型的构建和使用神经网络的基本步骤
    • 第二步:通过堆叠若干网络层来构建神经网络
    • 第三步:对网络进行配置
    • 第四步:准备数据
      • 向量化
      • 标准化
      • 类别标签独热编码
    • 第五步:模型训练
    • 第六步:模型的性能评价和预测应用
      • 模型的性能评价
      • 模型的预测应用

环境准备

Keras是深度学习框架,支持使用Python语言定义和训练各种深度学习模型。高度模块化,支持快速开发。并且支持CPU、GPU无缝切换运行;需要运行在专业的深度学习引擎上,如Tensorflow、CNTK和Theano等。
在Anaconda创建虚拟环境:

conda create -n 环境名称

激活虚拟环境:

conda activate 环境名称

关闭虚拟环境:

conda deactivate

安装Keras:

pip install keras
pip install tensorflow

实现步骤

第一步:导入Keras模型库,创建模型对象

Keras构建神经网络的两种模型

Sequential:顺序式模型或序贯模型,可以通过各层按顺序线性堆叠来构建网络;
Functional:函数式模型,在顺序式模型的基础上,允许多输出、共享层等结构

导入keras库

from keras.models import Sequential#导入keras库
model = Sequential()

用顺序模型的构建和使用神经网络的基本步骤

model.add #添加层
model.compile #模型编译(训练的BP模式设置)
model.evaluate #模型参数设置+训练
model.predict() #模型预测

第二步:通过堆叠若干网络层来构建神经网络

model.add(Dense(n,activation,input_shape))

Dense:全连接层,节点与下一层节点完全连接
n:本层节点数
activition:激活函数,sigmoid、relu、tanh、softmax等
input_shape:输入数据的维度,用元组表示如(6,8)表示6*8两维数据,首层必须说明

model.add(Dropput(rate))

Dropout:失活层。在本层添加随机失活比例。为防止过拟合,训练过程中断开一些输入神经元连接
rate:随机失活比例

#第二步:通过堆叠若干网络层来构建神经网络
from keras.layers import Dense,Dropout
model.add(Dense(16,activation='relu',input_shape=(4,))) #隐层1
model.add(Dense(16,activation='relu'))  #隐层2
model.add(Dropout(0.25))  #隐层2随机失活25%
model.add(Dense(3,activation='softmax'))#输出层

多分类输出层激活函数要选’softmax’,即返回一个由多个概率值组成的数组(总和为1),每个概率表示输出为某一类的概率

第三步:对网络进行配置

对网络进行配置,即定义损失函数、优化器、性能评估指标等,并根据这些参数对网络进行编译。编译后的模型就可以用于学习训练

model.compile(loss,optimizer,metrics)

loss:损失函数,如多分类用交叉熵损失函数’categorical_crossentropy’,回归用均方差损失函数mean_squared_error等
optimizer:优化器即参数学习算法,以梯度下降算法为基础的方法’SGD’(随机梯度下降)、‘Adam’、'RMSprop’等
metrics:监控指标列表,包含评估模型在训练和测试时的性能指标,分类一般只关心精度

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=["accuracy"])

第四步:准备数据

对数据进行预处理,符合网络要求的类型、形状和数据分布

import pandas as pd
from sklearn.model_selection import train_test_split
data = pd.read_csv('data\iris.txt',header=None)
data.columns=['sepal length','sepal width','petal length','petal width','class']
print(data.iloc[0:5,:]) #查看前五条数据

向量化

神经网络的所有输入和输出都必须是浮点数或整数张量(即多维数据)

#向量化
X=data.iloc[:,0:4].values.astype(float)#数据特征X取值与前4列(数据中无编号列)#类名转化为整数
data.loc[ data['class'] == 'Iris-setosa','class'] = 0
data.loc[ data['class'] == 'Iris-versicolor','class'] = 1
data.loc[ data['class'] == 'Iris-virginica','class'] = 2
#标签y取值于第四列
y=data.iloc[:,4].values.astype(int)

标准化

将数据根据自身一定比例进行处理,使之落入一个待定区间。因为取值范围差异大容易造成训练不收敛

类别标签独热编码

多分类使用损失函数categorical_crossentropy,标签必须为多类模式,即one-hot编码的向量,而不是单个数值。
One-hot独热码是一组数,其中只有一个值为1,其余都是0

第五步:模型训练

#训练模型
model.fit(train_x,train_y_ohe,epochs=50,batch_size=1,verbose=2,validation_data=(test_x,test_y_ohe))

x:输入数据。如果模型只有一个输入,那么x的类型是numpy array,如果模型有多个输入,那么x的类型是list,list的元素是对应各个输入的numpy array
y:标签 numpy array
batch_size:整数,指定进行梯度下降时每个batch包含的样本数,训练时一个batch样本会被计算一次梯度下降,更新依次权重,使得目标函数优化一步。
epochs:整数,训练迭代次数,当未设置initial_epoch时,即是训练的总轮数,否则总轮数为epochs-initial_epoch
verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
validation_data:形式为(X,y)tuple,是指定的验证集,此参数将覆盖validation_spilt

第六步:模型的性能评价和预测应用

模型的性能评价

loss,accuracy=model.evaluate(X_testm,Y_test,verbose)

loss:预测标签和目标标签之间的损失值
accuracy:精确率
X_test:测试集数据
Y_test:测试集标签
verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,3为每个epoch输出一行记录

#模型性能评价#评估模型
loss,accuracy = model.evaluate(test_x,test_y_ohe,verbose=2)
print('loss={},accuracy={}'.format(loss,accuracy))

模型的预测应用

model.predict(X_test,batch_size,verbose)

X_test:测试集数据
batch_size:整数,指定进行梯度下降时每个batch包含的样本数
verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,3为每个epoch输出一行记录

#查看预测结果,属于各类的概率
classes = model.predict(test_x,batch_size=1,verbose=2)
print('测试样本数:',len(classes))
print('分类概率:\n',classes)


基于Keras实现鸢尾花分类相关推荐

  1. 使用Keras实现鸢尾花分类

    文章目录 一.任务描述 二.完成任务 - 使用Keras API顺序模式实现鸢尾花分类 (一)数据的准备 (二)数据的处理 (三)创建模型,添加连接层 (四)创建优化器,模型迭代学习 (五)查看完整源 ...

  2. 基于sklearn的鸢尾花分类模型

    1.鸢尾花数据获取及查看 可以通过sklearn直接获取数据集: from sklearn.datasets import load_iris import matplotlib.pyplot as ...

  3. c语言鸢尾花智能分类,基于LogisticRegression的鸢尾花分类

    LogisticRegression中文叫做逻辑回归,是一种基础.常用的分类方法. 2018年8月24日笔记 1.数据集 Iris(鸢尾花)数据集是多重变量分析的数据集. 数据集包含150行数据,分为 ...

  4. 基于Adaboost实现鸢尾花数据集分类

    写在之前 提交内容分为两大部分: 一为Adaboost算法实现,代码在文件夹<算法实现>中,<提升方法笔记>为个人学习笔记. 二为基于Adaboost模型实现鸢尾花数据集分类, ...

  5. python决策树分类鸢尾花_基于决策树—鸢尾花分类

    决策树算法广泛应用于:语音识别.医疗诊断.客户关系管理.模式识别.专家系统等,在实际工作中,必须根据数据类型的特点及数据集的大小,选择合适的算法. 本文选择经典案例--<鸢尾花分类> 一. ...

  6. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Functional)利用MNIST(手写数字图片识别)数据集实现多分类预测

    DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Functional)利用MNIST(手写数字图片识别)数据集实现多分类预测 目录 输出结果 设计思路 核心代码 输出结果 下边两张 ...

  7. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测

    DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测 目录 输出结果 设计思路 核心代码 输出结果 1.10 ...

  8. Keras之DNN:基于Keras(sigmoid+linear+mse+predict)利用DNN实现回归预测——DIY多分类数据集预测新数据点

    Keras之DNN:基于Keras(sigmoid+linear+mse+predict)利用DNN实现回归预测--DIY多分类数据集&预测新数据点 目录 输出结果 实现代码 输出结果 实现代 ...

  9. Keras之DNN:基于Keras(sigmoid+binary_crossentropy+predict_proba)利用DNN实现分类预测概率——DIY二分类数据集预测新数据点

    #Keras之DNN:基于Keras(sigmoid+binary_crossentropy+predict_proba)利用DNN实现分类预测概率--DIY二分类数据集&预测新数据点 目录 ...

最新文章

  1. 使用Postman完成接口测试
  2. 软件工程 工具之二—— PowerDesigner v12(四)
  3. 单行子查询 多行子查询 关联子查询 笔记
  4. 挖人技术哪家强!快看看2014年北京互联网人都去哪里了~
  5. 《小美斗地主》:棋牌手游新商业模式启示录
  6. Tensorflow 入门教程
  7. 博客在线——Wireshark基本用法
  8. 第十三章 第六节 本章小结
  9. 控制系统数字仿真与CAD-第一次实验-附完整代码
  10. 推荐系统 | 信息过载的大数据时代,大数据推荐系统如何搭建,趋势何方
  11. 排序问题-fastjson-JSONObject
  12. 电影海报页面设计Html5,重设100部经典电影海报字体,好设计是这样炼成的!
  13. 红米Pro 2016020 2016021通刷官方线刷包_救砖包_解账户锁
  14. 计算机二级考试C语言
  15. 关于gite代码提交不显示绿格子的处理心得git
  16. 自然语言处理3 -- 词性标注
  17. Flink二:IngestionTime与ProcessingTime
  18. java robot api_java机器人API学习笔记
  19. java编程之拼图_Java编程制作拼图游戏
  20. Arduino智能物流小车项目(MEGA2560)

热门文章

  1. hdu4514 并查集+树直径
  2. 解决word2007不能编辑文档的问题
  3. python基础学习(十六)——超详细!pickle模块的使用(pickle.dump()和pickle.load())
  4. 通过URL访问韩国Naver地图
  5. formdata格式的数据如何处理?
  6. ASCII的最大值到底是127还是255
  7. ROS2入门:turtlesim的奇妙曲线轨迹
  8. How to ask questions?|提问的智慧
  9. python十个评委打分表_评委评分表
  10. 6款渐变标签彩色flash按钮