概述
1. 问题描述
LZ在使用tensorflow训练好对应的模型,并转成caffemodel后,将模型交由前端同事的时候,前端同事转成wk文件后,发现推断结果与caffemodel结果相差很大,后来经过逐层排查后发现海思芯片的tanh与caffe或者tf中的实现有一定差异,会导致结果相差很大,于是LZ准备使用Sigmoid的进行替代,
2. 解决方法
但是因为网络物理含义的需求,需要经过激活函数后,feature map的值要在(-1, 1)之间,显然单纯Sigmoid是不满足这一要求的,于是,我们可以通过两者的公式进行等价
t a n h ( x ) = 2 ∗ σ ( 2 x ) − 1 tanh(x) = 2*sigma(2x)-1 tanh(x)=2∗σ(2x)−1
其中
σ
(
x
)
=
e
x
/
(
1
+
e
x
)
sigma(x)=e^x/(1+e^x)
σ(x)=ex/(1+ex)
也和前端同事确认了海思在sigmoid上的误差很小,于是使用上述的等式进行替换。
3. Toy example
我们可以进行一个小测试!
import tensorflow as tf
import numpy as np
inputs = np.random.rand(5, 5)-0.5
print(inputs)
[[-0.07570021 -0.22391657 0.12031656 -0.07412661 0.02280513]
[ 0.43490949 0.05654585 0.30623752 -0.43225458 0.41053218]
[-0.29675026 0.02783143 -0.13659314 -0.34200988 0.11406029]
[ 0.11330576 0.21211356 0.14819943 0.44995595 0.23811879]
[-0.08725294 -0.1411123 -0.15858117 0.26021318 -0.33454138]]
tanh_res = tf.nn.tanh(inputs)
sess=tf.Session()
print(sess.run(tanh_res))
[[-0.07555594 -0.22024784 0.11973933 -0.07399113 0.02280118]
[ 0.40941606 0.05648566 0.29701037 -0.40720377 0.38892446]
[-0.28833585 0.02782425 -0.13574993 -0.32927055 0.11356822]
[ 0.11282336 0.20898864 0.14712391 0.42186279 0.23371809]
[-0.08703219 -0.14018306 -0.15726508 0.25449491 -0.32259549]]
sigmoid_res = 2*tf.nn.sigmoid(inputs*2)-1
print(sess.run(sigmoid_res))
[[-0.07555594 -0.22024784 0.11973933 -0.07399113 0.02280118]
[ 0.40941606 0.05648566 0.29701037 -0.40720377 0.38892446]
[-0.28833585 0.02782425 -0.13574993 -0.32927055 0.11356822]
[ 0.11282336 0.20898864 0.14712391 0.42186279 0.23371809]
[-0.08703219 -0.14018306 -0.15726508 0.25449491 -0.32259549]]
表明了Tanh函数和Sigmoid之间的转换关系!
最后
以上就是平常学姐为你收集整理的Tensorflow:Tanh和Sigmoid之间的关系(前端移植的一个坑)1. 问题描述2. 解决方法3. Toy example的全部内容,希望文章能够帮你解决Tensorflow:Tanh和Sigmoid之间的关系(前端移植的一个坑)1. 问题描述2. 解决方法3. Toy example所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复