tensorflow自定义激活函数实例


Posted in Python onFebruary 04, 2020

前言:因为研究工作的需要,要更改激活函数以适应自己的网络模型,但是单纯的函数替换会训练导致不能收敛。这里还有些不清楚为什么,希望有人可以给出解释。查了一些博客,发现了解决之道。下面将解决过程贴出来供大家指正。

1.背景

之前听某位老师提到说tensorflow可以在不给梯度函数的基础上做梯度下降,所以尝试了替换。我的例子时将ReLU改为平方。即原来的激活函数是 tensorflow自定义激活函数实例 现在换成 tensorflow自定义激活函数实例

单纯替换激活函数并不能较好的效果,在我的实验中,迭代到一定批次,准确率就会下降,最终降为10%左右保持稳定。而事实上,这中间最好的训练精度为92%。资源有限,问了对神经网络颇有研究的同学,说是激活函数的问题,然而某篇很厉害的论文中提到其精度在99%,着实有意思。之后开始研究自己些梯度函数以完成训练。

2.大概流程

首先要确定梯度函数,之后将其处理为tf能接受的类型。

2.1定义自己的激活函数

def square(x):
 return pow(x, 2)

2.2 定义该激活函数的一次梯度函数

def square_grad(x):
 return 2 * x

2.3 让numpy数组每一个元素都能应用该函数(全局)

square_np = np.vectorize(square)
square_grad_np = np.vectorize(square_grad)

2.4 转为tf可用的32位float型,numpy默认是64位(全局)

square_np_32 = lambda x: square_np(x).astype(np.float32)
square_grad_np_32 = lambda x: square_grad_np(x).astype(np.float32)

2.5 定义tf版的梯度函数

def square_grad_tf(x, name=None):
 with ops.name_scope(name, "square_grad_tf", [x]) as name:
 y = tf.py_func(square_grad_np_32, [x], [tf.float32], name=name, stateful=False)
 return y[0]

2.6 定义函数

def my_py_func(func, inp, Tout, stateful=False, name=None, my_grad_func=None):
 # need to generate a unique name to avoid duplicates:
 random_name = "PyFuncGrad" + str(np.random.randint(0, 1E+8))
 tf.RegisterGradient(random_name)(my_grad_func)
 g = tf.get_default_graph()
 with g.gradient_override_map({"PyFunc": random_name, "PyFuncStateless": random_name}):
 return tf.py_func(func, inp, Tout, stateful=stateful, name=name)

2.7 定义梯度,该函数依靠上一个函数my_py_func计算并传播

def _square_grad(op, pred_grad):
 x = op.inputs[0]
 cur_grad = square_grad(x)
 next_grad = pred_grad * cur_grad
 return next_grad

2.8 定义tf版的square函数

def square_tf(x, name=None):
 with ops.name_scope(name, "square_tf", [x]) as name:
 y = my_py_func(square_np_32,
   [x],
   [tf.float32],
   stateful=False,
   name=name,
   my_grad_func=_square_grad)
 return y[0]

3.使用

跟用其他激活函数一样,直接用就行了。input_data:输入数据。

h = square_tf(input_data)

over. 学艺不精,多多指教!

以上这篇tensorflow自定义激活函数实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解决方案:WindowsError: [Error 2]
Aug 28 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
简单谈谈Python的pycurl模块
Apr 07 Python
浅谈Python基础—判断和循环
Mar 22 Python
Python检测数据类型的方法总结
May 20 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
简单了解python数组的基本操作
Nov 26 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
python 常见的排序算法实现汇总
Aug 21 Python
Python random模块的使用示例
Oct 10 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 #Python
pytorch梯度剪裁方式
Feb 04 #Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 #Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
Feb 04 #Python
python求一个字符串的所有排列的实现方法
Feb 04 #Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 #Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 #Python
You might like
global.php
2006/12/09 PHP
获取远程文件大小的php函数
2010/01/11 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
浅析php创建者模式
2014/11/25 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
jQuery 使用手册(三)
2009/09/23 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
python实现清屏的方法
2015/04/30 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
django之自定义软删除Model的方法
2019/08/14 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
职业生涯规划设计步骤
2014/01/12 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
525心理健康活动总结
2015/05/08 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
高一数学教学反思
2016/02/18 职场文书
js实现自动锁屏功能
2021/06/02 Javascript