Python kears Conv1D上的负维度大小
我正在使用Keras的模型api对大小为20的输入1D向量应用1D卷积。我要五粒,每粒3号。输入将为形状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 # ==============================
(无,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)]]