Python kears Conv1D上的负维度大小

Python kears Conv1D上的负维度大小,python,keras,convolutional-neural-network,Python,Keras,Convolutional Neural Network,我正在使用Keras的模型api对大小为20的输入1D向量应用1D卷积。我要五粒,每粒3号。输入将为形状(无,1,20)(大小为20的1D向量的可变数量) 该模型的摘要如下: _________________________________________________________________ Layer (type) Output Shape Param # ==============================

我正在使用Keras的模型api对大小为20的输入1D向量应用1D卷积。我要五粒,每粒3号。输入将为形状
(无,1,20)
(大小为20的1D向量的可变数量)

该模型的摘要如下:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, None, 20)          0         
_________________________________________________________________
conv1d_1 (Conv1D)            (None, None, 5)           305       
_________________________________________________________________
dense_1 (Dense)              (None, None, 1)           6         
=================================================================
Total params: 311
Trainable params: 311
Non-trainable params: 0
train\u x
的形状为
(无,1,20)
train\u标签的形状为
(无,1)

错误来自卷积层-

    Caused by op 'conv1d_1/convolution/Conv2D', defined at:
  File "/home/user/Desktop/hack/imlhack2018/conv_nn.py", line 72, in <module>
    main()
  File "/home/user/Desktop/hack/imlhack2018/conv_nn.py", line 42, in main
    conv = Conv1D(filters=5, kernel_size=3, activation=keras.activations.relu, input_shape=(None,20, 1))(input)
  File "/home/user/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py", line 596, in __call__
    output = self.call(inputs, **kwargs)
  File "/home/user/anaconda3/lib/python3.6/site-packages/keras/layers/convolutional.py", line 156, in call
    dilation_rate=self.dilation_rate[0])
  File "/home/user/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 3116, in conv1d
    data_format=tf_data_format)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 670, in convolution
    op=op)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 338, in with_space_to_batch
    return op(input, num_spatial_dims, padding)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 662, in op
    name=name)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 116, in _non_atrous_convolution
    name=scope)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 2010, in conv1d
    data_format=data_format)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 399, in conv2d
    data_format=data_format, name=name)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op
    op_def=op_def)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 2506, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1269, in __init__
    self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): computed output size would be negative
     [[Node: conv1d_1/convolution/Conv2D = Conv2D[T=DT_FLOAT, data_format="NHWC", padding="VALID", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/cpu:0"](conv1d_1/convolution/ExpandDims, conv1d_1/convolution/ExpandDims_1)]]
由op'conv1d_1/卷积/Conv2D'引起,定义于:
文件“/home/user/Desktop/hack/imlhack2018/conv_nn.py”,第72行,在
main()
文件“/home/user/Desktop/hack/imlhack2018/conv_nn.py”,主文件第42行
conv=Conv1D(filters=5,kernel_size=3,activation=keras.activations.relu,input_shape=(无,20,1))(输入)
文件“/home/user/anaconda3/lib/python3.6/site packages/keras/engine/topology.py”,第596行,在调用中__
输出=自调用(输入,**kwargs)
文件“/home/user/anaconda3/lib/python3.6/site packages/keras/layers/convolutional.py”,第156行,调用中
膨胀率=自膨胀率[0])
conv1d中的文件“/home/user/anaconda3/lib/python3.6/site packages/keras/backend/tensorflow_backend.py”,第3116行
数据_格式=tf_数据_格式)
文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/nn_ops.py”,第670行,卷积格式
op=op)
文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/nn_ops.py”,第338行,带批处理空间
返回操作(输入、数字空间、填充)
文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/nn_ops.py”,第662行,op
名称=名称)
文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/nn_ops.py”,第116行,在非阿托拉斯卷积中
名称=范围)
文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/nn_ops.py”,第2010行,conv1d格式
数据格式=数据格式)
conv2d中的第399行文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/gen_nn_ops.py”
数据格式=数据格式,名称=名称)
文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/framework/op_def_library.py”,第767行,在apply_op
op_def=op_def)
文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/framework/ops.py”,第2506行,在create_op中
初始值=自身值。\默认值\初始值,初始值=初始值)
文件“/home/user/anaconda3/lib/python3.6/site packages/tensorflow/python/framework/ops.py”,第1269行,在__
self.\u traceback=\u extract\u stack()
InvalidArgumentError(回溯见上文):计算的输出大小为负数
[[Node:conv1d_1/Conv2D/Conv2D=Conv2D[T=DT_FLOAT,data_format=“NHWC”,padding=“VALID”,strips=[1,1,1,1],在/u gpu=true上使用/u cudnn\u,\u device=“/job:localhost/replica:0/任务:0/cpu:0”](conv1d_1/卷积/ExpandDims,conv1d_1/卷积/ExpandDims\u 1)]]
当我将
padding=“same”
添加到卷积层时,一切似乎都正常工作。这种行为的原因是什么?

您的输入形状是(1,20),它被解释为1个宽度,20个通道的数组。您可能需要相反的宽度,即宽度20和1通道。由于数组只有一个元素,在不填充相同元素的情况下执行卷积将导致负维度,从而产生错误


请注意,卷积总是在空间维度上执行,对于Conv1D,它是形状数组中倒数第二个维度。最后一个维度表示通道。

在正式文档中,它写道“当将此层用作模型的第一层时,提供一个输入形状参数(整数元组或无元组,不包括批处理轴)”。我很困惑,为什么它在输入层中声明了conv1D的输入形状,问题是?还包括model.summary()@MatiasValdenegro的输出问题当然是如何解决错误
    Caused by op 'conv1d_1/convolution/Conv2D', defined at:
  File "/home/user/Desktop/hack/imlhack2018/conv_nn.py", line 72, in <module>
    main()
  File "/home/user/Desktop/hack/imlhack2018/conv_nn.py", line 42, in main
    conv = Conv1D(filters=5, kernel_size=3, activation=keras.activations.relu, input_shape=(None,20, 1))(input)
  File "/home/user/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py", line 596, in __call__
    output = self.call(inputs, **kwargs)
  File "/home/user/anaconda3/lib/python3.6/site-packages/keras/layers/convolutional.py", line 156, in call
    dilation_rate=self.dilation_rate[0])
  File "/home/user/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 3116, in conv1d
    data_format=tf_data_format)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 670, in convolution
    op=op)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 338, in with_space_to_batch
    return op(input, num_spatial_dims, padding)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 662, in op
    name=name)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 116, in _non_atrous_convolution
    name=scope)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 2010, in conv1d
    data_format=data_format)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 399, in conv2d
    data_format=data_format, name=name)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op
    op_def=op_def)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 2506, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/home/user/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1269, in __init__
    self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): computed output size would be negative
     [[Node: conv1d_1/convolution/Conv2D = Conv2D[T=DT_FLOAT, data_format="NHWC", padding="VALID", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/cpu:0"](conv1d_1/convolution/ExpandDims, conv1d_1/convolution/ExpandDims_1)]]