繁体   English   中英

在pyspark中使用带有辍学的Keras序列化模型

[英]Using Keras serialized model with dropout in pyspark

我有几个使用Keras构建的神经网络,到目前为止,我大多数时候都在Jupyter中使用它。 我经常使用joblib从scikit-learn中保存模型,并使用json + hdf5从Keras中保存模型,并在其他笔记本中使用它们而不会出现问题。

我制作了一个Python Spark应用程序,可以在集群模式下使用那些序列化的模型。 joblib模型运行正常,但是,我遇到了Keras的问题。

这是用于笔记本和pyspark的模型:

def build_gru_model():
    model = Sequential()
    model.add(Embedding(max_nb_words, 128, input_length=max_sequence_length, dropout=0.2))
    model.add(GRU(128, dropout_W=0.2, dropout_U=0.2))
    model.add(Dense(2, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

两者都以相同的方式调用:

preds = model.predict_proba(data, verbose=0)

但是,仅在Spark中,我得到了错误:

MissingInputError: ("An input of the graph, used to compute DimShuffle{x,x,x,x}(keras_learning_phase), was not provided and not given a value.Use the Theano flag exception_verbosity='high',for more information on this error.", keras_learning_phase)

我已经完成了强制搜索,发现: https : //github.com/fchollet/keras/issues/2430指向https://keras.io/getting-started/faq/

如果我确实从模型中删除了辍学,那就行得通。 但是,我无法理解如何实施一些使我在培训阶段保持辍学的方法,如常见问题解答中所述。

根据模型代码,如何做到这一点?

您可以尝试放置(在进行预测之前)

import keras.backend as K
K.set_learning_phase(0)

它应该将您的学习阶段设置为0(测试时间)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM