自定义层多输出时需要list包装

在自定义层多输出时,需要在计算compute_output_shape 和 call 中
将返回结果用 [ ] 包装。
如:return output, indices 会封装成( output, indices)所以会有’tuple’ object has no attribute '_keras_shape’错误。
如:compute_output_shape中,return shape1, shape2结果会自动加(shape1, shape2)最后封装成[(shape1, shape2)],这样维度就改变了,会有list 越界错误。

方法:

改成return [value1, value2] , return [shape1, shape2]

    def call(self, inputs):
        res_es1 = inputs

        res_es1 = K.tanh(K.dot(res_es1, self.Ws1))
        res_att = K.softmax(K.dot(res_es1, self.Ws2))
        res_es2 = K.batch_dot(res_att,inputs, axes=(1,1))  #shape(batch, r, hidden)

        #计算l2 loss,使得每个分量所表示的尽量不同
        l2_loss = K.batch_dot(res_es2, res_es2, axes=(2,2))
        one_diago = K.ones_like(l2_loss)
        loss_value = K.sum(K.square(l2_loss - one_diago))

        return [res_es2, loss_value]  #(res_es2, loss_value)表示tuple

    def compute_output_shape(self, input_shape):
        return [(None,self.r, input_shape[2]) , (1,)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花咪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值