TFDV Tensorflow数据验证:如何将protobuf模式保存到文件或从文件加载

时间:2018-10-12 12:39:06

标签: python tensorflow protocol-buffers tensorflow-data-validation

TFDV生成模式作为模式协议缓冲区。但是,似乎没有辅助功能可以将模式写入文件或从文件读取模式。

schema = tfdv.infer_schema(stats)

如何保存/加载?

3 个答案:

答案 0 :(得分:2)

您可以使用以下方法将模式写入文件/从文件加载模式。

from google.protobuf import text_format
from tensorflow.python.lib.io import file_io
from tensorflow_metadata.proto.v0 import schema_pb2

def write_schema(schema, output_path):
  schema_text = text_format.MessageToString(schema)
  file_io.write_string_to_file(output_path, schema_text)

def load_schema(input_path):
  schema = schema_pb2.Schema()
  schema_text = file_io.read_file_to_string(input_path)
  text_format.Parse(schema_text, schema)
  return schema      

答案 1 :(得分:2)

如果要与 Tensorflow Transform 一起使用,则建议使用以下功能:

import tensorflow_data_validation as tfdv
from tensorflow.python.lib.io import file_io
from tensorflow_transform.tf_metadata import metadata_io

# Define file path
file_io.recursive_create_dir(OUTPUT_DIR)
schema_file = os.path.join(OUTPUT_DIR, 'schema.pbtxt')

# Write schema
tfdv.write_schema_text(schema, schema_file)

# Read schema with tfdv
schema = tfdv.load_schema_text(schema_file)

# Read schema with tensorflow_transform
schema = metadata_io.read_metadata(OUTPUT_DIR)

输出是人类可读的-与JSON类似。但是,如果您希望将其保存为纯 JSON格式,则可以使用以下内容:

from google.protobuf import json_format
from tensorflow.python.lib.io import file_io
from tensorflow_metadata.proto.v0 import schema_pb2

def write_schema(schema, output_path):
    schema_text = json_format.MessageToJson(schema)
    file_io.write_string_to_file(output_path, schema_text)

def load_schema(input_path):
    schema_text = file_io.read_file_to_string(input_path)
    schema = json_format.Parse(schema_text, schema_pb2.Schema())
    return schema   

或者,如果您不需要它为人类可读的格式,则可以使用SerializeToString()和ParseFromString(data)进行反序列化,如here所述。

答案 2 :(得分:1)

tensorflow_data_validation本身为此提供了util函数:

from tensorflow_data_validation.utils.schema_util import write_schema_text, load_schema_text
write_schema_text(schema, "./my_schema")
schema = load_schema_text("./my_schema")