diff --git a/rules/S6919/metadata.json b/rules/S6919/metadata.json new file mode 100644 index 00000000000..2c63c085104 --- /dev/null +++ b/rules/S6919/metadata.json @@ -0,0 +1,2 @@ +{ +} diff --git a/rules/S6919/python/metadata.json b/rules/S6919/python/metadata.json new file mode 100644 index 00000000000..66721e0bb72 --- /dev/null +++ b/rules/S6919/python/metadata.json @@ -0,0 +1,24 @@ +{ + "title": "The \"input_shape\" parameter should not be specified for \"tf.keras.Model\" subclasses", + "type": "CODE_SMELL", + "status": "ready", + "remediation": { + "func": "Constant\/Issue", + "constantCost": "5min" + }, + "tags": [ + ], + "defaultSeverity": "Major", + "ruleSpecification": "RSPEC-6919", + "sqKey": "S6919", + "scope": "All", + "defaultQualityProfiles": ["Sonar way"], + "quickfix": "unknown", + "code": { + "impacts": { + "MAINTAINABILITY": "HIGH", + "RELIABILITY": "MEDIUM" + }, + "attribute": "CONVENTIONAL" + } +} diff --git a/rules/S6919/python/rule.adoc b/rules/S6919/python/rule.adoc new file mode 100644 index 00000000000..e1092d13237 --- /dev/null +++ b/rules/S6919/python/rule.adoc @@ -0,0 +1,38 @@ +This rule raises an issue when the `input_shape` is specified in a `tensorflow.keras.Model` subclass. + +== Why is this an issue? + +Keras provides a full-featured model class called `tensorflow.keras.Model`. It inherits from `tensorflow.keras.layers.Layer`, so a Keras model can be used and nested in the same way as Keras layers. Keras models come with extra functionality that makes them easy to train, evaluate, load, save, and even train on multiple machines. + +As the `tensorflow.keras.Model` class inherits from the 'tensorflow.keras.layers' you do not need to specify `input_shape` in a subclassed model; this argument will be ignored. + +== How to fix it +Do not specify `input_shape` in a `tf.keras.Model` subclasses + +=== Code examples + +==== Noncompliant code example + +[source,python,diff-id=1,diff-type=noncompliant] +---- +import tensorflow as tf + +class MyModel(tf.keras.Model): + def __init__(self): + super(MyModel, self).__init__(input_shape=...) # Noncompliant: this parameter will be ignored +---- + +==== Compliant solution + +[source,python,diff-id=1,diff-type=compliant] +---- +import tensorflow as tf + +class MyModel(tf.keras.Model): + def __init__(self): + super(MyModel, self).__init__() # OK +---- + +== Resources +=== Documentation +* Tensorflow documentation - https://www.tensorflow.org/guide/intro_to_modules#keras_models[Keras models]