{"record":{"id":"01b550fe57ace11c","repo":"keras-team/keras","slug":"invalid-padding-padding","errorCode":null,"errorMessage":"Invalid padding: {padding}","messagePattern":"Invalid padding: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/legacy/backend.py","lineNumber":464,"sourceCode":"        else:\n            tf_data_format = \"NCHW\"\n    return x, tf_data_format\n\n\ndef _preprocess_conv3d_input(x, data_format):\n    tf_data_format = \"NDHWC\"\n    if data_format == \"channels_first\":\n        tf_data_format = \"NCDHW\"\n    return x, tf_data_format\n\n\ndef _preprocess_padding(padding):\n    if padding == \"same\":\n        padding = \"SAME\"\n    elif padding == \"valid\":\n        padding = \"VALID\"\n    else:\n        raise ValueError(f\"Invalid padding: {padding}\")\n    return padding\n\n\n@keras_export(\"keras._legacy.backend.conv1d\")\ndef conv1d(\n    x, kernel, strides=1, padding=\"valid\", data_format=None, dilation_rate=1\n):\n    \"\"\"DEPRECATED.\"\"\"\n    if data_format is None:\n        data_format = backend.image_data_format()\n    if data_format not in {\"channels_first\", \"channels_last\"}:\n        raise ValueError(f\"Unknown data_format: {data_format}\")\n\n    kernel_shape = kernel.shape.as_list()\n    if padding == \"causal\":\n        # causal (dilated) convolution:\n        left_pad = dilation_rate * (kernel_shape[0] - 1)\n        x = temporal_padding(x, (left_pad, 0))","sourceCodeStart":446,"sourceCodeEnd":482,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/legacy/backend.py#L446-L482","documentation":"The deprecated backend's convolution/pooling helpers normalize the padding string via _preprocess_padding, which accepts only 'same' and 'valid' (mapped to TF's 'SAME'/'VALID'). Any other string — including uppercase 'SAME', 'causal' in functions that don't special-case it, or 'full' — raises this error before the TF op is built.","triggerScenarios":"Calling conv2d/conv1d/conv3d/depthwise_conv2d/pool2d/conv2d_transpose on keras._legacy.backend with padding='SAME', 'Full', 'reflect', or a typo like 'vaild'.","commonSituations":"Code copied from raw TensorFlow examples using uppercase 'SAME'/'VALID'; passing a generic padding knob from a higher-level API straight through to the legacy backend; forgetting that 'causal' is only supported by conv1d.","solutions":["Use lowercase 'same' or 'valid'","If you need 'causal' behavior, use conv1d (which special-cases it) or pad manually with temporal_padding before a 'valid' conv","Validate/normalize padding strings at your own API boundary before forwarding them"],"exampleFix":"// before\nout = K.conv2d(x, k, padding='SAME')\n\n// after\nout = K.conv2d(x, k, padding='same')","handlingStrategy":"type-guard","validationCode":"assert padding in ('same', 'valid'), f'padding must be same|valid, got {padding!r}'","typeGuard":"def is_valid_padding(p) -> bool:\n    return p in {'same', 'valid'}","tryCatchPattern":"except ValueError as e:\n    if 'padding' in str(e):\n        p = p.lower()\n        out = K.conv2d(x, k, padding='same' if p == 'same' else 'valid')\n    else:\n        raise","preventionTips":["Lowercase and validate padding at your API boundary","Never forward raw TF-style 'SAME'/'VALID' to legacy Keras backend","Property-test config parsers that emit padding strings"],"tags":["keras","tensorflow","convolution","padding","argument-validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}