据我所知,你想冻结一些层(所以它们的参数在训练期间保持不变),你正在使用胶子。
在这种情况下,你可以设置
grad_req
属性为
'null'
(它是一个字符串)以防止更改此参数。这是一个例子。我定义了一组参数名,我想在创建模型之后,但在初始化之前冻结它们。
num_hidden = 10
net = gluon.nn.Sequential()
with net.name_scope():
net.add(gluon.nn.Dense(num_hidden, activation="relu"))
net.add(gluon.nn.Dense(num_hidden, activation="relu"))
net.add(gluon.nn.Dense(num_outputs))
layers_to_freeze = set(['sequential1_dense0_weight', 'sequential1_dense0_bias', 'sequential1_dense1_weight', 'sequential1_dense1_bias'])
for p in net.collect_params().items():
if p[0] in layers_to_freeze:
p[1].grad_req = 'null'
net.collect_params().initialize(mx.init.Xavier(magnitude=2.24), ctx=ctx)
如果你进行训练,这些参数不应该改变。您可以通过打印找到参数的名称
p[0]
在循环中。