tensorflow keras无法在预测阶段退出(设置学习阶段无效)

时间:2019-10-21 22:55:05

标签: tensorflow keras

在我的神经网络中,我试图在预测阶段保持辍学活跃。我正在尝试通过在Tensorflow 2.0 RC中使用tensorflow.keras.backend.set_learning_phase(1)来实现此目的。

当我调用model.compile时,问题就来了,这似乎在预测阶段关闭了辍学。

以下以下代码显示了我如何设置学习阶段。在编译模型之前,预测是半随机的。编译模型后,即使学习阶段仍然为1,预测也不再是半随机的

import tensorflow as tf
from tensorflow import keras
import tensorflow.keras.backend as K
from tensorflow.keras import layers

# load boston housing data
from tensorflow.keras.datasets import boston_housing
(x_train, y_train), (x_test, y_test) = boston_housing.load_data()

# define model
K.clear_session()
K.set_learning_phase(1)
x = keras.Input(shape=(13,))
y = layers.Dense(10, activation='relu')(x)
y = layers.Dropout(0.5)(y)
y = layers.Dense(1)(y)

model = keras.Model(inputs=x,outputs=y)

# these results will have randomness
model.predict(x_test[0:1])
model.predict(x_test[0:1])
model.predict(x_test[0:1])

model.compile(optimizer="adam", loss='mse')


# now that model is compiled randomness is lost
model.predict(x_test[0:1])
model.predict(x_test[0:1])
model.predict(x_test[0:1])

print(K.learning_phase()) # == 1

在过去的tensorflow版本中这对我有用

1 个答案:

答案 0 :(得分:0)

Dropout层采用training参数来控制其是否处于训练模式。查看github上的代码,在没有training参数的情况下,应该使用已明确设置的学习阶段。

但是,这种行为也许已经有所改变。 This github thread建议明确设置训练参数,例如one commenter写道:

import tensorflow.keras

inputs = tensorflow.keras.Input(shape=(10,))
x = tensorflow.keras.layers.Dense(3)(inputs)
outputs = tensorflow.keras.layers.Dropout(0.5)(x, training=True)

model = tensorflow.keras.Model(inputs, outputs)