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中操作文件之read()方法的使用教程
May 24 Python
Python实现购物车程序
Apr 16 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
selenium+python自动化测试之页面元素定位
Jan 23 Python
django富文本编辑器的实现示例
Apr 10 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
May 11 Python
python中元组的用法整理
Jun 15 Python
openCV提取图像中的矩形区域
Jul 21 Python
python实现腾讯滑块验证码识别
Apr 27 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 动态执行带有参数的类方法
2009/04/10 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
动态加载js的几种方法
2006/10/23 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
学生出入校管理制度
2014/01/16 职场文书
平安校园建设方案
2014/05/02 职场文书
中秋节活动总结
2014/08/29 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
大足石刻导游词
2015/02/02 职场文书
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB
mysql中关键词exists的用法实例详解
2022/06/10 MySQL