Skip to content

Commit

Permalink
Create rule S6919 (#3620)
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions[bot] authored Mar 20, 2024
1 parent 15d9064 commit 559448c
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 0 deletions.
2 changes: 2 additions & 0 deletions rules/S6919/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
24 changes: 24 additions & 0 deletions rules/S6919/python/metadata.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
38 changes: 38 additions & 0 deletions rules/S6919/python/rule.adoc
Original file line number Diff line number Diff line change
@@ -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]

0 comments on commit 559448c

Please sign in to comment.