步骤如下:
1. 导入数据
2. 定义模型
3. 编译模型
4. 训练模型
5. 评估模型
6. 代码整理
数据集:采用免费的数据集,地址:http://archive.ics.uci.edu/ml/datasets.php
本节利用XX病诊断数据集,数据集包括系列特征数据,是否患糖尿病,以及未来5年内的发病率,为一个二元分类问题(患病为1,不患病为0),而其特征变量包括相应的生理参数值,下面为其中一行数据:
1,85,66,29,0,26.6,0.351,31(年龄),0(是否患病)
数据结构为8个属性参数,1个输出结果(患病与否)
#导入相关模块
from keras.models import Sequential
from keras.layers import Dense#Dense为全连接层
import numpy as np
导入数据
#导入数据
dataset=np.loadtxt('dataset.txt',delimiter=',')
#分割数据,获取前8个属性值及最后一位结果数据
x=dataset[:,0:8]
y=dataset[:,8]
构建神经网络
model=Sequential()#序贯模型
model.add(Dense(12,input_dim=8,activation='relu'))#网络中的第一层,有12个神经元,使用8个输入量,add()函数将层
# 添加到模型,激活函数使用ReLU
model.add(Dense(8,activation='relu'))#隐含层有8个神经元
model.add(Dense(1,activation='sigmoid'))#输出层1个神经元,激活函数为sigmoid函数
编译模型
编译模型是为了使模型使用Keras封装的数据进行计算,Keras可以根据后端自动选择最佳方法来训练模型,进行预测
训练一个神经网络,意味着找到最佳的权重集来对问题作出预测
模型的编译需要指定用于评估一组权重的损失函数loss,用于搜索网络不同权重的优化器optimizer,以及希望在模型训练
期间收集和报告的可选指标
在Keras中,对二进制分类问题的损失函数定义为二进制交叉熵
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])#以分类准确度为度量模型的标准
训练模型
model.fit(x=x,y=y,epochs=150,batch_size=10)#epochs决定迭代次数,batch_size为在执行神经网络中的权重更新的每
# 个批次中所用实例的个数
评估模型
#导入测试数据
checkset=np.loadtxt('checkset.txt',delimiter=',')
#分割数据,获取前8个属性值及最后一位结果数据
x1=checkset[:,0:8]
y1=checkset[:,8]
scores=model.evaluate(x=x1,y=y1)
print('\n%s:%.2f%%'%(model.metrics_names[1],scores[1]*100))#输出评估结果
运行程序结果
即150次迭代后,预测的准确率为76.96%,通过本例的学习能够体现Keras的结构明确,便于理解的优点。参考书籍
魏贞原--深度学习,基于Keras的Python实践
网友评论