序贯模型

序贯模型是多个网络层的线性堆叠,是函数式模型的简略版,为最简单的线性、从头到尾的结构顺序,不发生分叉。

1、应用序贯模型的基本步骤

  1. model.add,添加层;
  2. model.compile,模型训练的BP模式设置;
  3. model.fit,模型训练参数设置 + 训练;
  4. 模型评估
  5. 模型预测

2、创建

1、可以通过向Sequential模型传递一个layer的list来构造该模型:

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

2、也可以通过.add()方法一个个的将layer加入模型中:

model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model.add(Activation('relu'))

3、指定输入数据的shape

模型需要知道输入数据的shape,因此,Sequential的第一层需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。有几种方法来为第一层指定输入数据的shape

1、传递一个input_shape的关键字参数给第一层,input_shape是一个tuple类型的数据

model = Sequential()
model.add(Dense(64, input_shape=(20,), activation='relu'))

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

model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))

4、编译

在训练模型之前,我们需要通过compile来对学习过程进行配置。compile接收三个参数:优化器optimizer,损失函数loss,指标列表metrics

model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])

5、训练

训练模型一般使用fit函数

model.fit(x_train, y_train,epochs=20,batch_size=128)

6、评估

根据验证集评估模型的好坏

score = model.evaluate(x_val, y_val, batch_size=128)
print('val score:', score[0])
print('val accuracy:', score[1])

7、预测

对已训练完成的模型,输入特征值x会预测得到标签y

x=1
y=model.predict(x,verbose=0)
print(y)

8、示例

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout# 准备训练集和验证集
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_val = np.random.random((100, 20))
y_val = np.random.randint(2, size=(100, 1))model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
# 或 model.add(Dense(64, input_shape=(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,epochs=20,batch_size=128)score = model.evaluate(x_val, y_val, batch_size=128)
print('val score:', score[0])
print('val accuracy:', score[1])x=1
y=model.predict(x,verbose=0)
print(y)

函数式模型

比序贯模型要复杂,可以同时/分阶段输入变量,分阶段输出想要的模型

1、应用函数式模型的基本步骤

  1. model.layers,添加层;
  2. model.compile,模型训练的BP模式设置;
  3. model.fit,模型训练参数设置 + 训练;
  4. 模型评估
  5. 模型预测

2、创建

model=Model(inputs=, outputs=)

3、指定输入数据的shape

inputs=Input(shape=(20,))

4、编译,训练,评估,预测等步骤与序贯式模型相同,这里不再赘述

5、示例一

基于上文序贯式模型进行改造

import numpy as np
from keras.models import Model
from keras.layers import Dense, Dropout# 准备训练集和验证集
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_val = np.random.random((100, 20))
y_val = np.random.randint(2, size=(100, 1))inputs = Input(shape=(20,))
x=Dense(64,activation='relu')(inputs)
x=Dropout(0.5)(x)
x=Dense(64,activation='relu')(x)
x=Dropout(0.5)(x)
predictions=Dense(1, activation='sigmoid')(x)model=Model(inputs=inputs, outputs=predictions)
model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
model.fit(x_train, y_train,epochs=20,batch_size=128)score = model.evaluate(x_val, y_val, batch_size=128)
print('val score:', score[0])
print('val accuracy:', score[1])x=1
y=model.predict(x,verbose=0)
print(y)

6、示例二

多输入多输出模型

from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Modelmain_input = Input(shape=(100,), dtype='int32', name='main_input')
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)
lstm_out = LSTM(32)(x)
auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)
auxiliary_input = Input(shape=(5,), name='aux_input')
x = keras.layers.concatenate([lstm_out, auxiliary_input])# We stack a deep densely-connected network on top
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)# And finally we add the main logistic regression layer
main_output = Dense(1, activation='sigmoid', name='main_output')(x)model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])
model.compile(optimizer='rmsprop',loss={'main_output': 'binary_crossentropy', 'aux_output': 'binary_crossentropy'},loss_weights={'main_output': 1., 'aux_output': 0.2})# And trained it via:
model.fit({'main_input': headline_data, 'aux_input': additional_data},{'main_output': labels, 'aux_output': labels},epochs=50, batch_size=32)

