Inputs should have rank 3. Received input shape: input_shape
Package:
keras
52268

Exception Class:
ValueError
Raise code
raise ValueError('Stride ' + str(self.strides) + ' must be '
'greater than output padding ' +
str(self.output_padding))
def build(self, input_shape):
input_shape = tf.TensorShape(input_shape)
if len(input_shape) != 3:
raise ValueError('Inputs should have rank 3. Received input shape: ' +
str(input_shape))
channel_axis = self._get_channel_axis()
if input_shape.dims[channel_axis].value is None:
raise ValueError('The channel dimension of the inputs '
'should be defined. Found `None`.')
input_dim = int(input_shape[channel_axis])
self.input_spec = InputSpec(ndim=3, axes={channel_axis: input_dim})
ke
Links to the raise (1)
https://github.com/keras-team/keras/blob/4a978914d2298db2c79baa4012af5ceff4a4e203/keras/layers/convolutional.py#L966See also in the other packages (1)
(❌️ No answer)
tensorflow/inputs-should-have-rank-3-rec
Ways to fix
When doing convolution using Conv1DTranspose
the input tensor should have rank 3. Any 4D tensor given to the layer causes this error.
Reproducing the error:
pipenv install tensorflow
from tensorflow.keras.layers import Conv1DTranspose
import numpy as np
filters=16
kernel_size=7
conv_layer = Conv1DTranspose(filters,
kernel_size,
strides=1,
padding='valid')
inp = np.arange(15).reshape((1,5, 3, 1)).astype(np.float32)
output = conv_layer(inp)
print(output.shape)
The error:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-15-94d4abacd6b4> in <module>()
8 padding='valid')
9 img = np.arange(15).reshape((1,5, 3, 1)).astype(np.float32)
---> 10 output = conv_layer(img)
11 print(output.shape)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, *args, **kwargs)
1021 with ops.name_scope_v2(name_scope):
1022 if not self.built:
-> 1023 self._maybe_build(inputs)
1024
1025 if self._autocast:
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py in _maybe_build(self, inputs)
2623 # operations.
2624 with tf_utils.maybe_init_scope(self):
-> 2625 self.build(input_shapes) # pylint:disable=not-callable
2626 # We must set also ensure that the layer is marked as built, and the build
2627 # shape is stored since user defined build functions may not be calling
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/layers/convolutional.py in build(self, input_shape)
965 if len(input_shape) != 3:
966 raise ValueError('Inputs should have rank 3. Received input shape: ' +
--> 967 str(input_shape))
968 channel_axis = self._get_channel_axis()
969 if input_shape.dims[channel_axis].value is None:
ValueError: Inputs should have rank 3. Received input shape: (1, 5, 3, 1)
Fix:
The input tensor to the convolution layer Conv1DTranspose
should be a 3D tensor in the form of (batch_size, steps, channels)
.
from tensorflow.keras.layers import Conv1DTranspose
import numpy as np
filters=16
kernel_size=7
conv_layer = Conv1DTranspose(filters,
kernel_size,
strides=1,
padding='valid')
img = np.arange(15).reshape((5, 3, 1)).astype(np.float32)
output = conv_layer(img)
print(output.shape)
Output:
(5, 9, 16)
Add a possible fix
Please authorize to post fix