Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Airflow TFX Trainer组件未将模型输出到文件系统的问题_Airflow_Tensorflow Estimator_Tfx - Fatal编程技术网

Airflow TFX Trainer组件未将模型输出到文件系统的问题

Airflow TFX Trainer组件未将模型输出到文件系统的问题,airflow,tensorflow-estimator,tfx,Airflow,Tensorflow Estimator,Tfx,首先,我使用的是TFX版本0.21.2和Tensorflow版本2.1 我已经按照Chigaco出租车的例子建造了一条管道。执行培训师组件时,我可以在日志中看到以下内容: 信息-培训完成。模型写入/root/aiffair/tfx/pipelines/fish/Trainer/Model/9/serving\u Model\u dir 当检查上述目录时,它是空的。我错过了什么 这是我的DAG定义文件(导入语句省略): 这是我的模块文件: _DENSE_FLOAT_FEATURE_KEYS = [

首先,我使用的是TFX版本0.21.2和Tensorflow版本2.1

我已经按照Chigaco出租车的例子建造了一条管道。执行培训师组件时,我可以在日志中看到以下内容:

信息-培训完成。模型写入/root/aiffair/tfx/pipelines/fish/Trainer/Model/9/serving\u Model\u dir

当检查上述目录时,它是空的。我错过了什么

这是我的DAG定义文件(导入语句省略):

这是我的模块文件:

_DENSE_FLOAT_FEATURE_KEYS = ['length']

real_valued_columns = [tf.feature_column.numeric_column('length')]

def _eval_input_receiver_fn():

  serialized_tf_example = tf.compat.v1.placeholder(
      dtype=tf.string, shape=[None], name='input_example_tensor')

  features = tf.io.parse_example(
      serialized=serialized_tf_example,
      features={
          'length': tf.io.FixedLenFeature([], tf.float32),
          'label': tf.io.FixedLenFeature([], tf.int64),
      })

  receiver_tensors = {'examples': serialized_tf_example}

  return tfma.export.EvalInputReceiver(
      features={'length' : features['length']},
      receiver_tensors=receiver_tensors,
      labels= features['label'],
      )

def parser(serialized_example):

  features = tf.io.parse_single_example(
      serialized_example,
      features={
          'length': tf.io.FixedLenFeature([], tf.float32),
          'label': tf.io.FixedLenFeature([], tf.int64),
      })
  return ({'length' : features['length']}, features['label'])

def _input_fn(filenames):
  # TFRecordDataset doesn't directly accept paths with wildcards
  filenames = tf.data.Dataset.list_files(filenames)
  dataset = tf.data.TFRecordDataset(filenames, 'GZIP')
  dataset = dataset.map(parser)
  dataset = dataset.shuffle(2000)
  dataset = dataset.batch(40)
  dataset = dataset.repeat(10)

  return dataset

def trainer_fn(trainer_fn_args, schema):

    estimator = tf.estimator.LinearClassifier(feature_columns=real_valued_columns)

    train_input_fn = lambda: _input_fn(trainer_fn_args.train_files)

    train_spec = tf.estimator.TrainSpec(
      train_input_fn,
      max_steps=trainer_fn_args.train_steps)

    eval_input_fn = lambda: _input_fn(trainer_fn_args.eval_files)

    eval_spec = tf.estimator.EvalSpec(
      eval_input_fn,
      steps=trainer_fn_args.eval_steps,
      name='fish-eval')

    receiver_fn = lambda: _eval_input_receiver_fn()

    return {
      'estimator': estimator,
      'train_spec': train_spec,
      'eval_spec': eval_spec,
      'eval_input_receiver_fn': receiver_fn
  }

提前感谢您的帮助

为与我面临相同问题的任何人发布解决方案

模型没有写入文件系统的原因是估计器需要一个配置参数来知道在哪里写入模型

以下对trainer_fn功能的修改应能解决该问题

run_config = tf.estimator.RunConfig(save_checkpoints_steps=999, keep_checkpoint_max=1)  

run_config = run_config.replace(model_dir=trainer_fn_args.serving_model_dir)

estimator=tf.estimator.LinearClassifier(feature_columns=real_valued_columns,config=run_config)
run_config = tf.estimator.RunConfig(save_checkpoints_steps=999, keep_checkpoint_max=1)  

run_config = run_config.replace(model_dir=trainer_fn_args.serving_model_dir)

estimator=tf.estimator.LinearClassifier(feature_columns=real_valued_columns,config=run_config)