Keras —— 序贯模型和函数式模型相关推荐

  1. Keras学习笔记(一)认识序贯(Sequential)模型

    Keras由纯Python编写而成并基Tensorflow.Theano以及CNTK后端.Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,它的可读性非常强!笔者在这参考了中文文档给自 ...

  2. Python机器学习笔记:深入理解Keras中序贯模型和函数模型

     先从sklearn说起吧,如果学习了sklearn的话,那么学习Keras相对来说比较容易.为什么这样说呢? 我们首先比较一下sklearn的机器学习大致使用流程和Keras的大致使用流程: skl ...

  3. 深度学习:Keras基础--序贯模型(sequential)

    深度学习:Keras入门(一)之基础篇 1.Keras搭建神经网络: Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model),函数式模型应用更为广泛,序贯模型是函数式模 ...

  4. Keras学习笔记:函数式模型

    目录: 目录: 函数式(Functional)模型 第一个模型:全连接网络 多输入和多输出模型 让我们用函数式模型来实现这个框图 共享层 更多的例子 inception模型 卷积层的残差连接 共享视觉 ...

  5. keras保存模型_TF2 8.模型保存与加载

    举个例子:先训练出一个模型 import 接下来第一种方法:只保留模型的参数:这个有2种方法: model.save_weights("adasd.h5")model.load_w ...

  6. 【博弈论基础与几大经典模型】古诺模型、斯塔克尔伯格模型Stackelberg Game、价格领导模型、Bertrand模型、Sweezy模型

    最近阅读了一篇paper中用到了Stackelberg Game建模,于是找了一些资料先学习以下该模型的理论知识,发现很多学科都是相关的,真是神奇的存在. 什么是博弈论 博弈论(Game theory ...

  7. Keras【Deep Learning With Python】—Keras实现序贯模型

    文章目录 Sequential 程序说明 代码实现 运行结果 Sequential 初步了解了tensorflow以后,发现了基于tensorflow的非常简洁的深度学习框架keras,只需要短短几行 ...

  8. 浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现)

    浅谈深度学习:LSTM对股票的收益进行预测(Sequential 序贯模型,Keras实现) 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学习:了解RNN和构建并预测 浅谈深度学习:基于对LS ...

  9. Keras搭建序贯式模型

    学习Keras搭建序贯式模型,并学习使用MNIST手写数字识别例子 from tensorflow.keras import layers, models# 创建一个序贯式模型对象 model = m ...

最新文章

  1. JUC AQS ReentrantLock源码分析
  2. iOS runtime实用篇:让你快速上手一个项目
  3. Yii2 事件学习笔记
  4. 制定统一业务逻辑基础规则
  5. C++中使用random头文件
  6. Python学会使用虚拟环境——pipenv
  7. Spark1.2新特性概述
  8. java对象序列化克隆_Java8基础知识(三)对象克隆与序列化
  9. Marketing Cloud Launchpad动态tile显示数字刷新的触发逻辑
  10. 动态规划|最大k乘积问题(C语言)
  11. 图像处理 --- 4.1 图像增强的点运算
  12. java httpcomponents_java – 如何使用Apache httpcomponents从NHttpRequ...
  13. 互联网日报 | 5月10日 星期一 | 小米成立私募股权基金管理公司;58金融升级为58数科;京东健康推出“家医保”健康险服务...
  14. 发邮件请领导审批文件怎么说_住建部:1月1日起,两项甲级资质实行告知承诺审批!...
  15. 《南溪的目标检测学习笔记》——权重初始化
  16. 垂直搜索引擎模块设计
  17. 工信部BIM工程师系列发布测评考试大纲
  18. 通过程序启动QQ,实现自动登录.
  19. 苹果与宝马和奔驰关于自动驾驶汽车的谈判告吹,退而求其次选择与大众汽车合作
  20. 示波器如何设置实现单次触发

热门文章

  1. 阿里是如何做Code Review的
  2. Android腾讯QQ定制版,Android QQ 5.4.0 正式版发布
  3. Prometheus 动态拉取监控服务
  4. DSS:(Decision-making Support System)决策支持系统
  5. Barracuda WSF v4.x - Bypass Persistent Vulnerabilities
  6. 计算机预览不到桌面,电脑文件夹的文件预览显示没有预览怎么办?
  7. Symbol LS4278扫描枪的蓝牙配对指南
  8. [独家]自动播放K线图训练盘感能力!股票量化分析工具QTYX-V2.3.5
  9. 合肥八中2021年高考成绩查询,合肥八中2018高考喜报
  10. 算法训练 前缀表达式(C++)