2017-02-12 44 views
1

如果檢測到「nan」,我想重置卷積神經網絡的權重。如何重置烤寬面網絡的權重?

我不知道該怎麼做。

林也很困惑,如果我應該改變種子以及在這種情況下。

 if np.isnan(trainingLoss): 
      print "..Training Loss is NaN" 
      self.reset_network() 

     if np.isnan(validationLoss): 
      print "..Validation Loss is NaN" 
      self.reset_network() 

我應該如何實現reset_network()?

回答

1

我不確定這是重置網絡權重的預期方式,但以下是我如何做到的。在以下代碼中,network是對具有2個卷積層之後是最大池層的CNN的引用。我相信它也應該與其他架構一起工作。

這裏的技巧是用初始化函數更新網絡的所有可訓練參數。

def reset_weights(network): 
    params = lasagne.layers.get_all_params(network, trainable=True) 
    for v in params: 
     val = v.get_value() 
     if(len(val.shape) < 2): 
      v.set_value(lasagne.init.Constant(0.0)(val.shape)) 
     else: 
      v.set_value(lasagne.init.GlorotUniform()(val.shape)) 

我希望它有幫助!