导入库包

from keras.models import Sequential
from keras.layers import Dense
import numpy as np
import pandas as pd
# 设定随机数种子,使得模型参数初始化结果相同
np.random.seed(7)

导入数据,并将其转换为keras指定数据类型

# 导入数据
dataset = pd.read_csv('XXXX/diabetes.csv')
#print(dataset)# 分割输入x和输出Y
x = dataset.iloc[:,0:8]
Y = dataset.iloc[:,8]# tensorflow仅接受训练数据为numpy形式
x = np.array(x)#对Y进行标签编码
from sklearn.preprocessing import LabelEncoder
Y=Y.values.tolist()
label_encoder = LabelEncoder()
Y = np.array(label_encoder.fit_transform(Y))

创建模型

# 创建模型
model = Sequential()# 第一层必须设定input_dim,即输入维度(输入变量个数);input_shape=(8,) 等价于input_dim=8
# Dense类为完全连接的层,参数1为神经元个数,activation为激活函数,可选sigmoid、relu、tanh
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
# 由于最后输出结果为“是否为糖尿病”的二分类问题,因此选取sigmoid函数,且输出神经元为1
model.add(Dense(1, activation='sigmoid'))

编译模型

# 编译模型,需要指定用于评估一组权重的损失函数loss、用于搜索网络不同权重的优化器optimizer、以及模型训练报告的评估指标metrics
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

训练模型

# 训练模型,epochs为数据集迭代训练次数,还需设定执行神经网络中的权重跟新的每个批次所用到的实例个数
model.fit(x=x, y=Y, epochs=150, batch_size=10)

评估模型(仅用训练数据进行)

# 评估训练数据模型
scores = model.evaluate(x=x, y=Y)
print('\n%s : %.2f%%' % (model.metrics_names[1], scores[1]*100))

此外,可通过kera自动评估来对模型性能进行计算,需要使用到fit()函数中的验证分割参数validation_split,该值接受小数点形式,如validation_split=0.2,表示将数据集的20%用于评估模型,其余80%用于训练模型,而后依据这20%的数据表现来给出val_loss 和val_acc

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

手动评估有两种形式,一是手动分离数据集并评估,二是k折交叉验证。对于手动指定验证数据集,可用scikit机器学习库里的train_test_split(),而评估数据集通过元组的形式传递给fit()。如下


x_trian,x_validation,Y_train,Y_validation = train_test_split(x,Y,test_size = 0.2,random_state = seed)model.fit(x_train, Y_train ,validation_data = (x_validation,Y_validation), epochs=150, batch_size=10)

使用k折交叉验证的方法(需要注意,此方法一般不用于深度学习,因为深度学习模型的计算开销比较大),使用scikit-Learn机器学习库中的StratifiedKFold对数据集进行划分。代码如下:

from keras.models import Sequential
from keras.layers import Dense
import numpy as np
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import StratifiedKFold# 设定随机数种子
seed = 7
np.random.seed(seed)# 导入数据
dataset = pd.read_csv('XXX/diabetes.csv')
# 分割输入x和输出Y
x = dataset.iloc[:,0:8]
Y = dataset.iloc[:,8]# tensorflow仅接受训练数据为numpy形式
x = np.array(x)#对Y进行标签编码
Y=Y.values.tolist()
label_encoder = LabelEncoder()
Y = np.array(label_encoder.fit_transform(Y))kfold = StratifiedKFold(n_splits=10, random_state = seed, shuffle = True)
cvscores =[]
for train, validation in kfold.split(x,Y):# 创建模型model = Sequential()model.add(Dense(12, input_dim=8, activation='relu'))model.add(Dense(8, activation='relu'))model.add(Dense(1, activation='sigmoid'))# 编译模型model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# 训练模型,通过verbose=0来关闭模型fit()和evaluate()的详细输出,在每个模型构建完成后,进行评估并输出评估结果model.fit(x[train], Y[train], epochs=150, batch_size=10, verbose=0)# 评估模型scores = model.evaluate(x[validation], Y[validation], verbose=0)#输出评估结果print('%s : %.2f%%' % (model.metrics_names[1], scores[1]*100))cvscores.append(scores[1]*100)# 输出均值和标准差
print('%.2f%% (+/- %.2f%%)'% (np.mean(cvscores),np.std(cvscores)))

该文代码源自魏贞原《深度学习:基于Keras的Python实践》

