具有 BatchNormalization 的模型:停滞测试损失

问题描述 投票:0回答:1

我使用 Keras 编写了一个神经网络。它包含 BatchNormalization 层。

当我用

model.fit
训练它时,一切都很好。当用张量流训练它时如这里所解释的,训练很好,但是验证步骤总是给出非常差的性能,并且它很快就饱和了(准确率达到5%,10%,40%,40%,40%.. ;损失也停滞不前)。

我需要使用张量流,因为它在训练的监控部分方面提供了更大的灵活性。

我强烈怀疑它与 BN 层或/和我计算测试性能的方式有关(见下文)

feed_dict = {x: X_valid,
            batch_size_placeholder: X_valid.shape[0],
            K.learning_phase(): 0,
            beta: self.warm_up_schedule(global_step)
            }
if self.weights is not None:
    feed_dict[weights] = self.weights
acc = accuracy.eval(feed_dict=feed_dict)

在计算包含 Keras BatchNormalizatin 层的模型的验证准确性时,有什么特别要做的吗?

tensorflow keras keras-layer
1个回答
0
投票

实际上我发现了

training
层的
__call__
方法的
BatchNormalization
参数

所以实例化图层时你可以做的就是:

x = Input((dim1, dim2))
h = Dense(dim3)(x)
h = BatchNormalization()(h, training=K.learning_phase())

在评估验证集上的性能时:

feed_dict = {x: X_valid,
             batch_size_placeholder: X_valid.shape[0],
             K.learning_phase(): 0,
             beta: self.warm_up_schedule(global_step)
             }
acc = accuracy.eval(feed_dict=feed_dict)
summary_ = merged.eval(feed_dict=feed_dict)
test_writer.add_summary(summary_, global_step)
© www.soinside.com 2019 - 2024. All rights reserved.