keras中使用Lambda封装使用tf的函数经验记录(包含传入多个参数遇到的坑)

有很多函数是tf特有的,如果在keras模型中混用这些tf的函数,程序就会报错:提示你不是keras tensor
那么这个时候就需要我们利用Lambda对tf的函数进行封装,最后利用keras.layer.Lambda把结果转成keras tensor即可~

我当时还遇到了一个问题:Lambda函数传两个参数的时候,会报TypeError: __init__() takes 2 positional argument but 3 were given,倒腾了半天,最终解决方法是:传参的时候加中括号[],自定义函数里面通过索引访问传入的列表,比如:x[0],x[1],x[2],…

(这个方法是自己试出来的,因为在网上确实没搜到针对该问题的解决方案,真的是自己半猜半试出来的)

  • 使用前先导包
from keras.layer import Lambda
  • 下面是封装的tf的矩阵维度转换和矩阵乘法的函数
# 自定义封装矩阵维度转换
def my_permute(self, x):
        theta_d = tf.transpose(x, (0, 2, 1))
        return theta_d

# 自定义封装矩阵乘法
def my_matmul(self, x):
    res = tf.matmul(x[0], x[1])
    return res

theta_d = Lambda(self.my_permute)(theta_d)
SelfGuid = Lambda(self.my_matmul)([theta_d, phi_d])
  • 无关的小补充:keras中add的函数传入的参数需要用中括号括起来~
from keras.layer import add
res = add([x,y])
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值