python-使用numpy实现keras中的concatenate,sigmoid等函数

这篇博客介绍了如何将基于TensorFlow的模型移植到TPU平台,重点在于理解TPU不支持Keras并需要转换为NumPy实现。作者详细比较了`concatenate`函数在Keras和NumPy中的区别,并提供了Sigmoid函数的自定义实现以避免数值溢出问题。还提到了像`tile`和`cast`等函数的转换方法,强调了在移植过程中需要注意的细节和性能优化。
部署运行你感兴趣的模型镜像

最近要将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-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值