将激活与时间分布层分开
Separate activation from a timedistributed layer
我实现了一个具有多个连续 TimeDistributed 层的模型。我的最后一层定义如下:
y_pred = TimeDistributed(Dense(output_dim, name="y_pred", kernel_initializer=init, bias_initializer=init, activation="softmax"), name="out")(x)
我想删除后者的激活 "softmax" 以访问其登录信息,即:
logit = TimeDistributed(Dense(output_dim, name="fc6", kernel_initializer=init, bias_initializer=init), name="logit")(x)
如果我想找回最初的y_pred,我写道:
(1) y_pred = TimeDistributed(Activation('softmax'), name="pred")(logit)
我很困惑,因为下面这行似乎也有效:
(2) y_pred = Activation('softmax', name="pred")(logit)
哪一个是正确的? (1) 或 (2) ?
此致
它实际上遵循与默认情况下相同的语义 Activation('softmax')
将激活应用于最后一个 axis=-1
。就是default argument。因此,即使您使用 TimeDistributed
,您也是将其应用于最后一个维度,但没有分布的后者会更快,因为它涉及的操作更少。
我实现了一个具有多个连续 TimeDistributed 层的模型。我的最后一层定义如下:
y_pred = TimeDistributed(Dense(output_dim, name="y_pred", kernel_initializer=init, bias_initializer=init, activation="softmax"), name="out")(x)
我想删除后者的激活 "softmax" 以访问其登录信息,即:
logit = TimeDistributed(Dense(output_dim, name="fc6", kernel_initializer=init, bias_initializer=init), name="logit")(x)
如果我想找回最初的y_pred,我写道:
(1) y_pred = TimeDistributed(Activation('softmax'), name="pred")(logit)
我很困惑,因为下面这行似乎也有效:
(2) y_pred = Activation('softmax', name="pred")(logit)
哪一个是正确的? (1) 或 (2) ? 此致
它实际上遵循与默认情况下相同的语义 Activation('softmax')
将激活应用于最后一个 axis=-1
。就是default argument。因此,即使您使用 TimeDistributed
,您也是将其应用于最后一个维度,但没有分布的后者会更快,因为它涉及的操作更少。