2017-06-29 7 views
1

は、だから私は提供された例を使用して、Kerasで私自身の層を実装しようとしているKeras層でビルド時に呼び出されるん:なぜ呼び出し方法が

class MyLayer(Layer): 

    def __init__(self, output_dim, **kwargs): 
     self.output_dim = output_dim 
     super(MyLayer, self).__init__(**kwargs) 

    def build(self, input_shape): 
     # Create a trainable weight variable for this layer. 
     self.kernel = self.add_weight(name='kernel', 
             shape=(input_shape[1], self.output_dim), 
             initializer='uniform', 
             trainable=True) 
     super(MyLayer, self).build(input_shape) # Be sure to call this somewhere! 

    def call(self, x): 
     return K.dot(x, self.kernel) 

    def compute_output_shape(self, input_shape): 
     return (input_shape[0], self.output_dim) 

は私が呼び出しに何があるかで呼び出されることに気づきました私は時間を構築する:

model.add(MyLayer(4, input_dim=(1)) 

これはフィット、電車を呼び出さずに起こる、予測、等...

なぜ?

答えて

0

形状が有効かどうかを確認するためにモデルにレイヤーを追加したときに呼び出されます。

あなたはそれが呼び出された場所を確認したい場合は、あなたのコードを変更:

import sys 
import traceback 

class MyLayer(Layer): 
    .... 
    def call(self, x): 
     traceback.print_stack(file=sys.stdout) 
     return K.dot(x, self.kernel) 
+0

[OK]を、私は知って良い、それはチェックコールした疑いがあります – gotch4

関連する問題