尝试写一下Keras的一些东西,算是必要的时候能备忘一下吧!希望大家多提提意见,毕竟我文笔太差,不太会写东西,留言私信都好。
以下大部分内容来自Keras的教程,有兴趣的同学可以看看原文,链接如下:
https://elitedatascience.com/keras-tutorial-deep-learning-in-python
一、安装Keras
Keras并不能直接用于构建模型,它需要后端支持。
Keras 可以基于两个Backend,一个是 Theano,一个是 Tensorflow。如果我们选择Theano作为Keras的Backend, 那么Keras就用 Theano 在底层搭建你需要的神经网络;同样,如果选择 Tensorflow ,Keras 就使用 Tensorflow 在底层搭建神经网络。
所以我们需要先安装tensorflow,其实安装tensorflow还是蛮简单的,这里不多说了。
安装Keras其实就是一句话嘛!
sudo pip3 install keras
要修改后端就修改~/.keras/keras.json文件中的backend。
{
"image_dim_ordering": "tf",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "theano"
}
那么开始喽!
二、预置知识
我们需要学习一些机器学习和python的基础知识,下面给两个链接,有兴趣的同学可以先去看看。
Understanding of essential machine learning concepts
Python programming skills
其实根据我的经验,一遍动手做,一遍查文档学得会比较快。
三、超简单的Keras例子
这个例子共分为5个步骤:
1、加载数据
2、定义模型
3、编译模型
4、训练模型
5、评估模型
我们一步步来。
3.1 实验数据
我们的研究对象是UCI上面的一个数据集。
Pima Indians onset of diabetes dataset
- Dataset File
-
Dataset Details
我们把数据下载下来之后保存为
pima-indians-diabetes.csv
我们先加载一下要用到的包。
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
np.random.seed(2018)
接着我们加载实验数据,数据分为9列,其中第九列是0或1,表示患病与否。
我们使用numpy的loadtxt加载数据,具体参见之前的教程。这里注意一下切片操作,X = dataset[:,0:8],是不含第9列的,即取到[8]之前(0-7列)。而Y = dataset[:,8]取得就是第九列。
#load prima indians dataset
dataset = np.loadtxt("pima-indians-diabetes.csv", delimiter=",")
#split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
3.2定义模型
我们来定义一个非常简单的模型。这个模型是一些layers一个接一个连接在一起。先来确定一下输入inputs。我们把input_dim设置为8,一共八个参数嘛。后面的工作很简单,因为在Sequential model中dense会默认设置除第一层外的各层的inputs,毕竟是全连接嘛!
# create model
model = Sequential()
model.add(Dense(12,input_dim = 8,activation = 'relu'))
model.add(Dense(10,activation = 'relu'))
model.add(Dense(8,activation = 'relu'))
model.add(Dense(1,activation = 'sigmoid'))
我们定义了四层layer,除最后一层外我们都采用relu激活函数,这样收敛较快(sigmod函数两端都很平,梯度太小了)。
3.3编译模型
Keras编译模型非常简单,只需要一句话。
#Compile model
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
这里我们设置优化器为adam。
3.4训练模型
训练模型使用fit函数。
#Fit the model
model.fit(X,Y,epochs=150,batch_size=10)
我们把轮数设为150,batch_size为每次处理record数量,内存大可以多设置些。
3.5评估模型
简便起见,这里我们仍然使用X,Y作为评估数据,实际操作事可以利用sklearn的数据集划分。
#evaluate the model
scores = model.evaluate(X,Y)
print("\n%s:%.2f%%" % (model.metrics_names[1],scores[1]*100))
四、完整代码
连注释在内一共20多行代码,可谓非常简单了。希望这个简单的例子可以帮助大家入门。
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
np.random.seed(2018)
#load prima indians dataset
dataset = np.loadtxt("pima-indians-diabetes.csv", delimiter=",")
#split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12,input_dim = 8,activation = 'relu'))
model.add(Dense(10,activation = 'relu'))
model.add(Dense(8,activation = 'relu'))
model.add(Dense(1,activation = 'sigmoid'))
#Compile model
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#Fit the model
model.fit(X,Y,epochs=150,batch_size=10)
#evaluate the model
scores = model.evaluate(X,Y)
print("\n%s:%.2f%%" % (model.metrics_names[1],scores[1]*100))