easy_rec/python/utils/fg_util.py (34 lines of code) (raw):
import json
import logging
import tensorflow as tf
from easy_rec.python.protos.dataset_pb2 import DatasetConfig
from easy_rec.python.protos.feature_config_pb2 import FeatureConfig
from easy_rec.python.utils.config_util import get_compatible_feature_configs
from easy_rec.python.utils.convert_rtp_fg import load_input_field_and_feature_config # NOQA
if tf.__version__ >= '2.0':
tf = tf.compat.v1
def load_fg_json_to_config(pipeline_config):
fg_json_path = pipeline_config.fg_json_path
if not fg_json_path:
return
if fg_json_path.startswith('!'):
# already loaded
return
label_fields = pipeline_config.data_config.label_fields
with tf.gfile.GFile(fg_json_path, 'r') as fin:
rtp_fg = json.load(fin)
fg_config = load_input_field_and_feature_config(
rtp_fg, label_fields=label_fields)
pipeline_config.data_config.ClearField('input_fields')
pipeline_config.ClearField('feature_configs')
# not clear features so that we could define extra features
# which is not defined in fg.json
# pipeline_config.feature_config.ClearField('features')
for input_config in fg_config.data_config.input_fields:
in_config = DatasetConfig.Field()
in_config.CopyFrom(input_config)
pipeline_config.data_config.input_fields.append(in_config)
fg_fea_config = get_compatible_feature_configs(fg_config)
for fc in fg_fea_config:
fea_config = FeatureConfig()
fea_config.CopyFrom(fc)
pipeline_config.feature_config.features.append(fea_config)
logging.info('data_config and feature_config has been replaced by fg_json.')
# signal that it is already loaded
pipeline_config.fg_json_path = '!' + pipeline_config.fg_json_path
return pipeline_config