Keras中的两种模型:Sequential和Model用法

前言

本文转载自Keras中的两种模型
Keras中有两种深度学习的模型:序列模型(Sequential)和通用模型(Model)。差异在于不同的拓扑结构。

一、序列模型 Sequential

Sequential 是实现全连接网络的最好方式。
序列模型各层之间是依次顺序的线性关系。Sequential 模型是多个网络层的线性堆栈,可以从 keras 的模型库中导入 Sequential 模型:
模型结构可以通过一个列表来制定,代码如下:

from keras.models import Sequential
from keras.layers import Dense, Activation
 
layers = [Dense(32, input_shape = (784,)),
   Activation('relu'),
   Dense(10),
   Activation('softmax')]
 
model = Sequential(layers)

或者逐层添加网络结构,代码如下:

from keras.models import Sequential
from keras.layers import Dense, Activation
 
model = Sequential()
model.add(Dense(32, input_shape = (784,)))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))

二、通用模型:Model函数式模型

通用模型可以设计非常复杂、任意拓扑结构的神经网络,例如有向无环网络、共享层网络等。相比于序列模型只能依次线性逐层添加,通用模型能够比较灵活地构造网络结构,设定各层级的关系。
*函数式模型接口是用户定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型的途径。*换言之,只要你的模型不是类似 VGG 一条路走到黑的模型,或者你的模型需要多于一个的输出,那么你总应该选择函数式模型。函数式模型是最广泛的一类模型,序贯模型(Sequential)只是它的一种特殊情况。
————————————————

from keras.layers import Input, Dense
from keras.models import Model
 
# 定义输入层,确定输入维度
input = input(shape = (784, ))
# 2个隐含层,每个都有64个神经元,使用relu激活函数,且由上一层作为参数
x = Dense(64, activation='relu')(input)
x = Dense(64, activation='relu')(x)
# 输出层
y = Dense(10, activation='softmax')(x)
# 定义模型,指定输入输出
model = Model(input=input, output=y)
# 编译模型,指定优化器,损失函数,度量
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
# 模型拟合,即训练
model.fit(data, labels)

[model.fit()与model.fit_generate()]

补充知识:keras神经网络,Sequential序贯模型(二分类、多分类)

1.Sequential参数

model = Sequential() 
model.add(Dense(32, input_dim=78))

解释

Sequential 的第一个关于输入数据shape的参数,后边的各个层则可以自动推到出中间数据的shape

01 传递一个input_shape的关键字参数给第一层,如果填入None则表示此位置可能是任何正整数。数据的batch大小不应包含在其中。

02 有些2D层,如Dense,支持通过指定其输入维度input_dim来隐含的指定输入数据shape,是一个Int类型的数据。一些3D的时域层支持通过参数input_dim和input_length来指定输入shape。

03 如果你需要为输入指定一个固定大小的batch_size(常用于stateful RNN网络),可以传递batch_size参数到一个层中,例如你想指定输入张量的batch大小是32,数据shape是(6,8),则你需要传递batch_size=32和input_shape=(6,8)。

2.compile配置学习过程

model.compile(optimizer='rmspropy',loss='categorical_crossentropy',metrics=['accuracy'])

01 优化器optimizer:

该参数可指定为已预定义的优化器名,如rmsprop、adagrad,或一个Optimizer类的对象。

02 损失函数loss:

该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如categorical_crossentropy、mse,也可以为一个损失函数。

03 指标列表metrics:

对分类问题,我们一般将该列表设置为metrics=[‘accuracy’]。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,或一个完成metric_name - > metric_value映射的字典.

3.案例

01 基于多层感知器Softmax多分类
from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation
from keras.optimizers import SGD
import keras #abd
 
# Generate dummy data
import numpy as np
 
x_train=np.random.random((1000,20))
y_train=keras.utils.to_categorical(np.random.randint(10,size=(1000,1)),num_classes=10)
x_test=np.random.random((100,20))
y_test=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10)
 
model=Sequential()
 
# Dense(64) is a fully-connected Layer with 64 hidden units.
# in the first layer ,you must specify the expected input data shape;
# here,20-dimensional vectors.
 
model.add(Dense(64,activation='relu',input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax'))
 
sgd=SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)
 
model.compile(loss='categorical_crossentropy', # 损失函数
    optimizer=sgd, #
    metrics=['accuracy'] # 精确度,评估模型在训练和测试时的网络性能的指标。
    )
 
model.fit(x_train,y_train,epochs=20,batch_size=128)
 
# batch_size 整数,指定进行梯度下降时每个批次包含的样本数训练时一个批次的样本
# 会被计算一次梯度下降,使目标函数进行一步优化
# epochs;训练20次,整数,训练终止时候的epoch值
score=model.evaluate(x_test,y_test,batch_size=128)
 
# 评估函数 ,本函数返回一个测试误差的标量值(如果模型没有其他评价指标)。
02 MLP的二分类
import numpy as np
from keras.models import Sequential
from keras.layers import Dense,Dropout
 
x_train=np.random.random((1000,20))
y_train=keras.utils.to_categorical(np.random.randint(10,size=(1000,1)),num_classes=10)
x_test=np.random.random((100,20))
y_test=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10)
 
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'))
 
model.compile(loss='binary_crossentropy',
    optimizer='rmsprop',
    metrics=['accuracy'])
 
model.fit(x_train,y_train,
   epoches=20,
   batch_size=128)
 
score=model.evaluate(x_test,y_test,batch_size=128)

拓展阅读:

1、 Keras搭建神经网络模型的Model解析与使用
2、 深入理解 keras 中 Dense 层参数
3、 keras创建model的两种方式

  • 12
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值