本文将通过使用Keras构建一个简单的多层感知器,数据使用印第安人糖尿病诊断数据。

通过Keras构建深度学习模型的步骤如下:

  1. 定义模型——创建一个序贯模型并添加配置层
  2. 编译模型——指定损失函数和优化器,并调用模型的compile()函数,完成模型编译
  3. 训练模型——通过调用模型的fit()函数来训练模型
  4. 执行预测——调用模型的evaluate()或predict()等函数对新数据进行预测

通过以下步骤创建第一个神经网络模型

  1. 导入数据
  2. 定义模型
  3. 编译模型
  4. 训练模型
  5. 评估模型

数据集使用Pima Indians数据

这是一个可以从UCI Machine Learning免费下载的标准机器学习数据集,目前好像不对外开放了,我这里传到码云上了。
它描述了Pima Indians的患者医疗记录数据,以及他们是否在五年内发生糖尿病,是一个二元分类的问题(糖尿病为1或非糖尿病为0),下表是数据集的8个属性和输出结果。

序号 描述
1 怀孕次数
2 2小时口服葡萄糖耐量试验中血浆葡萄糖浓度
3 舒张压
4 三头肌皮褶皱厚度
5 2小时血清胰岛素
6 身体质量指数
7 糖尿病谱系功能
8 年龄
9 是否是糖尿病(0 or 1)

下面是数据集中的数据示例,显示了数据集中768条记录中的前5行:

6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
0,137,40,35,168,43.1,2.288,33,1

导入数据

为了重复运行相同的代码,并获得相同的结果,设置随机种子

from keras.models import Sequential
from keras.layers import Dense
import numpy as np
#设定随机种子
np.random.seed(7)

使用NumPy的loadtxt()函数加载数据集

# 1.导入数据
dataset = np.loadtxt('pima-indians-diabetes.csv', delimiter=',')
#分割输入变量x和输出变量Y
x = dataset[:, 0:8]
Y = dataset[:, 8]

定义模型

在Keras中通常使用Dense类来定义完全连接的层:
  • 神经元数量unit为第一个参数
  • 初始化方法init为第二个参数
  • 使用activation参数指定激活函数
  • 使用input_dim参数创建第一层,设置为8,表示输入层有8个输入变量,这与数据的维度一致

通常将网络权重初始化为均匀分布的小随机数uniform,在这个例子中使用介于0和0.05之间的随机数,这是Keras中的默认均衡权重初始化数值。

激活函数:
  • 使用ReLu作为前两层的激活函数,使用Sigmoid作为输出层的激活函数
  • 通常采用sigmoid和tanh作为激活函数,这是构建所有层的首选
  • 现研究表明,使用ReLu作为激活函数,可以得到更好的性能
  • 二分类的输出层通常采用sigmoid作为激活函数
#创建模型
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

下图为该网络结构:

编译模型

为了使模型能够有效的使用Keras封装的数值计算,在模型编译时,必须指定用于评估一组权重的损失函数(loss)、用于搜索网格不同权重的优化器(optimizer),以及希望在模型训练期间收集和报告的可选指标。
该例子中使用对数损失函数作为模型的损失函数,在Keras中,对于二进制分类问题的对数损失函数被定义为二进制交叉熵,使用有效的梯度下降算法Adam作为优化器,采用分类准确度作为度量模型的标准。

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

训练模型

模型编译完成后,就可以用于计算了。在使用模型预测新数据之前,需要先对模型进行训练,训练模型通过调用模型的fit()函数来实现。训练过程中采用epochs参数,对数据集进行巩固次数的迭代,还需要设置在执行神经网络中的权重更新的每个批次中所用实例的个数(batch_size),这些参数可以用过试验和错误实验来选择合适的值。

model.fit(x=x, y=Y, epochs=150, batch_size=10)

评估模型

这里通过统一数据集来评估神经网络模型的性能,这个评估方法只能反应训练数据集在模型上的准确度,不能反映算法对新数据的预测结果,通常将数据分成训练数据集和评估数据集。
可以使用模型的evaluation()函数来评估模型的准确度。在这个示例中使用训练集来评估模型的准确度,因此传递给evaluation()函数的数据集与用于训练模型的数据集相同,这个函数将产生每个输入和输出对的预测,并收集分数,包括平均损失和配置的任何指标,如准确度。

scores = model.evaluate(x=x, y=Y)
print('\n%s : %.2f%%' % (model.metrics_names[1], scores[1]*100))

结果

运行上述代码,得到每一个epoch执行的loss和准确度,以及使用相同的训练集的评估结果。执行结果如下:

Using TensorFlow backend.
Epoch 1/150
2021-04-16 10:34:30.195427: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX210/768 [..............................] - ETA: 17s - loss: 1.6118 - acc: 0.9000
768/768 [==============================] - 0s 346us/step - loss: 3.7098 - acc: 0.5977
Epoch 2/15010/768 [..............................] - ETA: 0s - loss: 0.4447 - acc: 0.8000
768/768 [==============================] - 0s 41us/step - loss: 0.9373 - acc: 0.5924
...
Epoch 149/15010/768 [..............................] - ETA: 0s - loss: 0.5201 - acc: 0.7000
768/768 [==============================] - 0s 41us/step - loss: 0.4714 - acc: 0.7630
Epoch 150/15010/768 [..............................] - ETA: 0s - loss: 0.3475 - acc: 0.9000
768/768 [==============================] - 0s 41us/step - loss: 0.4769 - acc: 0.786532/768 [>.............................] - ETA: 0s
768/768 [==============================] - 0s 47us/stepacc : 78.12%Process finished with exit code 0

