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正则表达式中的括号匹配问题
Dec 14 Python
在Python下利用OpenCV来旋转图像的教程
Apr 16 Python
Windows下python2.7.8安装图文教程
May 26 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
python 用下标截取字符串的实例
Dec 25 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 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与jquery设置和读取cookies
2013/08/08 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
php中namespace及use用法分析
2016/12/06 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
jquery插件开发方法(初学者)
2012/02/03 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python检测是文件还是目录的方法
2015/07/03 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
Ajax的优点和缺点
2014/11/21 面试题
毕业生求职自荐书范文
2014/03/27 职场文书
股份合作协议书范本
2014/04/14 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
企业贷款委托书格式
2014/09/12 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
锅炉工岗位职责
2015/02/13 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android