Развернуть модель Keras на Spark - PullRequest
0 голосов
/ 03 октября 2019

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

https://github.com/qubvel/efficientnet

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

Как это можно осуществить? MlLib не поддерживает эффективностьNet.

При поиске в Интернете я видел такую ​​реализацию с использованием 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)

Как правильно (и работает) подход кэто?

...