最近要将tf的模型移植到tpu平台,tpu设备肯定是不支持keras的,需要做函数的迁移。我计划所有keras的函数用numpy来实现,numpy的矩阵运算还是很快的。keras和numpy有很多功能相同的函数,但也要注意一些细节的区别。
concatenate函数
keras的该函数默认axis为-1(倒数第一个轴),而np的默认为0
tf.keras.layers.Concatenate(
axis=-1, **kwargs
)
np.concatenate()
sigmoid函数
这个函数在np中是没有的,需要自己写:
tf.keras.layers.sigmoid()
def sigmoid(x):
s = 1 / (1 + np.exp(-x))
return s
该函数还是比较简单的,但会有warning:
RuntimeWarning: overflow encountered in exp
这是因为inx中的值很大时,exp(inx)可能会发生溢出
所以需要继续优化:
def sigmoid(inx):
# 对sigmoid函数的优化,避免了出现极大的数据溢出
inx[inx>=0] = 1.0/(1+np.exp(-inx[inx>=0]))
inx[inx<0] = np.exp(inx[inx<0])/(1+np.exp(inx[inx<0]))
上述写法没有使用if语句来判断正负性,但运行还是比较慢的,虽然规避了warning,所以实际使用还是不推荐的,还是选择有warning的那种实现方法。
像tile等函数直接将keras换为np即可,但还有上述以及cast(换为np.array())等函数,需要改写。
这篇博客介绍了如何将基于TensorFlow的模型移植到TPU平台,重点在于理解TPU不支持Keras并需要转换为NumPy实现。作者详细比较了`concatenate`函数在Keras和NumPy中的区别,并提供了Sigmoid函数的自定义实现以避免数值溢出问题。还提到了像`tile`和`cast`等函数的转换方法,强调了在移植过程中需要注意的细节和性能优化。
985

被折叠的 条评论
为什么被折叠?



