Keras 第一课

本文介绍使用Keras深度学习框架建立糖尿病预测模型的过程。通过分析印第安人糖尿病数据集,构建并训练了一个准确率高达84.38%的模型。文章详细解释了Sequential模型的构建方式及Dense层的使用,展示了Keras简化神经网络搭建的优势。

听说用 Keras 建立算法模型比较简单,今天放假有时间试验一下。因为我的机器上已经安装 TensorFlow 了,因此安装Keras很简单,不再赘述。

一、实验数据

第一个练习基于印第安人糖尿病诊断数据,数据下载地址:印第安人糖尿病诊断数据

这组数据实际上是个文本文件,格式如下:

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
5,116,74,0,0,25.6,0.201,30,0
3,78,50,32,88,31.0,0.248,26,1
10,115,0,0,0,35.3,0.134,29,0
2,197,70,45,543,30.5,0.158,53,1
8,125,96,0,0,0.0,0.232,54,1
... ...

数据一共九列,其含义如下:

  1. 怀孕次数
  2. 血浆葡萄糖浓度
  3. 舒张压
  4. 三头肌皮皱褶厚度
  5. 2小时血清胰岛素
  6. 身体质量指数
  7. 糖尿病谱系功能
  8. 年龄
  9. 是否糖尿病(0或者1)

资料称,该数据集基线准确率位 65.1%,使用10倍交叉验证法最高准确率在77.7%以内。我用 Keras 试一下,看看自己能做到多少。

二、模型代码

代码如下,感觉比 TensorFlow 简单很多。

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

np.random.seed(7)

dataset = np.loadtxt('pima-indians-diabetes.csv', delimiter = ',')
x = dataset[:, 0 : 8]
Y = dataset[:, 8]

model = Sequential()
model.add(Dense(500, input_dim=8, activation='sigmoid'))
model.add(Dense(100, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))

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

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

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

三、实验结果

运行了一下,结果还不错,有些测试结果甚至超出了 77.7%。

614/614 [==============================] - 0s 231us/step - loss: 0.3628 - accuracy: 0.8371 - val_loss: 0.6157 - val_accuracy: 0.7857
... ...
614/614 [==============================] - 0s 244us/step - loss: 0.3611 - accuracy: 0.8225 - val_loss: 0.6446 - val_accuracy: 0.7597
Epoch 149/150
614/614 [==============================] - 0s 237us/step - loss: 0.3822 - accuracy: 0.8062 - val_loss: 0.6143 - val_accuracy: 0.7662
Epoch 150/150
614/614 [==============================] - 0s 244us/step - loss: 0.3410 - accuracy: 0.8436 - val_loss: 0.6309 - val_accuracy: 0.7727
768/768 [==============================] - 0s 32us/step

accuracy : 84.38

还不错哦!

四、代码注释

1 Sequential()

model = Sequential()

Sequential 模型字面上的翻译是顺序模型,给人的第一感觉是那种简单的线性模型,但实际上Sequential 模型可以构建非常复杂的神经网络,包括全连接神经网络、卷积神经网络(CNN)、循环神经网络(RNN)、等等。这里的Sequential更准确的应该理解为堆叠,通过堆叠许多层,构建出深度神经网络。

Sequential模型的核心操作是添加layers(图层),以下展示如何将一些最流行的图层添加到模型中:

#卷积层
model.add(Conv2D(64, (3, 3), activation='relu'))
#最大池化层
model.add(MaxPooling2D(pool_size=(2, 2)))
#全连接层
model.add(Dense(256, activation='relu'))
#dropout
model.add(Dropout(0.5))
#Flattening layer(展平层)
model.add(Flatten())

2 Dense()

Dense查到两种说法,一种说法是一个类,另一种说法是一个方法。我注意到源代码中的声明:

from keras.layers import Dense

在 python 中用 help(Dense)命令查看,确定本代码中 Dense 是一个类,完整命名为 keras.layers.core.Dense,具体内容可在 python 环境查看,不再赘述。

3 Sequential.compile()

compile()负责编译模型,在 python 环境中用 help( Sequential.compile) 查看:

Help on function compile in module keras.engine.training:

compile(self, optimizer, loss=None, metrics=None, loss_weights=None, 
	sample_weight_mode=None, weighted_metrics=None, target_tensors=None, **kwargs)

4 Sequential.fit()

Sequential.fit()负责训练模型。

help(Sequential.fit)
Help on function fit in module keras.engine.training:

fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, 
	validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, 
	sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, 
	validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False, **kwargs)
    
Trains the model for a fixed number of epochs (iterations on a dataset).

5 Sequential.evaluate()

Sequential.evaluate()用来测试模型。注意,在本练习中,因为我选择了 fit() 按照 0.2 的概率自动分割出测试集,因此,这个单独的评估是不需要的。

help(Sequential.evaluate)
Help on function evaluate in module keras.engine.training:

evaluate(self, x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)
Returns the loss value & metrics values for the model in test mode.

Computation is done in batches.


参考文献

  1. 云水木石:理解keras中的sequential模型
  2. Friedrich Yuan:Keras大法(4)——Dense方法详解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许野平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值