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

  • 环境准备
  • 实现步骤
    • 第一步:导入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. R语言使用caret包构建遗传算法树模型(Tree Models from Genetic Algorithms )构建回归模型、通过method参数指定算法名称
  2. 教你如何一步步将项目部署到Github
  3. python实现计算器代码 博客园_python实现计算器
  4. Apache Jserv protocol
  5. BASIC-6 杨辉三角形
  6. SDNU 1029.巧分整数(斯特林数(改)dp)
  7. 武警五防一体化是什么?五防光端机产品介绍!
  8. Jmeter启动报错解决方案
  9. C/C++ 随机数生成器的 随机化
  10. 2.6、ConfigurationClassPostProcessor 解析配置文件
  11. 怎么查看蓝牙uuid_你的蓝牙耳机真的坏了吗?蓝牙耳机常见的一些假故障?
  12. 深入Managed DirectX9(十五)
  13. vue 引入第三方文件(高拍仪),传值及接口调用。
  14. 字符串分隔StringUtils.delimitedListToStringArray
  15. 微信开发之data:image/png;base64,
  16. mean IOU是什么意思
  17. EASYOPS系列|《凤凰项目》用几百案例解释DevOps
  18. 弱小和无知不是生存的障碍,傲慢才是
  19. JDK1.6的ConcurrentHashMap
  20. 如何扫除“无孔不入,防不胜防”的发帖机

热门文章

  1. RocketMQ,同一个topic下是否可以通过不同的tag来进行订阅吗?
  2. 软件和 IT 服务成美国收入最高行业;黑客组织 OurMine 宣称攻陷维基解密网站
  3. 雪球产品期权价值蒙特卡洛模拟(1)
  4. 计算机科学类学术论文,计算机科学与技术学院申请博士学位发表学术论文的规定(2008.9上网)...
  5. 盛大陈天桥:最好的商业模式要深谙“人性”
  6. 高通平台手机开发之LCD
  7. python随机点名程序 图形化_python写一个随机点名软件,python随机点名,最近有个随机点名软件...
  8. 一个和CSDN类似的博客网站
  9. 给csdn童鞋们的一封信 (csdn为什么不能粘贴图片写博客?)
  10. 软工网络16个人作业一