keras自定义网络层
在深度学习领域,Keras是一个高度封装的库并被广泛应用,可以通过调用其内置网络模块(各种网络层)实现针对性的模型结构;当所需要的网络层功能不被包含时,则需要通过自定义网络层或模型实现。
如何在keras框架下自定义层,基本“套路”如下。
一般地,keras中的网络层是一个类,所以自定义层即编写一个类,更为重要的是这个类(即自定义层)需要继承Layer父类,而且需要实现以下四种方法:
- __init __ (self, output_dim, **kwargs)
这个方法是用来初始化并自定义自定义层所需的属性,比如output_dim;
此外,该方法需要执行super().__init __(**kwargs),这行代码是执行Layer类中的初始化函数;
当执行上述代码就没有必要去管input_shape,weights,trainable等关键字参数,因为父类(Layer)的初始化函数实现了它们与layer实例的绑定。
- build(self, input_shape)
这个方法是用来创建层的权重;
在该方法中,根据之前的继承,通过Layer类的add_weight方法来自定义并添加一个权重矩阵,这个方法需要input_shape参数;
该方法必须设self.built = True,目的是为了保证这个层的权重定义函数build被执行过了;
在built函数中,需要说明这个权重各方面的属性,比如shape、初始化方式以及可训练性等信息。
- call(self, x)
这个方法是用来编写层的功能逻辑;
在该方法中,需要关注传入call的第一个参数:输入张量x;x只能是一种形式变量,不能是具体的变量,即它不能被定义;
这个call函数就是该层的计算逻辑,当创建好这个层实例后,该实例可以执行call函数;
可见,这个层的核心应该是一段符号式的输入张量到输出张量的计算过程。
- compute_output_shape(self, input_shape)
这个方法是用来保证输出shape是正确的;
这里重写compute_output_shape方法去覆盖父类中的同名方法,来保证输出的shape符合实际;
父类Layer中的compute_output_shape方法直接返回的是input_shape这明显是不对的,所以需要重写该方法。
示例
结合官方文档的例子,给出如下一个自定义层的代码:
使用自定义层,就如同使用keras内置网络层一样,如下图所示:(另外,本例使用kears内置的激活函数层ReLU承接自定义层的输出,从而避免将激活函数的功能加入到自定义层中)
keras自定义网络层的更多相关文章
- Keras自定义评估函数
1. 比较一般的自定义函数: 需要注意的是,不能像sklearn那样直接定义,因为这里的y_true和y_pred是张量,不是numpy数组.示例如下: from keras import backe ...
- Keras 自定义层
1.对于简单的定制操作,可以通过使用layers.core.Lambda层来完成.该方法的适用情况:仅对流经该层的数据做个变换,而这个变换本身没有需要学习的参数. # 切片后再分别进行embeddin ...
- keras 自定义 custom 函数
转自: https://kexue.fm/archives/4493/,感谢分享! Keras是一个搭积木式的深度学习框架,用它可以很方便且直观地搭建一些常见的深度学习模型.在tensorflow出来 ...
- 『开发技巧』Keras自定义对象(层、评价函数与损失)
1.自定义层 对于简单.无状态的自定义操作,你也许可以通过 layers.core.Lambda 层来实现.但是对于那些包含了可训练权重的自定义层,你应该自己实现这种层. 这是一个 Keras2.0 ...
- pytorch自定义网络层以及损失函数
转自:https://blog.csdn.net/dss_dssssd/article/details/82977170 https://blog.csdn.net/dss_dssssd/articl ...
- keras自定义padding大小
1.keras卷积操作中border_mode的实现 def conv_output_length(input_length, filter_size, border_mode, stride): i ...
- 【TensorRT】自定义网络层的实现custom layers
参考 1. Extending TensorRT With Custom Layers; 2. TensorRT Samples: MNIST(Plugin, add a custom layer); ...
- keras中保存自定义层和loss
在keras中保存模型有几种方式: (1):使用callbacks,可以保存训练中任意的模型,或选择最好的模型 logdir = './callbacks' if not os.path.exists ...
- [深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心)
[深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心) 配合阅读: [深度概念]·Attention机制概念学习笔记 [TensorFlow深度学习深入]实战三·分别使用 ...
随机推荐
- Spring Cloud Alibaba学习笔记
引自B站楠哥:https://space.bilibili.com/434617924 一.创建父工程 创建父工程hello-spring-cloud-alibaba Spring Cloud Ali ...
- pymysql模块使用介绍
pymysql 我们要学的pymysql就是用来在python程序中如何操作mysql,本质上就是一个套接字客户端,只不过这个套接字客户端是在python程序中用的,既然是客户端套接字,应该怎么用 ...
- 前端面试之JavaScript中this的指向【待完善!】
JavaScript中this的指向问题! 另一个特殊的对象是 this,它在标准函数和箭头函数中有不同的行为. 在标准函数中, this 引用的是把函数当成方法调用的上下文对象,这时候通常称其为 t ...
- 基于final shell的linux命令
final shell操作教程: 1.查看API实时日志:cd ../../data/log/api tail -100f anyAPI-server.log2.关闭日志:control+c3.恢复实 ...
- XA Transactions
XA Transactions XA is a two-phase commit protocol that is natively supported by many databases and t ...
- (Sqlserver)sql求连续问题
题目一:create table etltable( name varchar(20) , seq int, money int); create table etltarget ( name var ...
- Android使用代码开关Location服务
Android系统中,只有系统设置里面有入口开关位置服务.其他的应用应该怎么去开关这个服务呢? 首先,应用需要有系统权限(签名),在这基础上,我们就可以通过一些手段来实现这个功能. 这里要注意一点,不 ...
- 【算法】ST表
想学习一下LCA倍增,先 水一个黄题 学一下ST表 ST表 介绍: 这是一个运用倍增思想,通过动态规划来计算区间最值的算法 算法步骤: 求出区间最值 回答询问 求出区间最值: 用f[i][j]来存储从 ...
- Flutter GetX使用---简洁的魅力!
前言 使用Bloc的时候,有一个让我至今为止十分在意的问题,无法真正的跨页面交互!在反复的查阅官方文档后,使用一个全局Bloc的方式,实现了"伪"跨页面交互,详细可查看:flutt ...
- c++复习笔记(4)
这一篇是另一篇各种琐碎东西的笔记. 类型转换可以通过类型转换函数,或者构造函数来实现.但是一般来说类型转换指的是类型转换函数. 类型转换函数不需要声明输出类型(因为输出类型是固定的),也没有参数,同时 ...