Standardize name scopes used during model construction.

PiperOrigin-RevId: 301713794
Change-Id: Ifa309e22955183968ad51c6989be5356b8266cc1
This commit is contained in:
Francois Chollet 2020-03-18 18:35:46 -07:00 committed by TensorFlower Gardener
parent 2eb785c3fc
commit a6cdce91cc
2 changed files with 34 additions and 1 deletions

View File

@ -2083,7 +2083,16 @@ class Layer(module.Module, version_utils.LayerVersionSelector):
self._dtype_policy = policy.Policy(value)
def _name_scope(self):
return self.name
name_scope = self.name
current_name_scope = ops.get_name_scope()
if current_name_scope:
name_scope = current_name_scope + '/' + name_scope
if name_scope:
# Note that the trailing `/` prevents autogenerated
# numerical suffixes to get appended. It will also fully reset
# nested name scope (i.e. the outer name scope has no effect).
name_scope += '/'
return name_scope
def _init_set_name(self, name, zero_based=True):
if not name:

View File

@ -936,6 +936,30 @@ class NameScopingTest(keras_parameterized.TestCase):
self.assertEqual(layer.bias.name, 'MyName/bias:0')
self.assertEqual(layer.kernel.name, 'MyName/kernel:0')
def test_name_scope_functional_api(self):
inputs = input_layer.Input((3,))
layer = layers.Dense(10, name='MyName')
_ = layer(inputs)
self.assertEqual(layer.bias.name, 'MyName/bias:0')
self.assertEqual(layer.kernel.name, 'MyName/kernel:0')
def test_name_scope_functional_api_nested(self):
class NestedLayer(base_layer.Layer):
def __init__(self, name='OuterName'):
super(NestedLayer, self).__init__(name=name)
self.dense = layers.Dense(10, name='InnerName')
def call(self, inputs):
return self.dense(inputs)
inputs = input_layer.Input((3,))
layer = NestedLayer()
_ = layer(inputs)
self.assertEqual(layer.dense.bias.name, 'OuterName/InnerName/bias:0')
self.assertEqual(layer.dense.kernel.name, 'OuterName/InnerName/kernel:0')
def test_name_scope_sublayer(self):
class NameScopeTracker(base_layer.Layer):