看了一點東西
阿新 • • 發佈:2018-12-10
class Scale(Layer): def __init__(self, weights=None, axis=-1, momentum = 0.9, beta_init='zero', gamma_init='one', **kwargs): self.momentum = momentum self.axis = axis self.beta_init = initializations.get(beta_init) self.gamma_init = initializations.get(gamma_init) self.initial_weights = weights super(Scale, self).__init__(**kwargs) def build(self, input_shape): self.input_spec = [InputSpec(shape=input_shape)] shape = (int(input_shape[self.axis]),) # Tensorflow >= 1.0.0 compatibility self.gamma = K.variable(self.gamma_init(shape), name='{}_gamma'.format(self.name)) self.beta = K.variable(self.beta_init(shape), name='{}_beta'.format(self.name)) #self.gamma = self.gamma_init(shape, name='{}_gamma'.format(self.name)) #self.beta = self.beta_init(shape, name='{}_beta'.format(self.name)) self.trainable_weights = [self.gamma, self.beta] if self.initial_weights is not None: self.set_weights(self.initial_weights) del self.initial_weights def call(self, x, mask=None): input_shape = self.input_spec[0].shape broadcast_shape = [1] * len(input_shape) broadcast_shape[self.axis] = input_shape[self.axis] out = K.reshape(self.gamma, broadcast_shape) * x + K.reshape(self.beta, broadcast_shape) return out def get_config(self): config = {"momentum": self.momentum, "axis": self.axis} base_config = super(Scale, self).get_config() return dict(list(base_config.items()) + list(config.items()))
終於把這個程式碼看懂了一點點。。
主要是呼叫的時候主要是def call
基本意思是對接受上一層的輸出比如是(12,12,64)的變數x,對其處理是用(1,1,64)的f變數乘以x,再加上(1,1,64)的偏量d。基本上公式是fx+d,剛開始不知道怎麼理解這個三維的陣列相乘,實際是這樣的64個12X12的矩陣與64個1x1的常量相乘,再加上64個1x1的常量,最後就得到最後的x.
又看了幾個名詞把banach代數,對偶空間,零化子c*代數就是滿足不同的運算封閉性。。