Keras中的两种模型:Sequential和Model用法
在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用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持猪先飞。
相关文章
在Keras中利用np.random.shuffle()打乱数据集实例
这篇文章主要介绍了在Keras中利用np.random.shuffle()打乱数据集实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-16C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?
这篇文章主要介绍了C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?,这也小编做.NET项目时经常思考和让人混乱的一个问题,这篇文章写的挺好,一下清晰了许多,需要的朋友可以参考下...2020-06-25解决在keras中使用model.save()函数保存模型失败的问题
这篇文章主要介绍了解决在keras中使用model.save()函数保存模型失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-21- 这篇文章主要介绍了解决Keras 中加入lambda层无法正常载入模型问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-17
- 这篇文章主要介绍了keras.layer.input()用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-17
- 这篇文章主要介绍了keras的三种模型实现与区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-04
完美解决TensorFlow和Keras大数据量内存溢出的问题
这篇文章主要介绍了完美解决TensorFlow和Keras大数据量内存溢出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-04- 这篇文章主要介绍了利用keras使用神经网络预测销量操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-08
- 这篇文章主要介绍了使用keras实现孪生网络中的权值共享教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-11
- 这篇文章主要为大家详细介绍了vue v-model表单控件绑定的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-05-22
- 这篇文章主要介绍了keras:model.compile损失函数的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-02
- 这篇文章主要介绍了keras输出预测值和真实值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-28
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
这篇文章主要介绍了AngularJS实现用户登录状态判断的方法,通过Model添加拦截过滤器,路由增加限制实现针对登陆状态的判断功能,需要的朋友可以参考下...2017-01-09Zend Framework教程之模型Model基本规则和使用方法
这篇文章主要介绍了Zend Framework教程之模型Model基本规则和使用方法,结合实例形式详细分析了Zend Framework中模型的原理与具体使用技巧,需要的朋友可以参考下...2016-03-07- 这篇文章主要介绍了keras实现基于孪生网络的图片相似度计算方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-12
Zend Framework教程之模型Model用法简单实例
这篇文章主要介绍了Zend Framework教程之模型Model用法,结合实例形式简单分析了Zend Framework中模型Model的原理,文件组织结构及具体使用方法,需要的朋友可以参考下...2016-03-07- 这篇文章主要介绍了keras实现调用自己训练的模型,并去掉全连接层,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-10
- 前言 如果你想尝试一下不用表格来排版网页,而是用CSS来排版你的网页,也就是常听的用DIV来编排你的网页结构,又或者说你想学习网页标准设计,再或者说你的上司要你...2017-07-06
- 今天小编就为大家分享一篇PyTorch和Keras计算模型参数的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-30
- vue使用v-model实现数据的双向绑定,它会根据控件类型自动选取正确的方法来更新元素,本文就详细的介绍一下原理,感兴趣的可以了解一下...2021-08-03