3.3 keras模型构建的三种方式
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模型构建的三种方式相关推荐
- 时序预测的三种方式:统计学模型、机器学习、循环神经网络
作者 | luanhz 来源 | 小数志 导读 时序预测是一类经典的问题,在学术界和工业界都有着广泛的研究和应用.甚至说,世间万物加上时间维度后都可抽象为时间序列问题,例如股票价格.天气变化等等.关于 ...
- 三种方式实现观察者模式 及 Spring中的事件编程模型
观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧, ...
- PD的CDM模型中的三种实体关系
转自:http://www.cnblogs.com/syf/articles/2480580.html PD的CDM模型中的三种实体关系 CDM是大多数开发者使用PD时最先创建的模型,也是整个数据库设 ...
- ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略
ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略 目录 三.模型训练 ...
- 三种方式实现生产者-消费者模型
前言 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题描述了 ...
- response设置编码的三种方式以及比较
https://blog.csdn.net/u010653908/article/details/53994021 response设置编码的三种方式以及比较 2017年01月03日 14:12:46 ...
- django文件上传到服务器,django上传文件的三种方式
Django文件上传需要考虑的重要事项 文件或图片一般通过表单进行.用户在前端点击文件上传,然后以POST方式将数据和文件提交到服务器.服务器在接收到POST请求后需要将其存储在服务器上的某个地方.D ...
- Qt操作SQLite数据库的三种方式
Qt访问Sqlite数据库的三种方式(即使用三种类库去访问),分别为QSqlQuery.QSqlQueryModel.QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更 ...
- Workflow 4.0 中三种方式实现workflow的触发调用
1:使用WorkflowInvoker类中的InVoke静态方法-->WorkflowInvoker.Invoke(myWF); //myWF为自定义的workflow实例 [这种方式可以像一个 ...
最新文章
- CNN网络优化加速开源代码汇总
- 用 CALL TRANSACTION USING... 调用批输入时的一些注意事项
- windows server 2003磁盘管理
- python语言的翻译方式是什么-python自动翻译实现方法
- 每天学一点Scala之 高阶函数 flatten
- 谈谈前后端分离实践中如何提升RESTful API开发效率
- DataGridView控件的使用 1206 半草稿
- 命令行查看图片_you-get:使用命令行工具下载网络资源,可下载 B 站视频
- 存储过程与SQL语句如何选择
- 通信维修专用电源_万可PRO 2电源 | 开拓性通信功能,自信迈入数字化时代
- 用服务器日志监控软件、服务器日志分析工具软件教你如何查看服务器日志?
- html图片加载不出来,图片相对路径问题
- Badboy录制提示脚本错误解决方案
- RPG游戏Demo学习笔记一
- 信签纸有虚线怎么写_写观后感的信签纸格式
- 我的NVIDIA开发者之旅——NVIDIA云原生技术
- 华为nova青春版是html手机吗,华为Nova青春版这款手机作为新青年良品:麒麟935+4G+64GB+18W快充...
- 安卓模拟器忘记密码,如何解锁
- 用注册表管理IE代理设置
- 无领导小组讨论中常见的派别
热门文章
- Wannafly挑战赛27: D. 绿魔法师(莫比乌斯函数)
- bzoj 4765: 普通计算姬(分块+树状数组)
- HDU 6156 2016ICPC网络赛 G: Palindrome Function(数位DP)
- 51nod-1422:沙拉酱前缀
- [python+pip] 使用pip将函数库安装到Python环境或Anaconda环境
- airflow部署和使用示例
- Druid 简介,架构,部署,python连接,hue链接druid
- 练习--第一次课(运算if while 字符编码)
- JVM学习之GC参数设置
- 将Sphinx的日志放置到/dev/shm里需要注意的事情