【发布时间】:2018-08-10 17:18:35
【问题描述】:
假设我想使用神经网络和 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 时,实现方面真正发生了什么?
网络是否更新多次次?在计算 6 个输出中的每一个的误差后一次,将其传播回来以升级权重?
它是否分别计算每个输出的误差,然后对网络进行一次整体更新?
编辑:Daniel Möller 回答后更新问题
model.fit(xtrain, ytrain, batch_size=1)
使用大小为 1 的 batch_size,我的问题可能更清楚。
在每次迭代中,我们从训练集中选择 1 个示例并进行前馈。然后,我们计算每个输出的误差。在这种情况下,问题如下:
对于未在输出之间共享的权重(从隐藏层到输出的权重),它们是根据模型产生的误差进行更新的,该误差计算为所有输出上的误差之和,还是仅按 1具体输出?
模型权重是根据误差总和更新一次,还是根据所有输出上的单个误差更新多次?
【问题讨论】:
标签: machine-learning neural-network keras classification multilabel-classification