笔者最近开始学习用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
数据为共9列,前八列为输入数据的特征参数,最后一列为输出列。
1、 数据加载
定义函数和类
数据下载地址及详细说明请查看以下链接:
数据地址
https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv
数据描述:
https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.names
# firstneural network with keras tutorial
fromnumpy import loadtxt #用于读取CSV格式数据
fromkeras.models import Sequential #
fromkeras.layers import Dense #
X为输入变量,y 为输出
目的是构建函数 y = f(X).
读取数据
dataset = loadtxt(‘pima-indians-diabetes.csv’,delimiter=’,’) #读取数据
分割数据,分割为输入X和输出y
X = dataset[:,0,8] #数据中前八列为输入
y=dataset[:,8] #后八列为输出
2、定义Keras模型
Keras中的模型被定义为一系列层。
#定义Keras模型
model = Sequential() #序列模型
model.add(Dense(12,input_dim=8,activation=’relu’)) #这一句同时表达了第一层即输入层和第一隐藏层,input_dim=8,,表示输入8个变量,也就是特征参数。12表示第一隐藏层有12个节点或者神经元。激活函数为Relu。
model.add(Dense(8,activation=’relu’)) #第二隐藏层,8个神经元,激活函数Relu
model.add(Dense(1,activation=’sigmoid’)) # 输出层,1个神经元,激活函数为sigmoid
重点需要的是
1 模型类型
2 输入数据特征参数的个数 层数、每一层的神经元的个数、激活函数。
3、编译Keras模型
在编译时,我们必须指定在训练网络时需要的一些附加属性。记住,训练一个网络意味着找到最佳的权重集来将数据集中的输入映射到输出。
model.compile(loss=’binary_crossentropy’,optimizer=’adam’,metric=’accuracy’)
参数:损失函数、优化器(算法)、分类进度
4、 拟合Keras模型
我们可以通过调用模型上的fit()函数来训练或使模型适合于所导入的数据。
model.fit(X,y,epochs=150,batch_size=10)
epochs: 相当于迭代次数、
batch_size: 相当于在权重更新前,只计算数据集中的若干个样点,或者是用若干个样点来更新权重,而不是全部。该方法是用来防止过拟合的一种方法。
5、 评价Keras模型
应用evaluate函数来评价模型的表现。
-,accuracy = model.evaluate(X,y)
Print(‘Accuracy: %.2f’ %(accuracy*100))
6、 预测
将训练的模型用在新的数据上,因为我么只有一个数据,没有将数据分为训练数据,验证数据及测试数据,因此我们在这里直接用训练数据作为测试数据。
predictions = model.predict_classes(X)
for i in range(5):
print(‘%s =>%d (expected %d)’%(X[i].tolist(),predictions[i],y[i]))
这就是应用Keras做的一个最简单的项目。也许你会感觉很简单,或者会觉得很多问题都没有弄明白,其实,没有关系的,笔者也是面临着与你同样的问题,但是这并不妨碍我们已经初步地了解了深度学习的一个基本过程或者说是框架,我们再一起逐步地开始学习。
python 脚本
# firstneural network with keras tutorial
from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense
# loadthe dataset
dataset =loadtxt('pima-indians-diabetes.csv', delimiter=',')
# splitinto input (X) and output (y) variables
X =dataset[:,0:8]
y =dataset[:,8]
# definethe keras model
model =Sequential()
model.add(Dense(12,input_dim=8, activation='relu'))
model.add(Dense(8,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
# compilethe keras model
model.compile(loss='binary_crossentropy',optimizer='adam', metrics=['accuracy'])
# fit thekeras model on the dataset
model.fit(X,y, epochs=150, batch_size=10)
#evaluate the keras model
_,accuracy = model.evaluate(X, y)
print('Accuracy:%.2f' % (accuracy*100))
# makeclass predictions with the model
predictions= model.predict_classes(X)
#summarize the first 5 cases
for i inrange(12):
print('%s => %d (expected %d)' %(X[i].tolist(), predictions[i], y[i]))
网友评论