Skip to content

Commit e798572

Browse files
authored
Add all_parameters api for Program (#22180), test=release/1.7 (#22894)
1 parent 1ccdaa4 commit e798572

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

python/paddle/fluid/framework.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4524,6 +4524,65 @@ def list_vars(self):
45244524
for each_var in list(each_block.vars.values()):
45254525
yield each_var
45264526

4527+
@dygraph_not_support
4528+
def all_parameters(self):
4529+
"""
4530+
Get all :ref:`api_guide_parameter_en` from this Program. A list object is returned.
4531+
4532+
Returns:
4533+
list[ :ref:`api_guide_parameter_en` ]: The list contians all parameters in this program.
4534+
4535+
Examples:
4536+
.. code-block:: python
4537+
4538+
import paddle.fluid as fluid
4539+
4540+
program = fluid.default_main_program()
4541+
data = fluid.data(name='x', shape=[None, 13], dtype='float32')
4542+
hidden = fluid.layers.fc(input=data, size=10)
4543+
loss = fluid.layers.mean(hidden)
4544+
fluid.optimizer.SGD(learning_rate=0.01).minimize(loss)
4545+
4546+
for param in program.all_parameters():
4547+
print(param)
4548+
4549+
# Here will print all parameters in current program, in this example,
4550+
# the result is like:
4551+
#
4552+
# name: "fc_0.w_0"
4553+
# type {
4554+
# type: LOD_TENSOR
4555+
# lod_tensor {
4556+
# tensor {
4557+
# data_type: FP32
4558+
# dims: 13
4559+
# dims: 10
4560+
# }
4561+
# }
4562+
# }
4563+
# persistable: true
4564+
#
4565+
# name: "fc_0.b_0"
4566+
# type {
4567+
# type: LOD_TENSOR
4568+
# lod_tensor {
4569+
# tensor {
4570+
# data_type: FP32
4571+
# dims: 10
4572+
# }
4573+
# }
4574+
# }
4575+
# persistable: true
4576+
#
4577+
# Here print(param) will print out all the properties of a parameter,
4578+
# including name, type and persistable, you can access to specific
4579+
# property of a parameter, such as param.name, param.type
4580+
"""
4581+
parameters = []
4582+
for each_block in self.blocks:
4583+
parameters.extend(each_block.all_parameters())
4584+
return parameters
4585+
45274586

45284587
@six.add_metaclass(ParameterMetaClass)
45294588
class Parameter(Variable):

python/paddle/fluid/tests/unittests/test_program.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,19 @@ def net():
132132
for i in range(len(no_read_ops)):
133133
self.assertEqual(no_read_ops[i].type, keep_read_ops[i + 2].type)
134134

135+
def test_program_all_parameters(self):
136+
program = fluid.default_main_program()
137+
data = fluid.data(name='x', shape=[None, 13], dtype='float32')
138+
hidden = fluid.layers.fc(input=data, size=10)
139+
loss = fluid.layers.mean(hidden)
140+
fluid.optimizer.SGD(learning_rate=0.01).minimize(loss)
141+
142+
# NOTE: here the parameters are fc_0.w_0 and fc_0.b_0
143+
param_list = program.all_parameters()
144+
self.assertEqual(len(param_list), 2)
145+
self.assertEqual(param_list[0].name, "fc_0.w_0")
146+
self.assertEqual(param_list[1].name, "fc_0.b_0")
147+
135148

136149
if __name__ == '__main__':
137150
unittest.main()

0 commit comments

Comments
 (0)