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

最近要将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())等函数,需要改写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值