首页 文章

在Keras的神经网络中实现随机前向传递?

提问于
浏览
-1

我的问题如下:

我正在研究对象检测问题,并希望使用dropout during test time to obtain a distribution of outputs . 对象detection network由训练模型和预测模型组成,它包围训练模型 . 我想使用训练模型执行几个随机前向传球并将它们组合在一起 . 通过平均预测包装器中的预测 . 有没有办法在keras模型中执行此操作,而不是需要使用numpy的中间处理步骤?请注意,这个问题不是关于how to enable dropout during test time

def prediction_wrapper(model):
    # Example code.
    # Arguments
    #     model: the training model
    regression     = model.outputs[0]
    classification = model.outputs[1]

    predictions     =   # TODO: perform several stochastic forward passes (dropout during train and test time) here

    avg_predictions =   # TODO: combine predictions here, e.g. by computing the mean

    outputs =           # TODO: do some processing on avg_predictions 

    return keras.models.Model(inputs=model.inputs, outputs=outputs, name=name)

我使用带有张量流后端的keras . 我感谢任何帮助!

1 回答

  • 1

    我理解的方式是,在启用Dropout时,您尝试平均单个样本的权重更新 . 由于丢失是随机的,因此您可以为同一样本获得不同的权重更新 .

    如果这种理解是正确的,那么您可以通过复制相同的样本来创建批处理 . 在这里,我假设批次中的每个样本的Dropout不同 . 因为反向传播无论如何平均了重量更新,你会得到你想要的行为 .

    如果这不起作用,那么你可以写一个自定义loss function并训练批量大小的一个 . 您可以更新自定义损失函数中的全局计数器,并且仅当您知道这是否有效时才返回非零损失,这只是一个想法 .

相关问题