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

Python Keras如何在没有激活的图层上优化权重?,python,keras,activation-function,Python,Keras,Activation Function,背景: 如果我没有弄错的话,在训练网络时,我们对每一层执行sigmoid(求和(W*x)),然后在反向传播中计算误差和增量(变化),然后计算梯度并更新权重 假设其中一层没有激活,keras如何计算梯度?它是否只需要取sum(W*x)*next_layer_delta*weights的值来获得当前层的delta并使用它来计算梯度 代码: 我编写了以下代码来创建word2vec模型(跳过gram): 输入和输出为1个热向量 问题:在这种情况下,keras如何优化权重,以及在隐藏层中没有激活函数的含义

背景:

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

假设其中一层没有激活,keras如何计算梯度?它是否只需要取
sum(W*x)*next_layer_delta*weights
的值来获得当前层的delta并使用它来计算梯度

代码:

我编写了以下代码来创建word2vec模型(跳过gram):

输入和输出为1个热向量


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

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

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

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

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)