我实现了一个具有多个连续TimeDistributed层的模型。我的最后一层定义如下:
y_pred = TimeDistributed(Dense(output_dim, name="y_pred", kernel_initializer=init, bias_initializer=init, activation="softmax"), name="out")(x)
我想删除后者的激活“softmax”以访问其logit,即:
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)? 此致
答案 0 :(得分:0)
它实际上遵循相同的语义,默认情况下Activation('softmax')
将激活应用于上一个axis=-1
。这是default argument。因此,即使您使用TimeDistributed
,您也会将其应用于最后一个维度,但后者没有分发会更快,因为它涉及更少的操作。