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分割TXT文件成4K的TXT文件
May 23 Python
python使用arp欺骗伪造网关的方法
Apr 24 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
Python代码块批量添加Tab缩进的方法
Jun 25 Python
python存储16bit和32bit图像的实例
Dec 05 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
Python class的继承方法代码实例
Feb 14 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 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与javascript对多项选择的处理
2006/10/09 PHP
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python检测服务器是否正常
2014/02/16 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
岗位职责说明书
2014/05/07 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
好的促销活动方案
2014/08/21 职场文书
董事长助理岗位职责
2015/02/11 职场文书
毕业典礼主持词
2015/06/29 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS