2017-12-11 7 views
0

私は、ラザニアの機能の操作メカニズムを知らない。以下のコードは です。コンストラクタ関数で定義されたself.scale変数の定数はありますか?

class WScaleLayer(lasagne.layers.Layer): 
    def __init__(self, incoming, **kwargs): 
     super(WScaleLayer, self).__init__(incoming, **kwargs) 
     W = incoming.W.get_value() 
     scale = np.sqrt(np.mean(W ** 2)) 
     incoming.W.set_value(W/scale) 
     self.scale = self.add_param(scale,(), name='scale', trainable=False) 
     self.b = None 
     if hasattr(incoming, 'b') and incoming.b is not None: 
      b = incoming.b.get_value() 
      self.b = self.add_param(b, b.shape, name='b', regularizable=False) 
      del incoming.params[incoming.b] 
      incoming.b = None 
     self.nonlinearity = lasagne.nonlinearities.linear 
     if hasattr(incoming, 'nonlinearity') and incoming.nonlinearity is not None: 
      self.nonlinearity = incoming.nonlinearity 
      incoming.nonlinearity = lasagne.nonlinearities.linear 

    def get_output_for(self, v, **kwargs): 
     v = v * self.scale 
     if self.b is not None: 
      pattern = ['x', 0] + ['x'] * (v.ndim - 2) 
      v = v + self.b.dimshuffle(*pattern) 
return self.nonlinearity(v) 

あなたはself.scaleは、初期化後にトレーニングプロセスでは一定であるかどうかを教えてもらえますか?

答えて

0

私はラザニア人の専門家ではありませんが、あなたが奇妙なことをする場合を除いて、self.scaleはトレーニング中に変更してはなりません。

しかし、このコードは非常に奇妙です。入力ウェイトの初期値を使用して縮尺を初期化します。それは本当にあなたが望むものですか?

関連する問題