首页 > 解决方案 > ValueError:未知层:带有 pyspark udf 的 CRF

问题描述

我用 CRF 层保存了 Keras 模型,如下所示:

model.save(modelName)

并将其加载如下:

model= load_model('model.h5',custom_objects={'CRF':CRF,'crf_loss':crf_loss,'crf_accuracy':crf_accuracy})

当我在 python 中使用模型进行预测时,它工作正常。但是,当我尝试加载在函数 predicts 中调用的模型以预测结果并将其调用为 pyspark 中的 udf 时,出现错误:

“ ValueError:未知层:CRF”

predict_skills = udf(lambda description: p.predict_s(description))
df_new=df_new.select('a')\
         .withColumn("b", predict_s(col("a")))

为了使带有额外 CRF 层的 keras 在 pyspark 中工作,是否需要做任何额外的事情?

标签: keraspyspark

解决方案


这不能在 udf 之外完成!

这样做: 系列迭代器到系列迭代器

@pandas_udf("long")
def predict(iterator: Iterator[pd.Series]) -> Iterator[pd.Series]:
    # Do initialization with a model
    model = load_model('model.h5',custom_objects={'CRF':CRF,'crf_loss':crf_loss,'crf_accuracy':crf_accuracy})

    for series in iterator:
        # Use that model for whole iterator.
        yield predict_with_model(series, model)

df.select(predict("value")).show()

推荐阅读