Keras错误"您必须使用dtype bool为占位符张量'bidirectional_1/keras_learning_phase'提供值"

wol*_*how 18 deep-learning keras tensorflow keras-layer

我在下面的代码段中收到以下错误:

您必须使用dtype bool为占位符张量'bidirectional_1/keras_learning_phase'提供值

如果我添加了dropout图层model.add(Dropout(dropout)),它就可以了.谁知道为什么?后端是Tensorflow,Keras 2.0.1

def prep_model1(embedding_layer1, embedding_layer2, dropout=0.5):

    model0 = Sequential()  
    model0.add(embedding_layer1)
    model0.add(Bidirectional(LSTM(128, return_sequences=False, dropout=dropout)))

    model1 = Sequential() 
    model1.add(embedding_layer2)
    model1.add(Bidirectional(LSTM(128, return_sequences=False, dropout=dropout)))

    model = Sequential()
    model.add(Merge([model0, model1], mode='concat', concat_axis=1))
    #model.add(Dropout(dropout))
    model.add(Dense(1, activation='sigmoid'))

    return model
Run Code Online (Sandbox Code Playgroud)

veg*_*ega 29

尝试导入K并在模型之前设置学习阶段.

from keras import backend as K

K.set_learning_phase(1) #set learning phase
Run Code Online (Sandbox Code Playgroud)

这个问题

  • 重要:在构建模型之前使用它.也适用于BatchNorm. (3认同)
  • 据说[这里](https://github.com/tensorflow/tensorflow/issues/11336#issuecomment-315898065):_"学习阶段"是一个标志,表示训练/推理.使用例如`fit`时设置为1,使用例如`predict`时设置为0.`K.set_learning_phase(False)`将"学习阶段"设置为始终为0,即`fit`将使模型在推理模式下运行(例如,没有丢失和BatchNorm行为设置为推理)._ (3认同)