Skip to content

Commit 96c2fe1

Browse files
committed
[pycaffe] allow layers to have names different from their first tops
Previously, net spec only allowed names to be assigned to Tops, giving layers the names of their first tops. Now, names can be assigned to Functions, which become layer names in serialization. Unnamed Functions still get named after their first top, if present, or autogenerated, if not. (This will allow top-less layers in a natural way.)
1 parent f16195a commit 96c2fe1

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

python/caffe/net_spec.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,15 @@ def __init__(self, type_name, inputs, params):
108108
del self.params['in_place']
109109
self.tops = tuple(Top(self, n) for n in range(self.ntop))
110110

111-
def _get_name(self, top, names, autonames):
111+
def _get_name(self, names, autonames):
112+
if self not in names and self.ntop > 0:
113+
names[self] = self._get_top_name(self.tops[0], names, autonames)
114+
elif self not in names:
115+
autonames[self.type_name] += 1
116+
names[self] = self.type_name + str(autonames[self.type_name])
117+
return names[self]
118+
119+
def _get_top_name(self, top, names, autonames):
112120
if top not in names:
113121
autonames[top.fn.type_name] += 1
114122
names[top] = top.fn.type_name + str(autonames[top.fn.type_name])
@@ -129,8 +137,8 @@ def _to_proto(self, layers, names, autonames):
129137
layer.top.extend(layer.bottom)
130138
else:
131139
for top in self.tops:
132-
layer.top.append(self._get_name(top, names, autonames))
133-
layer.name = self._get_name(self.tops[0], names, autonames)
140+
layer.top.append(self._get_top_name(top, names, autonames))
141+
layer.name = self._get_name(names, autonames)
134142

135143
for k, v in six.iteritems(self.params):
136144
# special case to handle generic *params

0 commit comments

Comments
 (0)