我在theano和keras(theano后端)构建了一个密集的(10)-softmax-crossentropy网络。 我分别转出计算图。 在theano版本(图1,这个计算图是我的想法。 但是对于keras版本(图2),它似乎是在损失定义(crossentropy)之后添加的计算。为什么?
请教导那些了解你在做什么的人......
答案 0 :(得分:0)
在Keras中,在损失计算之后,样本权重和损失权重应用于损失。请参阅脚本training.py中的这些行。
样品重量:
score_array = K.mean(score_array, axis=list(range(weight_ndim, ndim)))
score_array *= weights
score_array /= K.mean(K.cast(K.not_equal(weights, 0), K.floatx()))
return K.mean(score_array)
减肥:
if total_loss is None:
total_loss = loss_weight * output_loss
将这些线映射回计算图是很简单的。例如,以下块计算K.mean(K.cast(K.not_equal(weights, 0), K.floatx()))
:
K.not_equal(weights, 0)
K.cast(..., K.floatx())
K.mean(...)
shape
,并从中获取维度0
)K.mean(K.cast(K.not_equal(weights, 0), K.floatx()))