4.2 Keras常用模型

Keras有两种类型的模型:序列模型(Sequential)和函数式模型(Model)。序列模型比较常见,函数式模型更为通用,序列模型是函数式模型的一种特殊情况。

4.2.1 序列模型

序列模型的特点是使用Sequential创建,然后依次使用add方法添加各种元素,整个深度学习网络都是一个线性序列的结构,代码如下:


model = Sequential() 
model.add(Dense(64, input_dim=20, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(64, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(1, activation='sigmoid'))

4.2.2 函数式模型

与线性的序列模型类似,函数式模型也支持这种单一输入单一输出的结构。函数式模型的创建非常类似于函数的定义,所以叫作函数式模型,代码如下:


x = Dense(64, activation='relu')(inputs) 
x = Dense(64, activation='relu')(x) 
predictions = Dense(10, activation='softmax')(x)  
model = Model(inputs=inputs, outputs=predictions)

与线性的序列模型不一样的是,函数式模型除了可以支持这种单一输入单一输出的线性序列,还可以支持多进多出的情况。Keras的官方文档 [1] 中介绍了一个预测Twitter上一条新闻会被转发和点赞多少次的模型。该模型的主要输入是新闻本身,也就是一个词语的序列,另外一个输入是新闻发布的日期,模型的结构如图4-1所示。在本书中介绍的主要是单一输入单一输出的线性序列模型,关于函数式模型的介绍就不展开了,有兴趣的读者可以参考Keras官方文档。

图4-1 预测Twitter上一条新闻会被转发和点赞多少次的模型

[1] https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models