基于Keras的第一个多层感知器实例:印第安人糖尿病诊断相关推荐

  1. 第一个多层感知器实例:印第安人糖尿病诊断

    多层感知器是最简单的神经网络模型,用于处理机器学习中的分类与回归问题. 第一个案例:印第安人糖尿病诊断 Pima Indians数据集:UCI Machine Learning免费下载的标准机器学习数 ...

  2. 【Keras】学习笔记2:第一个多层感知器实例:印第安人糖尿病诊断

    文章目录 1.导入数据 2.定义模型 3.编译模型 4.训练模型 5.评估模型 6.汇总代码 1.导入数据 在使用随机过程(如随机数)的机器学习算法时,最好使用固定随机种子初始化随机数生成器.这样就可 ...

  3. Keras多层感知器实例:印第安人糖尿病诊断

    本实例使用Keras在python中创建一个神经网络模型,这是一个简单的贯序模型,也是神经网络最常见的模型.本实例按照以下步骤创建: 1. 导入数据. 2.定义模型 3.编译模型 4.训练模型 5.评 ...

  4. 深度学习入门系列1:多层感知器概述

    本人正在学习<deep learning with python>–Jason Brownlee,有兴趣的可以一起学习. 仅供学习参考,不做商用! 大家好,我技术人Howzit,这是深度学 ...

  5. 深度学习02-神经网络(MLP多层感知器)

    文章目录 神经网络 简介 学习路径 分类 多层感知器(MLP) 神经网络认识 两层神经网络 输入层 从输入层到隐藏层 从隐藏层到输出层 激活层 输出的正规化 如何衡量输出的好坏 反向传播与参数优化 过 ...

  6. 基于Keras在数据集Pima Indians diabetes上实现多层感知器

    机器学习是一种实现人工智能的方法,深度学习则是一种实现机器学习的技术.大量数据为深度学习提供了材料,有了充分的数据做基础,利用深度学习技术就能演绎出更聪明的算法,使深度学习得以迅速发展. 目前有许多深 ...

  7. 多层感知器(MLP)详解【基于印第安人糖尿病数据】

    文章目录: 1 概述 2 Pima印第安人数据集 3 导入数据和keras 4 定义模型 5 编译模型 6 训练 7 评估和预测 8 完整代码 1 概述 多层感知器是最简单的神经网络模型,用于处理机器 ...

  8. 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-多层感知器(神经网络)与激活函数概述-04

    多层感知器 计算输入特征得加权和,然后使用一个函数激活(或传递函数)计算输出. 单个神经元 多个神经元 单层神经元缺陷 多层感知器 多层感知器 激活函数 relu:曲线如下图,假如过来的函数是x当x小 ...

  9. 【深度学习】学习案例:Keras 多层感知器手写数字识别

    实验:Keras 多层感知器 手写数字识别 1. 下载 MNIST数据集(前提) 2. 进行数据预处理 3. 建立模型 4. 进行训练 5. 以测试数据评估模型 6. 进行预测 拓展: 1. 显示混淆 ...

最新文章

  1. 使用VB.NET加快代码开发速度
  2. XILINX资源获取
  3. (43)内存装载驱动
  4. 4.extern关键字.rs
  5. 计划B? 那是计划N…没什么。 拼图于2015年问世
  6. 【渝粤题库】陕西师范大学200641高等数学作业(高起专、专升本)
  7. 2-10 [搞定!]出栈序列的合法性 (20 分)
  8. pythonrandom库seed_Python
  9. Linux开机启动过程(4):切换到64位模式-长模式(直到内核解压缩之前)
  10. MSSQL OPTION语句详解
  11. 简要分析武汉一起好P2P平台的核心功能
  12. JSP中用request.setAttribute()后,在action中为什么取不到值?
  13. 阿里国际站出口通升级金品诚企详细流程
  14. Linux制作U盘Windows启动盘,windows下制作linux U盘启动盘或者安装优盘(转)
  15. 11.3 帧中继基本配置
  16. 10000marker_AL10000 DNA Marker使用说明书
  17. 一个复杂页面该如何布局设计
  18. 股票量化自动交易软件下单原则条件
  19. 利用HFS软件一分钟搭建好ESP8266基于Arduino开发环境
  20. 职业学校计算机教学创新论文题目,信息技术论文题目大全

热门文章

  1. ManGe总结的常用js方法
  2. iOS 开发 百度地图 在模拟器上只显示网格!
  3. 智慧用电安全管理系统
  4. rlm sql mysql.so_冰天雪地跪求高手解决--Could not link driver rlm_sql_mysql: file not found
  5. linux命令撤销进程,linux的命令
  6. HP LaserJet MFP M227_M231双面打印
  7. 局域网内,ping IP可以ping的通,ping主机名ping不通解决办法
  8. 各国开发者薪资水平:中国排名第19位
  9. 将Kali Linux2020.3设置为中文汉化
  10. CSS中flex弹性盒子——弹性容器属性,弹性元素属性(附图)