Сохраните результаты прогноза модели Tensorflow в файл hdfs - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть обученная модель tf, и я хочу применить ее к большому набору данных в формате hdf, который составляет около миллиарда образцов.Суть в том, что мне нужно записать прогноз модели tf в файл hdfs.Тем не менее, я не могу найти относительный API в тензорном потоке о том, как сохранить данные в файле hdfs, только найти API для чтения файла hdfsДо сих пор я делал так, чтобы сохранить обученную модель tf в локальном файле pb, а затем загрузить файл pb, используя Java API в коде spark или Mapreduce.Проблема как искры, так и снижения скорости заключается в том, что скорость работы очень мала и не работает с ошибками памяти.Вот мое демо:

public class TF_model implements Serializable{

public Session session;

public TF_model(String model_path){
    try{
        Graph graph = new Graph();
        InputStream stream = this.getClass().getClassLoader().getResourceAsStream(model_path);
        byte[] graphBytes = IOUtils.toByteArray(stream);
        graph.importGraphDef(graphBytes);
        this.session = new Session(graph);
    }
    catch (Exception e){
        System.out.println("failed to load tensorflow model");
    }
}
// this is the function to predict a sample in hdfs
public int[][] predict(int[] token_id_array){
    Tensor z = session.runner()
            .feed("words_ids_placeholder", Tensor.create(new int[][]{token_id_array}))
            .fetch("softmax_prediction").run().get(0);
    double[][][] softmax_prediction = new double[1][token_id_array.length][2];
    z.copyTo(softmax_prediction);
    return softmax_prediction[0];
}}

ниже мой искровой код:

val rdd = spark.sparkContext.textFile(file_path)
val predct_result= rdd.mapPartitions(pa=>{
    val tf_model = new TF_model("model.pb")
    pa.map(line=>{
      val transformed = transform(line) // omitted the transform code
      val rs = tf_model .predict(transformed)
      rs
    })
  })

Я также пробовал тензорный поток, развернутый в hadoop, но не могу найти способ записать большой набор данных в HDFS.

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете прочитать файл модели из hdfs один раз, а затем использовать sc.broadcast ваш байтовый массив вашего графика в разделы.Наконец, начните загружать график и прогнозировать.Просто чтобы избежать многократного чтения файла из hdfs.

...