在后端函数评估

时间:2018-03-07 19:36:23

标签: python tensorflow keras

我使用keras训练了一个网络模型,其中包括多个丢失层。我还实现了一个随机预测函数(使用keras后端),这使得我可以在“开启”的情况下获得预测。

    import keras.backend as K
    F = K.function([model.layers[0].input, K.learning_phase()], [m.layers[-1].output])

我使用

调用该函数
    output = F([x_test[0:1], 1])

其中x_test是样本输入。

目前,此预测器功能中使用的辍学率与用于训练的辍学率相同。 我想在不重新培训网络的情况下设置不同的辍学率。

我写了一个脚本来改变所有辍学率:

    for layer in [l for l in m.layers if "dropout" in np.str.lower(l.name)]:
        layer.rate = 0.5  

但是,当我调用自定义函数时,它不会更改输出。例如,如果我训练的网络使用的速率为0(或K.epsilon()),则重复的函数调用将产生相同的结果。将dropout更改为0.5应该会在每个函数调用中产生唯一的结果。但事实并非如此。更改丢失无效。

的工作原理是提取单个图层,更改速率并调用该单个图层:

    L = my_net.model.layers[0]
    L.rate = 0.5
    L_out1 = K.eval(L.call(x_test[0], training=True))
    L.rate = K.epsilon()
    L_out2 = K.eval(L.call(x_test[0], training=True))

这里,L_out1和L_out2是唯一的。我不知道如何在整个网络中实现此功能。

后端功能是什么阻止我的模型更改生效?

0 个答案:

没有答案