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


Posted in Python onJune 27, 2020

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

序列模型 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

通用模型可以设计非常复杂、任意拓扑结构的神经网络,例如有向无环网络、共享层网络等。相比于序列模型只能依次线性逐层添加,通用模型能够比较灵活地构造网络结构,设定各层级的关系。

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)

补充知识: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)

相关详细说明见官方文档:https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/

以上这篇Keras中的两种模型:Sequential和Model用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
python获取代码运行时间的实例代码
Jun 11 Python
一看就懂得Python的math模块
Oct 21 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
Python传递参数的多种方式(小结)
Sep 18 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
python判断链表是否有环的实例代码
Jan 31 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
keras输出预测值和真实值方式
Jun 27 #Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 #Python
浅谈keras 模型用于预测时的注意事项
Jun 27 #Python
python suds访问webservice服务实现
Jun 26 #Python
解析Python 偏函数用法全方位实现
Jun 26 #Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 #Python
使用pytorch实现论文中的unet网络
Jun 24 #Python
You might like
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
vuex入门最详细整理
2020/03/04 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
kali中python版本的切换方法
2019/07/11 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
武汉英思工程科技有限公司–ORACLE面试测试题目
2012/04/30 面试题
标准毕业生自荐信范文
2013/11/04 职场文书
采购部经理岗位职责
2014/02/10 职场文书
六查六看自查材料
2014/02/17 职场文书
敬老模范事迹
2014/05/21 职场文书
政工例会汇报材料
2014/08/26 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
爱国之歌(8首)
2019/09/29 职场文书