首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Apache Spark & Elephas中使用Keras模型作为广播变量

在Apache Spark & Elephas中使用Keras模型作为广播变量
EN

Stack Overflow用户
提问于 2017-09-30 00:16:24
回答 2查看 1.7K关注 0票数 3

我有一个keras模型,预训练权重h5df约为700mb。我想在Apache Spark中使用它作为广播变量。1.这似乎是不可能的,因为keras模型本身不是spark感知的,也是不可序列化的。2.我在谷歌上搜索了一下,发现了Elephas库。因此,尝试在ElephasTransformer中包装Keras预训练模型。这抛出了多个错误(我使用的是python 2.7 )。例如,在Elephas的ml_model.py文件"from pyspark.ml.util import keyword_only“中,导入不可用。即使我试图注释掉这一点并在代码中进行适当的修改,它似乎也无法处理keras模型的广播,因为它在一个密集的层中抛出了张量错误。

如何在apache spark中使用预先训练好的keras模型作为广播变量?

EN

回答 2

Stack Overflow用户

发布于 2017-09-30 00:24:25

我会使用SparkFiles分发模型

代码语言:javascript
运行
复制
spark.sparkContext.addFile("model_file.h5")

并在本地加载:

代码语言:javascript
运行
复制
from pyspark import SparkFiles
from keras.models import load_model

def f(it):
    path = SparkFiles.get("mode_file.h5")
    model =  load.model(path)

    for i in it:
        yield ... # Do something


rdd.mapPartitions(f)
票数 6
EN

Stack Overflow用户

发布于 2021-01-19 10:47:30

在Elephas中,我处理这个问题的方法是将权重设置为广播变量,将yaml字符串作为参数提供给mapper函数,然后使用加载的yaml文件和权重在mapper函数中创建模型-效果如下:

代码语言:javascript
运行
复制
from tensorflow.keras.models import model_from_yaml

weights = rdd.context.broadcast(model.get_weights())

def mapper_function(yaml_file, ...):
    model = model_from_yaml(yaml_file)
    model.set_weights(weights.value)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46493013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档