如何在PyTorch中设置一个动态的内核大小?
我正在传递图像到我的网络,我想设置我的内核改变大小和步幅作为输入的离心率的函数。我也想用圆而不是平方的核。
这听起来可能吗?我试过了,但运气不佳。任何帮助将真的非常感谢!
编辑:只是为了更清楚:输入的图像都有相同的大小,我不需要改变内核大小一旦网络被初始化。我只需要一个conv层的行为或多或少像这样(底部的图片)。基本上,内核会随着偏心度的变化而改变大小,以便在中心具有高分辨率,而在外围具有越来越低的分辨率(通过汇集更大和重叠的区域)。
###是的,你可以在正向函数中轻松做到。
例如,在这段代码中,我调用一个布尔函数,如果结果是True,我使用conv1,否则我使用conv2。
def forward(self, x):
"""
In the forward function we accept a Tensor of input data and we must return
a Tensor of output data. We can use Modules defined in the constructor as
well as arbitrary operators on Tensors.
"""
if boolean_func(x):
x = self.conv1(x)
else:
x = self.conv2(x)
out = self.dense1(x)
return out
在这种情况下,你可以定义两个转换层,并根据输入的条件使用你想要的转换层。
在反向传播过程中,由于图形中存储的计算信息,您使用的层的权值将在没有任何干预的情况下被更新。