【问题标题】:Lasagne 1D Convolution Error千层面一维卷积误差
【发布时间】:2016-02-01 22:42:34
【问题描述】:

我正在尝试使用 Lasagne 构建一个 CNN,我有 119 个特征变量。我能够使用 Lasagne 成功构建 MLP,但是当我尝试使用以下代码添加卷积层(使用 1D 卷积)时,出现错误。难道我做错了什么? Lasagne 中的一维卷积是否经过测试?

def build_custom_mlp(input_var, depth, width):
    network = lasagne.layers.InputLayer(shape=(None, 119), input_var=input_var)
    network = lasagne.layers.Conv1DLayer(network, num_filters=20, filter_size=10,
              stride=1, pad=1, nonlinearity=lasagne.nonlinearities.rectify)
    network = lasagne.layers.Pool1DLayer(network, pool_size=2)
    nonlin = lasagne.nonlinearities.rectify
    network = lasagne.layers.DenseLayer(network, width, nonlinearity=nonlin)
    # Output layer:
    relu = lasagne.nonlinearities.rectify
    network = lasagne.layers.DenseLayer(network, 60, nonlinearity=relu)
    return network

文件“/Users/adityanagarajan/anaconda/lib/python2.7/site-packages/lasagne/layers/dense.py”,第 63 行,在 __init__ super(DenseLayer, self).__init__(incoming, **kwargs) 文件“/Users/adityanagarajan/anaconda/lib/python2.7/site-packages/lasagne/layers/base.py”,第 35 行,在 __init__ self.input_shape = 传入.output_shape 文件“/Users/adityanagarajan/anaconda/lib/python2.7/site-packages/lasagne/layers/base.py”,第 49 行,位于 output_shape 返回 self.get_output_shape_for(self.input_shape) 文件“/Users/adityanagarajan/anaconda/lib/python2.7/site-packages/lasagne/layers/conv.py”,第 237 行,在 get_output_shape_for output_length = conv_output_length(input_shape[2], IndexError: 元组索引超出范围

【问题讨论】:

    标签: python neural-network conv-neural-network lasagne


    【解决方案1】:

    错误告诉你答案:

    第 237 行,在 get_output_shape_for output_length = conv_output_length(input_shape[2], IndexError: tuple index out of range

    如果您检查第 237 行上的 source,则会尝试对其中没有 3 个元素的元组进行索引。如果您重塑数据,它应该可以解决错误,请尝试 (None, 1, 119) 作为您的输入。

    【讨论】:

    • 是的,我试过了,但我的 input_var 是 Theano 张量 input_var = T.dmatrix('inputs') ,所以当我使用 (None,1,119)ValueError: shape has 3 dimensions, but variable has 2 时出现错误。我想知道为什么元组的一维卷积长度必须为 3(input_shape[2])。
    • 是的,您需要将 input_var 更改为 T.tensor3()。 Theano 没有一维卷积。 Lasagne 的人写了扩展来“伪造”它们。 Conv1DLayer()的默认conv函数是conv1d_mc0();你可以看到它的实现here。 2D-conv 有一个 4D 输入:(batch_size, channel, height, width)。所以一维卷积有输入(batch_size、channel、length)。您正在输入 (batch_size, length) 这是一个 0D-conv (这甚至不是一件事而且没有意义)。
    • 谢谢!使用 T.tensor3() 并重塑为 (num_examples,1,119) 并且工作正常。
    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多