You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mxnet.apache.org by zh...@apache.org on 2018/06/29 02:15:47 UTC
[incubator-mxnet] branch master updated: support shared parameter
in summary (#11379)
This is an automated email from the ASF dual-hosted git repository.
zhasheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git
The following commit(s) were added to refs/heads/master by this push:
new 36f2aae support shared parameter in summary (#11379)
36f2aae is described below
commit 36f2aae9fb97159d226f24c9b1f829eccc318c14
Author: Sheng Zha <sz...@users.noreply.github.com>
AuthorDate: Thu Jun 28 19:15:39 2018 -0700
support shared parameter in summary (#11379)
---
python/mxnet/gluon/block.py | 10 ++++++++++
tests/python/unittest/test_gluon.py | 4 ++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/python/mxnet/gluon/block.py b/python/mxnet/gluon/block.py
index 0ef2849..731d541 100644
--- a/python/mxnet/gluon/block.py
+++ b/python/mxnet/gluon/block.py
@@ -563,6 +563,7 @@ class Block(object):
:class:`mxnet.ndarray.NDArray` is supported.
"""
summary = OrderedDict()
+ seen = set()
hooks = []
def _get_shape_str(args):
@@ -611,9 +612,14 @@ class Block(object):
params = 0
summary[m_key]['trainable'] = 0
+ summary[m_key]['shared'] = 0
for p in block._reg_params.values():
params += p.data().size
summary[m_key]['trainable'] += 0 if p.grad_req == 'null' else p.data().size
+ if p in seen:
+ summary[m_key]['shared'] += p.data().size
+ else:
+ seen.add(p)
summary[m_key]['n_params'] = params
from .nn.basic_layers import Sequential, HybridSequential
@@ -624,6 +630,7 @@ class Block(object):
summary['Input']['output_shape'] = _get_shape_str(inputs)
summary['Input']['n_params'] = 0
summary['Input']['trainable'] = 0
+ summary['Input']['shared'] = 0
try:
self.apply(_register_summary_hook)
@@ -635,16 +642,19 @@ class Block(object):
print('='*80)
total_params = 0
trainable_params = 0
+ shared_params = 0
for layer in summary:
print(line_format.format(layer,
str(summary[layer]['output_shape']),
summary[layer]['n_params']))
total_params += summary[layer]['n_params']
trainable_params += summary[layer]['trainable']
+ shared_params += summary[layer]['shared']
print('='*80)
print('Total params: ' + str(total_params))
print('Trainable params: ' + str(trainable_params))
print('Non-trainable params: ' + str(total_params - trainable_params))
+ print('Shared params: ' + str(shared_params))
print('-'*80)
finally:
for h in hooks:
diff --git a/tests/python/unittest/test_gluon.py b/tests/python/unittest/test_gluon.py
index 7fff6b8..d275cd6 100644
--- a/tests/python/unittest/test_gluon.py
+++ b/tests/python/unittest/test_gluon.py
@@ -1264,9 +1264,9 @@ def test_summary():
net2 = nn.Sequential()
with net2.name_scope():
- net2.add(nn.Embedding(10, 20))
+ net2.add(nn.Embedding(40, 30))
net2.add(gluon.rnn.LSTM(30))
- net2.add(nn.Dense(40, flatten=False))
+ net2.add(nn.Dense(40, flatten=False, params=net2[0].params))
net2.initialize()
net2.summary(mx.nd.ones((80, 32)))