keras提供了两种模型,一种是Sequential,译做序列型模型。另一种是Functional,译做函数型模型。二者可以从使用形式来区分,序列模型可以看做是面向对象的方法,一系列对象协作完成任务。函数模型则是一系列的过程调用来完成任务。
序列模型的概念比较简单,就是把一些基础神经网络层组件一个个串联起来形成一个完整的模型,在此模型上进行训练,从而完成学习任务。
函数模型就是一系列的方法调用,一步步的过程来保证完成学习任务。
序列模型实现在keras.models模块内,模块提供了模型的保存和重新加载的功能,方便我们可以中断和重新开始一个训练过程。
在例子中,mnist数据集使用tensor自带的dataset。其中数据分两部分,其中训练集60000条,测试集10000条。训练集中图像部分由(60000,28*28)的矩阵表示,矩阵的每个元素表示图像每个像素点的黑白取值,标签部分由(60000,1)矩阵表示,每行数字表示对应图像识别出的数字。关于mnist数据集的详细说明见此链接:http://yann.lecun.com/exdb/mnist/
# coding=utf-8
import keras
from keras.models import Sequential
from keras.layers import Dense
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets(one_hot=True)
img_train,label_train = mnist.train.next_batch(60000)
img_test,label_test = mnist.test.next_batch(10000)
#构建模型
model = Sequential()
model.add(Dense(512,activation='relu',input_dim=784))
model.add(Dense(512,activation='relu'))
model.add(Dense(10,activation='softmax'))
model.compile(optimizer='Adagrad',loss='categorical_crossentropy',metrics=['accuracy'])
#训练及评估模型
hist = model.fit(img_train,label_train)
loss,accu = model.evaluate(img_test,label_test)
print("loss is %f accu is %f"%(loss,accu))
在了解了序列模型的基础上,只需要再理解到,在keras中,模型是可调用的,就可以使用函数模型了。参考下面的代码,和上面是等效的。
import keras
from keras.layers import Dense,Input
from keras.models import Model
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets(one_hot=True)
img_train,label_train = mnist.train.next_batch(60000)
img_test,label_test = mnist.test.next_batch(10000)
input = Input(shape=(784,))
layer1 = Dense(512,activation='relu')(input)
layer2 = Dense(512,activation='relu')(layer1)
pred = Dense(10,activation='softmax')(layer2)
model = Model(inputs=input,outputs=pred)
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
hist = model.fit(img_train,label_train,epochs=10)
loss,accu = model.evaluate(img_test,label_test)
print("loss is %f accu is %f"%(loss,accu))
从示例来看,keras提供了一种非常高层的神经网络机器学习模型的封装,我们可以使用20行左右代码就能完成在tensorflow中需要上百行才能完成的任务。