![](/img/trans.png)
[英]Multiple Conv1D Layers: Negative dimension size caused by subtracting 8 from 1 for 'conv1d_2/convolution/Conv2D
[英]negative dimension size on kears Conv1D
我正在使用Keras
的模型api將1D卷積應用於大小為20的輸入1d向量。我想要每個大小為3的五個內核。 輸入將具有(None, 1,20)
形狀(None, 1,20)
大小為20的可變數量的1D向量)。
input = Input(shape=(1, 20))
conv = Conv1D(filters=5, kernel_size=3, activation=keras.activations.relu, input_shape=(None,20, 1))(input)
dense =dense(1)(conv)
model = Model(inputs=input, outputs=dense)
model.compile(loss=nn.customLoss, optimizer='adam')
history = model.fit(train_X, train_labels, batch_size=50,
epochs=15, validation_split=0.2)
該模型的摘要是-
_________________________________________________________________
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_x
的形狀為(None, 1, 20)
train_labels
(None, 1, 20)
, train_labels
的形狀為(None, 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)]]
當我在卷積層中添加padding="same"
,一切似乎都工作正常。 這種行為的原因是什么?
您的輸入形狀為(1,20),它被解釋為1寬度,20通道的數組。 您可能想要相反的選擇,即寬度20和1通道。 由於數組只有一個元素,因此在不使用SAME填充的情況下執行卷積將導致負數維,從而產生錯誤。
請注意,卷積始終在空間維度上執行,對於Conv1D,該維度是形狀數組中倒數第二個維度。 最后一個維度代表渠道。
在官方文檔中,它寫道:“當將此層用作模型的第一層時,請提供input_shape參數(整數元組或None,不包括批處理軸)”。 我很困惑,為什么它在輸入層中聲明了conv1D的輸入形狀之后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.