多层感知机训练pima_indians_diabetes相关推荐

  1. 深度学习笔记其三:多层感知机和PYTORCH

    深度学习笔记其三:多层感知机和PYTORCH 1. 多层感知机 1.1 隐藏层 1.1.1 线性模型可能会出错 1.1.2 在网络中加入隐藏层 1.1.3 从线性到非线性 1.1.4 通用近似定理 1 ...

  2. TensorFlow基础之模型建立与训练:线性回归、MLP多层感知机、卷积神经网络

    TensorFlow基础之模型建立与训练 模型建立与训练:简单的线性回归 MLP多层感知机 数据获取.预处理 模型搭建 训练与评估 卷积神经网络 高效建模 Keras Sequential高效建模 F ...

  3. TensorFlow实现多层感知机函数逼近

    TensorFlow实现多层感知机函数逼近 准备工作 对于函数逼近,这里的损失函数是 MSE.输入应该归一化,隐藏层是 ReLU,输出层最好是 Sigmoid. 下面是如何使用 MLP 进行函数逼近的 ...

  4. TensorFlow实现多层感知机MINIST分类

    TensorFlow实现多层感知机MINIST分类 TensorFlow 支持自动求导,可以使用 TensorFlow 优化器来计算和使用梯度.使用梯度自动更新用变量定义的张量.本文将使用 Tenso ...

  5. Theano3.4-练习之多层感知机

    来自http://deeplearning.net/tutorial/mlp.html#mlp Multilayer Perceptron note:这部分假设读者已经通读之前的一个练习 Classi ...

  6. 【深度学习】基于Pytorch多层感知机的高级API实现和注意力机制(三)

    [深度学习]基于Pytorch多层感知机的高级API实现和注意力机制(三) 文章目录 [深度学习]基于Pytorch多层感知机的高级API实现和注意力机制(三) 1 权重衰减 1.1 范数 1.2 L ...

  7. 【深度学习】基于Pytorch多层感知机的高级API实现和注意力机制(二)

    [深度学习]基于Pytorch多层感知机的高级API实现和注意力机制(二) 文章目录1 代码实现 2 训练误差和泛化误差 3 模型复杂性 4 多项式回归4.1 生成数据集4.2 对模型进行训练和测试4 ...

  8. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  9. python 底层实现_用Python从底层实现一个多层感知机

    在上一篇文章中,我们从数学理论对多层感知机的反向传播进行了推导.南柯一梦宁沉沦:神经网络中反向传播算法数学推导​zhuanlan.zhihu.com 这一篇文章中我们将基于上一篇文章最后给出的算法使用 ...

最新文章

  1. 2017.6.4 入门组 NO.2——睡眠
  2. python模块之datetime
  3. 机器学习中的矩阵向量求导(四) 矩阵向量求导链式法则
  4. 提高程序员工作效率的11个技巧
  5. 前端学习(487):css选择器下
  6. Android使用谷歌插件,详解谷歌官方教程 Android插件ADT 9.0.0
  7. ASP.NET AJAX:Ajax验证(ajax+Handler处理)
  8. HTML网页设计制作大作业 - 绿色环境保护HTML5网站模板(4个页面)
  9. 游戏开发入门(十)游戏中的网络模块
  10. 地理必修一三大类岩石_高中地理必修一知识点总结材料完整版
  11. 造价员容易漏算的100项内容
  12. 芥末圈:“知识付费”面具下的币圈割韭菜大本营
  13. qq对计算机程序的更改,解决电脑总弹出“是否允许程序对计算机进行更改”
  14. 写给30岁的自己,以及所有即将、正在、已经奔三的朋友们
  15. 【gcc/g++】1.编译器, 编译过程和基本参数
  16. Android中自定义注解处理器
  17. 云端部署 vs 本地化部署
  18. 关于Java中的finalize方法
  19. python人脸识别门禁系统生产厂家_人脸识别门禁硬件生产厂家
  20. 不能打开.mmap文件的解决办法

热门文章

  1. matlab误差分析报告,误差理论与数据处理实验报告
  2. Ijk播放视频简单调用
  3. 次世代游戏模型设计,被认为是21世纪最具前景行业?
  4. 【BX学习之丰巢智能柜】 丰巢智能柜的收费标准
  5. 浪人棋牌游戏德闲麻将简介
  6. 计算机模拟动物打架,动物打架模拟器
  7. gesture-recycler
  8. 为什么单目摄像机还是自动驾驶的主流
  9. python绘图时如何让点在线上
  10. PowerPC平台移植RTL8822BU