【问题标题】:How to control input feature size/dimension in chainer?如何控制chainer中的输入特征大小/尺寸?
【发布时间】:2019-08-22 11:39:16
【问题描述】:

例如,FC 层(L.Linear)需要 input_size 和 output_size ,但这只是为 FC 中的权重矩阵设置的。但是输入图像大小可以是任意的,如何控制限制输入图像大小或输入其他特征大小?

【问题讨论】:

    标签: chainer


    【解决方案1】:

    我制作了一个新的池化函数来考虑 Chainer 中的特定输出形状:

    # pooling_func : F.max_pooling_2d or F.average_pooling_2d
    def output_shape_pooling(self, x,output_size , pooling_func):
           input_size  = x.shape[-1]
           stride = input_size // output_size
           k_size = input_size - (output_size -1 ) * stride
           x      = pooling_func(x , stride=stride,ksize=k_size)
           return x 
    

    【讨论】:

      【解决方案2】:

      线性链接可以定义为两种方式

      1. 明确指定 input_size

        l1 = L.Linear(input_size, output_size)
        
      2. 推断输入大小

        l1 = L.Linear(None, output_size)
        # Following code works same way, from chainer v2
        # l1 = L.Linear(output_size)
        

      当使用第二种方法时,输入大小在第一次前向计算时自动确定(并创建权重矩阵),并且此输入大小在前向计算后固定。

      在你的情况下,你在卷积层之后使用FC层吗(这是CNN中图像分类网络的常见结构)? 在这种情况下,我猜图像大小应该始终与第一次前向计算相同(除非图像大小被全局池等忽略)。 我是否正确理解了您的问题?

      【讨论】:

      • 我的问题比这个更复杂,我的意思是,当我自定义自己定义Link时,如何限制输入特征大小,或者不需要这样做?只设置我的权重矩阵就足够了,就像 L.Linear?如何限制用户输入特征(例如单词维度、图像维度?)
      • 为什么要限制它?
      • 因为我的权重形状取决于输入特征,就像 L.Linear
      • 那你能参考一下线性链接实现代码github.com/chainer/chainer/blob/v3.0.0rc1/chainer/links/…,以满足你的规范吗?
      猜你喜欢
      • 2020-08-20
      • 2016-06-11
      • 2014-09-12
      • 2012-10-05
      • 1970-01-01
      • 2018-07-02
      • 2018-01-15
      • 1970-01-01
      • 2020-04-11
      相关资源
      最近更新 更多