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 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
Python基础之函数用法实例详解
Sep 10 Python
Python探索之ModelForm代码详解
Oct 26 Python
分享一个简单的python读写文件脚本
Nov 25 Python
遗传算法python版
Mar 19 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
Python实现带下标索引的遍历操作示例
May 30 Python
python实现代码统计器
Sep 19 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
python分别打包出32位和64位应用程序
Feb 18 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 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实现多进程并行执行脚本
2013/06/18 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
django框架自定义用户表操作示例
2018/08/07 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
keras的三种模型实现与区别说明
2020/07/03 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
团员的自我评价
2013/12/01 职场文书
行政人员岗位职责
2013/12/08 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
房产公证书格式
2015/01/26 职场文书
继续教育个人总结
2015/03/03 职场文书
政协委员个人总结
2015/03/03 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书