【问题标题】:How to do pairwise addition in tensorflow如何在张量流中进行成对加法
【发布时间】:2016-11-11 09:46:51
【问题描述】:

我是 tensorflow 的新手,所以这可能是一个简单的问题,但它确实困扰着我
我正在尝试通过 keras 实现这个 paper,背景是 tensorflow
在第一阶段的训练中,他使用了softmax_pair
如果我们从上一个 fc 得到这个输出
垂直是批量大小,这是 NoneType

x11 x12 x13 x14...   
x21 x22 x23 x24...   
x31 x32 x33 x34...
...

我们做指数,所以我们有

e11 e12 e13 e14...   
e21 e22 e23 e24...   
e31 e32 e33 e34...
...

然后,我被困在这里

e11/(e11+e12) e12/(e11+e12) e13/(e13+e14) e14/(e13+e14)...
e21/(e21+e22) e22/(e21+e22) e23/(e23+e24) e24/(e23+e24)...
e31/(e31+e32) e32/(e31+e32) e33/(e33+e34) e34/(e33+e34)...
...

我不知道如何进行成对加法
tf.transposetf.segment_sum 可能很棒
但经过研究我发现转置很昂贵
此外,在tf.segment_sum 之后,我只有一半大小的张量, 我不知道如何加倍它
哦,我正在考虑如何生成segment_ids

那么我该如何计算呢? 谢谢!!

---------更新
我在论文中讲的部分是图3
fc 输出为 P2c-1 和 P2c,表示 c 类出现或不出现在图像中的平均可能性
c=1,2,3...类数

转置不贵吗?有时我会看到这个,例如the comment,可能我理解错了吧?

tf.transpose 的 tensorflow 文档指出,与 numpy tensorflow 不同,它返回一个新的张量 -> 内存。

【问题讨论】:

  • 你在讨论论文的哪一部分?列数总是4吗?为什么你认为转置很贵?

标签: tensorflow deep-learning keras


【解决方案1】:

假设X 是您的张量R x C

_, C = X.get_shape()
X_split = tf.split(1, C/2, X)
Y_split = [tf.nn.softmax(slice) for slice in X_split]
Y = tf.concat(1, Y_split)

C 将是列数,X_split 将是子张量列表,每个子张量有两列,Y_split 将为每个张量计算常规 softmax,Y 将加入结果softmax。

【讨论】:

  • 谢谢!!我google了几天,这么优雅的代码,关于你的问题我更新帖子请看
猜你喜欢
  • 2021-07-08
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 2019-04-13
  • 2018-06-30
相关资源
最近更新 更多