3.3 keras模型构建的三种方式

1. 使用tf.keras.Sequential按层顺序构建模型,代码示例:

model = Sequential()#卷积层conv_1_1
model.add(Cov2D(input_shape = (64, 64, 3),filters = 32, kernel_size = 3, activation = 'relu', kernel_initializer = 'he_uniform', name = 'conv_1_1)#卷积层 conv_1_2
model.add(Cov2D(filters = 32, kernel_size = 3, activation = 'relu', kernel_initializer = 'he_uniform', name = 'conv_1_2)#池化层max_pool_1
model.add(MaxPool2D(pool_size = 32, name = 'max_pool_1))#展平层
model.add(Flatten(name = 'flatten'))#全连接层
model.add(Dense(unit = 6, activation = 'softmax', name = 'logit'))#设置损失函数loss、优化器optimizer、评价指标metrics
model.compile(loss="categorical_crossentropy", optimizer = tf.keras.optimizers.SGD(learning_rate = 0.001), metrics = ["accuracy"])

或者:

model = Sequential([Conv2D(input_shape = (64, 64, 3), filters = 32,kernel_size = 3, activation = 'relu', name = 'conv_1_1'),Conv2D(filters = 32, kernel_size = 3, activation = 'relu', name = 'conv_1_2'),MaxPool2D(poo_size = 2, anme = 'max_pool_1'),Flatten(name = 'flatten'),Dense(units = 6, activation = "softmax", name = 'logit')])#设置损失函数loss、优化器optimizer、评价标准metrics
model.compile(loss="categorical_crossentropy", optimizer = tf.keras.optimizers.SGD(learning_rate = 0.001), metrics = ["accuracy"])

适用场合:对于顺序结构的模型(没有多个输入输出,也没有分支),优先使用Sequential方法构建。

缺点:不能创建以下模型结构

  • 共享层
  • 模型分支
  • 多个输入分支
  • 多个输出分支

2. Keras函数式API创建模型,代码示例:

#输入层input
input = input(shape = (64, 64, 3), name = 'input')#卷积层conv_1_2
x = Conv2D(filters = 32, kernel_size = 3, activation = 'relu', name = 'conv_1_1')(input)#卷积层con_1_2
x = Conv2D(filters = 32, kernel_size = 3, activation = 'relu', name = 'conv_1_2)(x)#池化层max_pool_1
x = MaxPool2D(pool_size = 2, name = 'max_pool_1)(x)#展平层
x = Flatten(name = 'flatten')(x)#全连接层
output = Dense(units = 6, activation = "softmax", name = 'logit')(x)model = Model(inputs = input, outputs = output)#设置损失函数loss、优化器optimizer、评价标准metrics
model.compile(loss="categorical_crossentropy", optimizer = tf.keras.optimizers.SGD(learning_rate = 0.001), metrics = ["accuracy"])

适用场合:如果模型有多输入或者多输出,或者模型需要共享权重,或者模型具有分支连接、循环连接等非顺序结构,推荐使用函数式API进行创建。

3. Keras Model Subclassing方式,代码示例:

#定义一个子类来搭建模型
class ConvModel(Model):def __init__(self):#父类初始化super(ConvModel, self).__init__()#卷积层conv_1_1self.conv_1_1 = Conv2D(input_shape = (64, 64, 3),filters = 32, kernel_size = 3, activation = 'relu', name = 'con_1_1')#卷积层conv_1_2self.conv_1_2 = Conv2D(filters = 32, kernel_size = 3,activation = 'relu', name = 'conv_1_2')#池化层max_pool_1self.max_pool_1 = MaxPool2D(pool.size = 2, name = 'max_pool_1')#展平层flattenself.dense =  Dense(units = 6, activation = "softmax", name = 'logit')def call(selfm, x):x = self.conv_1_1(x)x = self.conv_1_2(x)x = self.max_pool_1(x)x = self.conv_2_1(x)x = self.conv_2_2(x)x = self.max_pool_2(x)x = self.flatten(x)x =  self.dense(x)return x#类实例化
model = ConvModel()

构造tf.keras.Model的子类来编写模型,需要覆写Model类中的__init__方法和call方法。
__init__方法中定义我们要使用的层,这里可以使用Keras自带的层;
call方法中实现模型的网络层。

适用场合:需要编写自定义的模型,如在网络中使用自定义的层、自定义的损失函数、自定义的激活函数等。

3.3 keras模型构建的三种方式相关推荐

  1. 时序预测的三种方式:统计学模型、机器学习、循环神经网络

    作者 | luanhz 来源 | 小数志 导读 时序预测是一类经典的问题,在学术界和工业界都有着广泛的研究和应用.甚至说,世间万物加上时间维度后都可抽象为时间序列问题,例如股票价格.天气变化等等.关于 ...

  2. 三种方式实现观察者模式 及 Spring中的事件编程模型

    观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧, ...

  3. PD的CDM模型中的三种实体关系

    转自:http://www.cnblogs.com/syf/articles/2480580.html PD的CDM模型中的三种实体关系 CDM是大多数开发者使用PD时最先创建的模型,也是整个数据库设 ...

  4. ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略

    ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略 目录 三.模型训练 ...

  5. 三种方式实现生产者-消费者模型

    前言 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题描述了 ...

  6. response设置编码的三种方式以及比较

    https://blog.csdn.net/u010653908/article/details/53994021 response设置编码的三种方式以及比较 2017年01月03日 14:12:46 ...

  7. django文件上传到服务器,django上传文件的三种方式

    Django文件上传需要考虑的重要事项 文件或图片一般通过表单进行.用户在前端点击文件上传,然后以POST方式将数据和文件提交到服务器.服务器在接收到POST请求后需要将其存储在服务器上的某个地方.D ...

  8. Qt操作SQLite数据库的三种方式

    Qt访问Sqlite数据库的三种方式(即使用三种类库去访问),分别为QSqlQuery.QSqlQueryModel.QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更 ...

  9. Workflow 4.0 中三种方式实现workflow的触发调用

    1:使用WorkflowInvoker类中的InVoke静态方法-->WorkflowInvoker.Invoke(myWF); //myWF为自定义的workflow实例 [这种方式可以像一个 ...

最新文章

  1. CNN网络优化加速开源代码汇总
  2. 用 CALL TRANSACTION USING... 调用批输入时的一些注意事项
  3. windows server 2003磁盘管理
  4. python语言的翻译方式是什么-python自动翻译实现方法
  5. 每天学一点Scala之 高阶函数 flatten
  6. 谈谈前后端分离实践中如何提升RESTful API开发效率
  7. DataGridView控件的使用 1206 半草稿
  8. 命令行查看图片_you-get:使用命令行工具下载网络资源,可下载 B 站视频
  9. 存储过程与SQL语句如何选择
  10. 通信维修专用电源_万可PRO 2电源 | 开拓性通信功能,自信迈入数字化时代
  11. 用服务器日志监控软件、服务器日志分析工具软件教你如何查看服务器日志?
  12. html图片加载不出来,图片相对路径问题
  13. Badboy录制提示脚本错误解决方案
  14. RPG游戏Demo学习笔记一
  15. 信签纸有虚线怎么写_写观后感的信签纸格式
  16. 我的NVIDIA开发者之旅——NVIDIA云原生技术
  17. 华为nova青春版是html手机吗,华为Nova青春版这款手机作为新青年良品:麒麟935+4G+64GB+18W快充...
  18. 安卓模拟器忘记密码,如何解锁
  19. 用注册表管理IE代理设置
  20. 无领导小组讨论中常见的派别

热门文章

  1. Wannafly挑战赛27: D. 绿魔法师(莫比乌斯函数)
  2. bzoj 4765: 普通计算姬(分块+树状数组)
  3. HDU 6156 2016ICPC网络赛 G: Palindrome Function(数位DP)
  4. 51nod-1422:沙拉酱前缀
  5. [python+pip] 使用pip将函数库安装到Python环境或Anaconda环境
  6. airflow部署和使用示例
  7. Druid 简介,架构,部署,python连接,hue链接druid
  8. 练习--第一次课(运算if while 字符编码)
  9. JVM学习之GC参数设置
  10. 将Sphinx的日志放置到/dev/shm里需要注意的事情