2017-08-13 3 views

Répondre

0

Après l'installation optimizer au model, chaque paramètre de link dans le modèle a update_rule attribut (par exemple AdaGradRule dans ce cas), qui définit comment mettre à jour ce paramètre.

Et chaque update_rule a hyperparam attribut séparément, de sorte que vous pouvez remplacer ces hyperparam pour chaque paramètre dans le lien.

Voici une exemple de code,

class MLP(chainer.Chain): 

    def __init__(self, n_units, n_out): 
     super(MLP, self).__init__() 
     with self.init_scope(): 
      # input size of each layer will be inferred when omitted 
      self.l1 = L.Linear(n_units) # n_in -> n_units 
      self.l2 = L.Linear(n_units) # n_units -> n_units 
      self.l3 = L.Linear(n_out) # n_units -> n_out 

    def __call__(self, x): 
     h1 = F.relu(self.l1(x)) 
     h2 = F.relu(self.l2(h1)) 
     return self.l3(h2) 

model = MLP(args.unit, 10) 
classifier_model = L.Classifier(model) 
if args.gpu >= 0: 
    chainer.cuda.get_device_from_id(args.gpu).use() # Make a specified GPU current 
    classifier_model.to_gpu() # Copy the model to the GPU 

# Setup an optimizer 
optimizer = chainer.optimizers.AdaGrad() 
optimizer.setup(classifier_model) 

# --- After `optimizer.setup()`, you can modify `hyperparam` of each parameter --- 

# 1. Change `update_rule` for specific parameter 
# `l1` is `Linear` link, which has parameter `W` and `b` 
classifier_model.predictor.l1.W.update_rule.hyperparam.lr = 0.01 

# 2. Change `update_rule` for all parameters (W & b) of one link 
for param in classifier_model.predictor.l2.params(): 
    param.update_rule.hyperparam.lr = 0.01 

# --- You can setup trainer module to train the model in the following... 
... 
+0

Excellent travail! Comment une description détaillée que je cherche c'est. J'apprécie pour votre aide. Je vais essayer plus tard et vous donner plus de réponse. –

+0

Wow, ça marche parfaitement! Mais j'ai une autre question qui est-ce que je peux définir des optimiseurs séparés - adagrad, sgd - et l2 régularisation - 0.0001, 0.00001 - pour chaque couche? –

+0

@corochann \t Je suis désolé de vous déranger à nouveau. Quand je mets model.l1.W.update_rule.hyperparam.lr = 0.01. Comment appliquer "la décroissance après chaque époque" lors de la définition du taux d'apprentissage de cette couche individuelle? – machen