Ошибка типа при подаче набора данных Tensorflow с типом словаря - PullRequest
0 голосов
/ 11 мая 2018

Я не очень уверен, является ли это проблемой Tensorflow или питона. Я очень новичок в обоих.

Мой код основан на примере учебника Tensorflow wide_deep.py. Я изменил функцию input_fn, чтобы она могла принимать мой набор данных ( Train_data.csv )

Вот код:

def input_fn(data_file, num_epochs, shuffle, batch_size):
  """Generate an input function for the Estimator."""
  assert tf.gfile.Exists(data_file), (
      '%s not found. Please make sure you have run data_download.py and '
      'set the --data_dir argument to the correct path.' % data_file)

  features_interim = pd.read_csv(data_file, usecols=['vgs', 'vbs', 'vds', 'current'])
  labels_interim = pd.read_csv(data_file, usecols=['plo_tox', 'plo_dxl', 'plo_dxw', 'parl1', 'parl2', 'random_fn'])
  features_numpy = features_interim.as_matrix().transpose()
  features = dict(zip(_CSV_FEATURE_COLUMNS, features_numpy))
  labels_numpy = labels_interim.as_matrix().transpose()
  labels = dict(zip(_CSV_LABEL_COLUMNS, labels_numpy))
  dataset = tf.data.Dataset.from_tensor_slices((features, labels))

  if shuffle:
    dataset = dataset.shuffle(buffer_size=_NUM_EXAMPLES['train'])    

  dataset = dataset.repeat(num_epochs)
  dataset = dataset.batch(batch_size)

  return dataset

Но когда я выполняю код, он имеет эту ошибку: Error_1 enter image description here

Основная функция этого кода здесь:

def main(unused_argv):
  # Clean up the model directory if present
  shutil.rmtree(FLAGS.model_dir, ignore_errors=True)
  model = build_estimator(FLAGS.model_dir, FLAGS.model_type)

  train_file = "Tensorflow_training_data.csv"
  test_file = "Tensorflow_testing_data.csv"

  train_hooks = hooks_helper.get_train_hooks(
      FLAGS.hooks, batch_size=FLAGS.batch_size,
      tensors_to_log={'average_loss': 'head/truediv',
                      'loss': 'head/weighted_loss/Sum'})

  # Train and evaluate the model every `FLAGS.epochs_between_evals` epochs.
  for n in range(FLAGS.train_epochs // FLAGS.epochs_between_evals):
    model.train(
        input_fn=lambda: input_fn(train_file, FLAGS.epochs_between_evals, True,
                              FLAGS.batch_size),
        hooks=train_hooks)

    results = model.evaluate(input_fn=lambda: input_fn(
        test_file, 1, False, FLAGS.batch_size))

    # Display evaluation metrics
    print('Results at epoch', (n + 1) * FLAGS.epochs_between_evals)
    print('-' * 60)

    for key in sorted(results):
      print('%s: %s' % (key, results[key]))

В исходном примере (https://github.com/tensorflow/models/tree/master/official/wide_deep/wide_deep.py), тип данных, переданный в модель (DNNLinearCombinedClassifier) ​​является словарем. Я думаю, что я делаю то же самое, только то, что я использую DNNLinearCombinedRegressor. Но, очевидно, я делать что-то не так.

Может кто-нибудь сказать мне, где я запутался? Спасибо!

...