Keras中的两种模型:Sequential和Model用法
作者:__Watson__ 发布时间:2021-10-16 07:04:32
在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/
来源:https://blog.csdn.net/weixin_39916966/article/details/88049179
猜你喜欢
- 作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system()、os.popen()、s
- 这篇文章主要介绍了python如何通过闭包实现计算器的功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 如下所示:# -*- coding: UTF-8 -*-import waveimport numpy as npimport matplo
- 为了给你的对像添加一个行级功能,那就定义一个自定义方法。 有鉴于manager经常被用来用一些整表操作(table-wide),模型方法应该
- 开发目标:实现小红帽所挂脚本的自动生成下图为生成的最终目标本项目是从json中读取角色场景等信息,因此为了更好地判断所用属性是否需要,设置为
- SQL语句参考及记录集对象详解1. ASP与Access数据库连接:2. ASP与SQL数据库连接:建立记录集对象:set rs=serve
- 需求说明:将单个或者多个Excel文件数据进行去重操作,去重的列可以通过自定义制定。开始源码说明之前,先说明一下工具的使用过程。1、准备需要
- 本文实例讲述了python实现获取单向链表倒数第k个结点的值。分享给大家供大家参考,具体如下:#初始化链表的结点class Node():
- 获取一组href元素属性的值lst = driver.find_elements_by_class_name("ib-it-tex
- 我们的规范到底做到哪一步算是发挥良好的价值?其实一件事物我们理解错根本目的会导致出大不一样的结果,直接反应在设计师到底要体现什么的价值。想想
- 在我们的生活中,只要你睁开眼睛就能看到各种各样的视觉。不同的视觉能给你不同的视觉暗示,同样能给你不同的心理感受。视觉这个话题太泛了,大自然中
- 导语每年的节假日一到,大家头疼的总时同一个问题:你买到回家的票了吗?尤其是大型的节日:”比如国庆、春节......&am
- 数据库开发数据库应用,选择一个好的数据库是非常重要的。下面从一些方面比较了SQL Server与Oracle、DB2三种数据库,为你选择数据
- 我们使用 python setup.py install 来安装python包,但是如何卸载呢?只能手动删除安装的文件可以使用如下命令pyt
- 之前写过的组织结构和组织体系都太抽象了,读到标签系统我才有那种“略懂”的感觉。哈哈…书上提到的标签包括:导航情境式链接:常见的“更多”这种用
- 今天我们来写一个有管理功能的留言板程序。所谓的管理功能,其实就是每条留言前有一个选择框,点中要删除的留言,或者点“删除所有留言”,就完成了批
- 对于Dreamweaver这个广大用户早有听闻的网页编辑工具,除功能强大外,Dreamweaver一向被推崇为同类网页编辑软件中产生垃圾代码
- 系统自带模块(库)```cppimport retarget = 'abc1234xyz're.search('(\
- 登录、注销和登录限制:登录在使用authenticate进行验证后,如果验证通过了。那么会返回一个user对象,拿到user对象后,可以使用
- 在Web 开发中,JavaScript的一个很重要的作用就是对DOM进行操作,可你知道么?对DOM的操作是非常昂贵的,因为这会导致浏览器执行