Разверните модель Keras на Spark

У меня есть обученная модель keras.

https://github.com/qubvel/efficientnet

У меня есть большой набор обновляемых данных, по которому я хочу получать прогнозы. То есть запускать свою искровую работу каждые 2 часа или около того.

Как это реализовать? MlLib не поддерживает EffectiveNet.

При поиске в Интернете я видел такую ​​реализацию с использованием sparkdl, но она не поддерживает efficentNet в качестве параметра modelName.

featurizer = DeepImageFeaturizer(inputCol="image", outputCol="features", modelName="InceptionV3")
rf = RandomForestClassifier(labelCol="label", featuresCol="features")

Мой наивный подход был бы

import efficientnet.keras as efn 
model = efn.EfficientNetB0(weights='imagenet')
from sparkdl import readImages

image_df = readImages("flower_photos/sample/")
image_df.withcolumn("modelTags", efficient_net_udf($"image".data))

и создание UDF, который вызывает model.predict...

Другой метод, который я видел, это

from keras.preprocessing.image import img_to_array, load_img
import numpy as np
import os
from pyspark.sql.types import StringType
from sparkdl import KerasImageFileTransformer

import efficientnet.keras as efn 
model = efn.EfficientNetB0(weights='imagenet')
model.save("kerasModel.h5")

def loadAndPreprocessKeras(uri):
  image = img_to_array(load_img(uri, target_size=(299, 299)))
  image = np.expand_dims(image, axis=0)
  return image 

transformer = KerasImageFileTransformer(inputCol="uri", outputCol="predictions",
                                        modelFile='path/kerasModel.h5', 
                                        imageLoader=loadAndPreprocessKeras,
                                        outputMode="vector")

files = [os.path.abspath(os.path.join(dirpath, f)) for f in os.listdir("/data/myimages") if f.endswith('.jpg')]
uri_df = sqlContext.createDataFrame(files, StringType()).toDF("uri")

keras_pred_df = transformer.transform(uri_df)

Каков правильный (и рабочий) подход к этому?

0 ответов

Другие вопросы по тегам