diff --git a/tensorflow/python/keras/engine/training.py b/tensorflow/python/keras/engine/training.py index 5567e1733a7..682c0272da5 100644 --- a/tensorflow/python/keras/engine/training.py +++ b/tensorflow/python/keras/engine/training.py @@ -324,10 +324,10 @@ class Model(base_layer.Layer, version_utils.ModelVersionSelector): super(Model, self).__setattr__(name, value) return - if all( - isinstance(v, (base_layer.Layer, - data_structures.TrackableDataStructure)) or - trackable_layer_utils.has_weights(v) for v in nest.flatten(value)): + if any( + isinstance(v, (base_layer.Layer, data_structures.TrackableDataStructure + )) or trackable_layer_utils.has_weights(v) + for v in nest.flatten(value)): try: self._base_model_initialized except AttributeError: diff --git a/tensorflow/python/keras/engine/training_test.py b/tensorflow/python/keras/engine/training_test.py index 5cf15926bfb..63943f4f720 100644 --- a/tensorflow/python/keras/engine/training_test.py +++ b/tensorflow/python/keras/engine/training_test.py @@ -3383,6 +3383,18 @@ class TestTrainingWithMetrics(keras_parameterized.TestCase): self.assertEqual([m.name for m in outer_model.metrics], ['loss', 'acc2', 'mean', 'mean1', 'mean2']) + def test_subclassed_model_with_empty_list_attr(self): + + class ModelSubclass(training_module.Model): + + def __init__(self): + self.empty_list = [] + inputs = layers_module.Input(shape=()) + outputs = inputs + 1 + super(ModelSubclass, self).__init__(inputs, outputs) + + ModelSubclass() # empty_list attr assignment should not raise + class BareUpdateLayer(layers_module.Layer):