Tensorflow “Keras误差”;必须为占位符张量';双向学习阶段';使用数据类型bool“;

Tensorflow “Keras误差”;必须为占位符张量';双向学习阶段';使用数据类型bool“;,tensorflow,deep-learning,keras,keras-layer,Tensorflow,Deep Learning,Keras,Keras Layer,下面的代码段出现以下错误: 必须为占位符张量输入一个值 “双向学习1/keras学习阶段”,数据类型为bool 如果我添加dropout层model.add(dropout(dropout)),它会工作。有人知道为什么吗?后端是Tensorflow,Keras 2.0.1 def prep_model1(embedding_layer1, embedding_layer2, dropout=0.5): model0 = Sequential() model0.add(emb

下面的代码段出现以下错误:

必须为占位符张量输入一个值 “双向学习1/keras学习阶段”,数据类型为bool

如果我添加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

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

from keras import backend as K

K.set_learning_phase(1) #set learning phase

From

重要提示:在构建模型之前使用它。同样适用于BatchNorm。声明:“学习阶段”是一个标志,表示培训/推理。当使用例如
fit
时设置为1,当使用例如
predict
时设置为0<代码>K。设置学习阶段(错误)将“学习阶段”设置为始终为0,即
fit
将使模型在推理模式下运行(例如,无辍学和BatchNorm行为设置为推理)。