Keras初探(一)

尝试写一下Keras的一些东西,算是必要的时候能备忘一下吧!希望大家多提提意见。

一、安装Keras

Keras并不能直接用于构建模型,它需要后端支持。
Keras 可以基于两个Backend,一个是 Theano,一个是 Tensorflow。如果我们选择Theano作为Keras的Backend, 那么Keras就用 Theano 在底层搭建你需要的神经网络;同样,如果选择 Tensorflow ,Keras 就使用 Tensorflow 在底层搭建神经网络。
所以我们需要先安装tensorflow,其实安装tensorflow还是蛮简单的,这里不多说了。
安装Keras其实就是一句话嘛!

1
sudo pip3 install keras

要修改后端就修改~/.keras/keras.json文件中的backend。

1
2
3
4
5
6
{
"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
    我们先加载一下要用到的包。
    1
    2
    3
    4
    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]取得就是第九列。

1
2
3
4
5
#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,毕竟是全连接嘛!

1
2
3
4
5
6
# 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编译模型非常简单,只需要一句话。

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

这里我们设置优化器为adam。

3.4训练模型

训练模型使用fit函数。

1
2
#Fit the model
model.fit(X,Y,epochs=150,batch_size=10)

我们把轮数设为150,batch_size为每次处理record数量,内存大可以多设置些。

3.5评估模型

简便起见,这里我们仍然使用X,Y作为评估数据,实际操作事可以利用sklearn的数据集划分。

1
2
3
#evaluate the model
scores = model.evaluate(X,Y)
print("\n%s:%.2f%%" % (model.metrics_names[1],scores[1]*100))

四、完整代码

连注释在内一共20多行代码,可谓非常简单了。希望这个简单的例子可以帮助大家入门。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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))

-------------End of the articleThank you for reading-------------
  • Author of this article:zfish
  • Link to this article: archives/81716051.html
  • Copyright Notice: All articles in this blog, except for special statements, please indicate the source!
0%