首页 > 开发 > Python > 正文

Python Gluon参数和模块命名操作教程

2024-09-09 19:03:20
字体:
来源:转载
供稿:网友

本文实例讲述了Python Gluon参数和模块命名操作。分享给大家供大家参考,具体如下:

Gluon参数和模块命名教程

在gluon里,每个参数和块都有一个名字(和前缀)。参数名可以由用户指定,block名也可以由用户指定,也可以自动创建。

本教程中,我们将讨论命名方面的最佳实践。首先,import MXNet和Gluon

from __future__ import print_functionimport mxnet as mxfrom mxnet import gluon

Blocks命名

在创建block时,可以指定一个前缀给它:

mydense = gluon.nn.Dense(100, prefix='mydense_')print(mydense.prefix)mydense_

若没有指定前缀,gluon会自动生成一个前缀

dense0 = gluon.nn.Dense(100)print(dense0.prefix)dense0_

当你创建更多同类块时,它们将递增后缀命名,以避免冲突:

dense1 = gluon.nn.Dense(100)print(dense1.prefix)dense1_

参数命名

blocks中的参数将用过将block的前缀添加到参数的名称来命名:

print(dense0.collect_params())dense0_ ( Parameter dense0_weight (shape=(100, 0), dtype=<type 'numpy.float32'>) Parameter dense0_bias (shape=(100,), dtype=<type 'numpy.float32'>))

名称空间

为了管理嵌套block的名称,每个块附加有一个name_scope(名称空间)。在name_scope中创建的block都会在其名称前加上父block的名称。

我们将定义一个简单的神经网络来说明这点:

class Model(gluon.Block): def __init__(self, **kwargs):  super(Model, self).__init__(**kwargs)  with self.name_scope():   self.dense0 = gluon.nn.Dense(20)   self.dense1 = gluon.nn.Dense(20)   self.mydense = gluon.nn.Dense(20, prefix='mydense_') def forward(self, x):  x = mx.nd.relu(self.dense0(x))  x = mx.nd.relu(self.dense1(x))  return mx.nd.relu(self.mydense(x))

现在实例化这个神经网络

注意:model0.dense0的名称是model0_dense0_而非dense0_ 注意:我们指定model.mydense的前缀为mydense_,它的父类前缀会自动生成并添加到前面变成model0_mydense_

这里的名称前缀和变量名model0没有关系,这里就算把model0换成其他变量名比如net,前缀还是model?,? 表示这是一个递增的数字,这里的名称前缀和class Model有关 若将类名Model换成Hodel,那么后面的前缀都会变成 hodel?

model0 = Model()model0.initialize()model0(mx.nd.zeros((1, 20)))print(model0.prefix)print(model0.dense0.prefix)print(model0.dense1.prefix)print(model0.mydense.prefix)model0_model0_dense0_model0_dense1_model0_mydense_

若我们再次实例化Model,在Dense前会生成一个不同的名称。

注意:model1.dense0的名称依然是dense0_而非dense2_,遵循之前在model0中创建的dense层的命名规则。这是因为每个model的命名空间是相互独立
model1 = Model()print(model1.prefix)print(model1.dense0.prefix)print(model1.dense1.prefix)print(model1.mydense.prefix)model1_model1_dense0_model1_dense1_model1_mydense_
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表