双线性池化(Bilinear Pooling)tensorflow代码

本文介绍了如何使用Tensorflow实现双线性池化(Bilinear Pooling)。通过引用GitHub上的Bilinear-CNN-TensorFlow项目,展示了如何处理不同形状的数据,并解释了代码中涉及的tf.einsum操作以及为什么要除以784.0的细节。
摘要由CSDN通过智能技术生成

Bilinear-CNN-Tensorflow来源:https://github.com/abhaydoke09/Bilinear-CNN-TensorFlow/

def bilenear_pooling(x,y):
    x_len = x.shape.as_list()[1]
    y_len = y.shape.as_list()[1]
    phi_I = tf.einsum('im,in->imn', x, y)  # 1 5 7
    phi_I = tf.reshape(phi_I, [-1, x_len * y_len])
    # phi_I = tf.divide(phi_I,784.0) # 用于规范化 在 784 维上求和 将该求和归一化,以防止值取巨大的值。
    y_ssqrt = tf.multiply(tf.sign(phi_I), tf.sqrt(tf.abs(phi_I) + 1e-12))
    z_l2 = tf.nn.l2_normalize(y_ssqrt, dim=1)  # batchsize*mn
    return tf.squeeze(z_l2,[2])

我的数据:

x:[batch_size,xlen]

y:[batch_size,ylen]

输出:

[batch_size,xlen*ylen]

如果你的shape跟我的不一样,相应地修改这部分:phi_I = tf.einsum('im,in->imn', x, y)

参考git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值