machine-learning - Keras 如何更新多标签学习中的权重(实现方面)

标签 machine-learning neural-network keras classification multilabel-classification

假设我想使用神经网络和 Keras 解决多标签问题。

输出通常采用 y=[0, 1, 0, 1, 0, 0] 的形式,并且可以轻松地使用二进制交叉熵和 sigmoid 来训练网络作为输出(例如,请参阅下面的代码)。

from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(6, activation='relu')#Add 1 hidden layer
                                     #with 6 neurons, with relu activation
model.add(Dense(6, activation='sigmoid'))#Here we specify that we have 6 outputs
                                         #and we want outputs to be in [0,1]
model.compile(optimizer='Adam', loss='binary_crossentropy')
model.fit(xtrain, ytrain, batch_size=128)

当我在最后一行执行 fit 时,实现方面到底发生了什么?

  1. 网络是否更新多次次?计算 6 个输出中每一个输出的误差后,将其传播回去以升级权重?

  2. 它是否单独计算每个输出的误差,然后对网络进行一次整体更新?

编辑:Daniel Möller 回答后更新了问题

model.fit(xtrain, ytrain, batch_size=1)

如果批量大小为 1,我的问题可能会更清楚。

在每次迭代中,我们从训练集中选择 1 个示例并进行前馈。然后,我们计算每个输出的误差。在这种情况下,问题如下:

对于不在输出之间共享的权重(从隐藏层到输出的权重),它们是根据模型产生的误差进行更新的,该误差计算为所有输出上的误差之和,或者仅计算为 1具体输出?

模型权重是根据误差总和更新一次,还是模型根据所有输出上的个别误差更新多次?

最佳答案

对于所有效果,都应该被视为一个巨大的矩阵运算。

每批处理完毕后,它将更新网络。所以,既不是 1,也不是 2。

它:3 - 它作为矩阵运算一次性计算整个批处理的误差,然后对所有权重矩阵进行整体更新。但这将是多次更新,因为您将有多个大小为 128 的批处理。

Y 通常的形式是:

[
    [1,0,0,1,0,0],
    [1,0,0,1,0,0],
    [0,0,0,1,1,0],
    [1,0,1,1,0,0]
]

一批输出。

<小时/>

无论它在内部执行循环还是执行矩阵计算所需的任何操作,它对我们来说都是不可见且无法访问的。

关于machine-learning - Keras 如何更新多标签学习中的权重(实现方面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49070021/

相关文章:

python - 删除keras预训练模型层

docker - 是否可以通过 Dockerfile(而不是图像)指定 MLflow 项目环境?

algorithm - 如何实现一个特性推荐引擎?

python - 用神经网络预测圆的半径

keras - ModuleNotFoundError : No module named 'keras.models' ; 'keras' is not a package

python - 加权分类交叉熵语义分割

machine-learning - 用于学习排名算法的良好查询文档数据集?

python - 如何 reshape Pandas 中的数据框?

machine-learning - Keras:ValueError:没有为 "input_1"提供数据。需要每个键的数据

machine-learning - 训练 Faster R-CNN 时如何固定共享卷积层