Keras如何在没有激活的图层上优化权重?

时间:2018-07-31 22:39:58

标签: python keras activation-function

背景

如果我没记错的话,在训练网络时,我们对每一层前馈执行sigmoid(sum(W * x)),然后在反向传播中计算误差和增量(变化),然后计算梯度和更新权重。

让我们说在其中一层上没有激活,keras如何计算梯度?是否仅需要使用sum(W*x)*next_layer_delta*weights的值来获取当前图层的增量并使用此值来计算梯度?<​​/ p>

代码:

我有我编写的用于创建word2vec模型的代码(跳过图):

model = Sequential()
model.add(Dense(2, input_dim=len(tokens_enc)))#what does it mean for it not to have an activation here? This makes it linear because there is no non-linear function such as tanh!
model.add(Dense(len(tokens_enc), activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
# Fit the model
model.fit(X, y, epochs=20000)

输入和输出是1个热向量。

问题:在这种情况下,keras如何优化权重?隐藏层中没有激活功能的含义是什么?

2 个答案:

答案 0 :(得分:1)

通常,对于某些回归问题,线性激活函数仅应用于最后一层。当然,您仍然可以将其用作多层网络中的隐藏层。但是,如果您将多个线性层彼此相邻堆叠,它将充当1个线性层,因此您无法使用它构建大型模型。线性激活函数的局部梯度= 1,因此,完整节点的局部梯度就是权重本身。

答案 1 :(得分:0)

Keras使用Theano和TensorFlow的自动区分功能(取决于您使用的后端),因此Keras对于不具有激活功能并没有做任何特别的事情。

梯度由Theano / TensorFlow计算,并计算出正确的梯度。