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中用fork()函数生成的子进程
May 04 Python
Python3搜索及替换文件中文本的方法
May 22 Python
python实现汉诺塔方法汇总
Jul 25 Python
Pyhton中单行和多行注释的使用方法及规范
Oct 11 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
PYcharm 激活方法(推荐)
Mar 23 Python
python中id函数运行方式
Jul 03 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
python全栈开发语法总结
Nov 22 Python
python 如何在list中找Topk的数值和索引
May 20 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
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
Python做文本按行去重的实现方法
2016/10/19 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
用python解压分析jar包实例
2020/01/16 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
终止劳动合同协议书
2014/10/05 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
小学推普周活动总结
2015/05/07 职场文书
PHP实现两种排课方式
2021/06/26 PHP