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局部赋值的规则
Mar 07 Python
Python素数检测的方法
May 11 Python
Django的session中对于用户验证的支持
Jul 23 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 Python
tensorflow获取变量维度信息
Mar 10 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
Django基础知识 web框架的本质详解
Jul 18 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
结束运行python的方法
Jun 16 Python
解决Django transaction进行事务管理踩过的坑
Apr 24 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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 smarty函数扩展
2010/03/15 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python reduce函数作用及实例解析
2020/05/08 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
用python实现一个简单的验证码
2020/12/09 Python
国际商务系学生个人的自我评价
2013/11/26 职场文书
计算机专业推荐信范文
2013/11/27 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
洗车工岗位职责
2014/03/15 职场文书
党员目标管理责任书
2014/07/25 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书