禁止转载,侵权必究!

前言

Java工程师搞机器学习天生劣势!机器学习领域是Python的主场。但是业务系统架构是Java的传统强项。不管机器学习有多么高级,多么牛逼,它最终都要植入到客户的业务系统中才能为客户产生价值。业务系统集成机器学习方式有很多种。本系列教程介绍如何在Java中植入机器学习模型,并应用到生产实践。

标准数据交换格式HDF5

HDF 是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF 是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF 可以表示出科学数据存储和分布的许多必要条件。HDF 被设计为:

  • 自述性:对于一个HDF 文件里的每一个数据对象,有关于该数据的综合信息(元数据)。
  • 通用性:通过使用合适的HDF 数据结构,符号、数字和图形数据可以同时存储在一个HDF 文件里。
  • 灵活性:HDF允许用户把相关的数据对象组合在一起,放到一个分层结构中,向数据对象添加描述和标签。
  • 扩展性:HDF容易与其他标准格式兼容。
  • 跨平台性:HDF 是一个与平台无关的文件格式。支持Java,C++等。

HDF5官网

安装HDF5

brew install hdf5

(base) ouyangMBP:~ ouyang$ ls /usr/local/Cellar/hdf5/1.10.6/bin
gif2h5           h5c++            h5clear          h5debug          h5dump           h5format_convert h5jam            h5mkgrp          h5redeploy       h5repart         h5unjam
h52gif           h5cc             h5copy           h5diff           h5fc             h5import         h5ls             h5perf_serial    h5repack         h5stat           h5watch

查看HDF5的内容

h5dump simple_mlp.h5  | more

.h5文件内容如下:

GROUP "/" {
   ATTRIBUTE "backend" {
      DATATYPE  H5T_STRING {
         STRSIZE H5T_VARIABLE;
         STRPAD H5T_STR_NULLTERM;
         CSET H5T_CSET_ASCII;
         CTYPE H5T_C_S1;
      }
      DATASPACE  SCALAR
      DATA {
      (0): "tensorflow"
      }
   }
   ATTRIBUTE "keras_version" {
      DATATYPE  H5T_STRING {
         STRSIZE H5T_VARIABLE;
         STRPAD H5T_STR_NULLTERM;
         CSET H5T_CSET_ASCII;
         CTYPE H5T_C_S1;
      }
      DATASPACE  SCALAR
      DATA {
      (0): "2.0.9"
      }
   }
   ATTRIBUTE "model_config" {
      DATATYPE  H5T_STRING {
         STRSIZE H5T_VARIABLE;
         STRPAD H5T_STR_NULLTERM;
         CSET H5T_CSET_ASCII;
         CTYPE H5T_C_S1;
      }
      DATASPACE  SCALAR
      DATA {
      (0): "{"class_name": "Sequential", "config": [{"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_3", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "dtype": "float32", "activation": "relu", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 64, "batch_input_shape": [null, 100], "use_bias": true, "activity_regularizer": null}}, {"class_name": "Dense", "config": {"kernel_initializer": {"class_name": "VarianceScaling", "config": {"distribution": "uniform", "scale": 1.0, "seed": null, "mode": "fan_avg"}}, "name": "dense_4", "kernel_constraint": null, "bias_regularizer": null, "bias_constraint": null, "activation": "softmax", "trainable": true, "kernel_regularizer": null, "bias_initializer": {"class_name": "Zeros", "config": {}}, "units": 10, "use_bias": true, "activity_regularizer": null}}]}"
      }
   }
   ATTRIBUTE "training_config" {
      DATATYPE  H5T_STRING {
         STRSIZE H5T_VARIABLE;
         STRPAD H5T_STR_NULLTERM;
         CSET H5T_CSET_ASCII;
         CTYPE H5T_C_S1;
      }
      DATASPACE  SCALAR
      DATA {
      (0): "{"metrics": ["accuracy"], "loss": "categorical_crossentropy", "optimizer_config": {"class_name": "SGD", "config": {"nesterov": false, "lr": 0.009999999776482582, "momentum": 0.0, "decay": 0.0}}, "loss_weights": null, "sample_weight_mode": null}"
      }
   }
...