【发布时间】:2019-07-13 13:39:02
【问题描述】:
我在 keras 中见过这种类型的层初始化
from keras.models import Model
from keras.layers import Input, Dense
a = Input(shape=(32,))
b = Dense(32)(a)
c = Dense(b)
它的第 c_th 层的初始化令人困惑。我有一个像这样的类对象
class Attention(tf.keras.Model):
def __init__(self, units):
super(Attention, self).__init__()
self.W1 = tf.keras.layers.Dense(units)
self.W2 = tf.keras.layers.Dense(units)
self.V = tf.keras.layers.Dense(1)
def call(self, features, hidden):
hidden_with_time_axis = tf.expand_dims(hidden, 1)
score = tf.nn.tanh(self.W1(features) + self.W2(hidden_with_time_axis))
attention_weights = tf.nn.softmax(self.V(score), axis=1)
context_vector = attention_weights * features
context_vector = tf.reduce_sum(context_vector, axis=1)
return context_vector, attention_weights
查看self.W1(features),它采用前一层的特征并将其传递给已经初始化的权重W1 密集层,x units。这一步发生了什么以及我们为什么要这样做?
编辑:
class Foo:
def __init__(self, units):
self.units=units
def __call__(self):
print ('called '+self.units)
a=Foo(3)
b=Foo(a)
为什么我们需要调用函数?
【问题讨论】:
标签: python class oop keras tf.keras