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函数编程的一些特性
Apr 13 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
python 多个参数不为空校验方法
Feb 14 Python
解决python有时候import不了当前的包问题
Aug 28 Python
Python装饰器用法与知识点小结
Mar 09 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
浅谈Python项目的服务器部署
Apr 25 Python
学会Python数据可视化必须尝试这7个库
Jun 16 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根据IP判断地区名信息的示例代码
2014/03/03 PHP
php实现购物车功能(下)
2016/01/05 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
Javascript MD4
2006/12/20 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
Python 初始化多维数组代码
2008/09/06 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
印度网上药店:1mg
2017/10/13 全球购物
几道PHP面试题
2013/04/14 面试题
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
儿科护士自我鉴定
2013/10/14 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
政府门卫岗位职责
2014/04/29 职场文书
校运动会广播稿300字
2014/10/07 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
辞职信如何写
2015/02/27 职场文书
2014年终个人总结报告
2015/03/09 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
Python基础之数据结构详解
2021/04/28 Python