首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用标量相乘的特征图

用标量相乘的特征图
EN

Stack Overflow用户
提问于 2020-01-22 04:26:23
回答 1查看 932关注 0票数 0

我有一个二值分类问题,在数据集中有图像和变量,我有一个比较图像和变量的想法。

每次通过conv层时,我都希望将权重标量乘以所有特征映射,其中权重标量是从fc层计算出来的。

例如,假设批处理大小为8,存在两个张量x1x2,其中x1的大小为(8,3,224,224),x2的大小为(8,16)。

代码语言:javascript
复制
import torch 
from torch.nn import Module, Sequential
from torch.nn import Conv2d, BatchNorm2d, ReLU, MaxPool2d, Softmax, Linear
import numpy
batch_size = 8
x1 = torch.rand(batch_size*3*224*224).view(batch_size,3,224,224)
x2 = torch.rand(batch_size*16).view(batch_size,16)

定义了conv层和fc层,并计算了图像和变量的输出.

代码语言:javascript
复制
conv_01 = Conv2d(in_channels=3, out_channels= 9, kernel_size=3, stride=1, padding=1)
linear_02 = Linear(16, 1)
c1 = conv_01(x1) ## torch.Size([8, 9, 224, 224])
c2 = linear_02(x2) ## torch.Size([8, 1])

问题是按照下面的步骤编写合适的代码。

代码语言:javascript
复制
## I want to do like blow
## c1[0,:,:,:] = c1[0,:,:,:] * c2[0,0] # 1st data in the mini-batch
## c1[1,:,:,:] = c1[1,:,:,:] * c2[0,1] # 2nd data in the mini-batch
## c1[2,:,:,:] = c1[2,:,:,:] * c2[0,2]
## c1[3,:,:,:] = c1[3,:,:,:] * c2[0,3]
## c1[4,:,:,:] = c1[4,:,:,:] * c2[0,4]
## c1[5,:,:,:] = c1[5,:,:,:] * c2[0,5]
## c1[6,:,:,:] = c1[6,:,:,:] * c2[0,6]
## c1[7,:,:,:] = c1[7,:,:,:] * c2[0,7]
## output is a (8, 9, 224, 224)
## and do more layer like this operation

我已经看过用可学习标量相乘特征映射了。但这只支持批处理大小为1时,但在我的情况下,批处理大小大于1。在我的情况下,如何为转发函数编写合适的代码?非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2020-01-22 06:13:57

代码语言:javascript
复制
result = c1 * c2.reshape((-1,1,1,1))

您可以使用c2 torch.Size([8, 1])torch.Size([8, 1, 1, 1])形状重组为torch.Size([8, 1, 1, 1]),这样就可以使用c1 shape torch.Size([8, 9, 224, 224])进行乘法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59852613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档