Ordinal Pooling 神经网络的函数
Posted
技术标签:
【中文标题】Ordinal Pooling 神经网络的函数【英文标题】:function for Ordinal Pooling Neural network 【发布时间】:2021-11-03 03:55:59 【问题描述】:请我想创建一个计算 ,如下图所示:
这是我的功能:
def Ordinal_Pooling_NN(x):
wights = torch.tensor([0.6, 0.25, 0.10, 0.05])
top = torch.topk(x, 4, dim = 1)
wights = wights.repeat(x.shape[0], 1)
result = torch.sum(wights * (top.values), dim = 1 )
return result
但结果,我收到以下错误:
<ipython-input-112-ddf99c812d56> in Ordinal_Pooling_NN(x)
9 top = torch.topk(x, 4, dim = 1)
10 wights = wights.repeat(x.shape[0], 1)
---> 11 result = torch.sum(wights * (top.values), dim = 1 )
12 return result
RuntimeError: The size of tensor a (4) must match the size of tensor b (16) at non-singleton dimension 2
【问题讨论】:
【参考方案1】:您的实现实际上是正确的,我相信您没有使用 2D 张量来输入函数,输入必须有批处理轴。例如,下面的代码将运行:
>>> Ordinal_Pooling_NN(torch.tensor([[1.9, 0.4, 1.3, 0.8]]))
tensor([1.5650])
请注意,您不需要重复权重张量,它会在计算逐点乘法时自动广播。您只需要以下内容:
def Ordinal_Pooling_NN(x):
w = torch.tensor([0.6, 0.25, 0.10, 0.05])
top = torch.topk(x, k=4, dim=1)
result = torch.sum(w*top.values, dim=1)
return result
【讨论】:
以上是关于Ordinal Pooling 神经网络的函数的主要内容,如果未能解决你的问题,请参考以下文章
CNN 卷积神经网络 池化层Pooling 动手学深度学习v2 pytorch