Доступ к OrderedDict и TensorSpec отдельно от PrefetchDataset

#python-3.x #tensorflow2.0

#python-3.x #tensorflow2.0

Вопрос:

Я все еще новичок в tensorflow и изучаю основы. Это сценарий загрузки данных из файла CSV.

 def get_dataset(file_path, **kwargs):
  dataset = tf.data.experimental.make_csv_dataset(
      file_path,
      batch_size,
      column_names= column_names,
      label_name = label_names,
      na_value = '?',
      num_epochs = 1,
      **kwargs)
  return dataset
  

Это возвращает PrefetchDataset .

 raw_train_data = get_dataset(train_file_path)
type(raw_train_data)
  

 tensorflow.python.data.ops.dataset_ops.PrefetchDataset
  

Глядя на element_spec этого набора данных, он показывает структуру, подобную кортежу, где объекты находятся в OrderedDict, а метки являются тензором.

 raw_train_data.element_spec
  

 (OrderedDict([('sex', TensorSpec(shape=(None,), dtype=tf.string, name=None)),
              ('age', TensorSpec(shape=(None,), dtype=tf.float32, name=None)),
              ('n_siblings_spouses',
               TensorSpec(shape=(None,), dtype=tf.int32, name=None)),
              ('parch', TensorSpec(shape=(None,), dtype=tf.int32, name=None)),
              ('fare', TensorSpec(shape=(None,), dtype=tf.float32, name=None)),
              ('class', TensorSpec(shape=(None,), dtype=tf.string, name=None)),
              ('deck', TensorSpec(shape=(None,), dtype=tf.string, name=None)),
              ('embark_town',
               TensorSpec(shape=(None,), dtype=tf.string, name=None)),
              ('alone',
               TensorSpec(shape=(None,), dtype=tf.string, name=None))]),
 TensorSpec(shape=(None,), dtype=tf.int32, name=None))
  

Можно ли получить доступ к OrderedDict и тензору отдельно? Цель состоит в том, чтобы выполнить анализ данных (например, в pandas), чтобы найти такую информацию, как уникальные значения каждого из тензоров (таким образом, уникальные значения в столбце / объекте набора данных), диапазон значений, статистика значений (аналогично pd.describe). Возможно ли выполнить такой анализ с помощью tensorflow?

Я заметил, что с помощью пакета набора данных можно получить доступ к объектам и меткам отдельно и просмотреть некоторую информацию о каждом из составляющих тензоров.

 temp_dataset = get_dataset(train_file_path, select_columns = selected_subset_columns)
features, label = next(iter(temp_dataset))

features
  

 OrderedDict([('sex',
              <tf.Tensor: shape=(5,), dtype=string, numpy=array([b'female', b'male', b'male', b'female', b'female'], dtype=object)>),
             ('age',
              <tf.Tensor: shape=(5,), dtype=float32, numpy=array([35., 30., 20., 27., 19.], dtype=float32)>),
             ('n_siblings_spouses',
              <tf.Tensor: shape=(5,), dtype=int32, numpy=array([1, 0, 1, 0, 1], dtype=int32)>),
             ('class',
              <tf.Tensor: shape=(5,), dtype=string, numpy=array([b'Third', b'First', b'Third', b'Second', b'Third'], dtype=object)>),
             ('deck',
              <tf.Tensor: shape=(5,), dtype=string, numpy=array([b'unknown', b'C', b'unknown', b'E', b'unknown'], dtype=object)>),
             ('alone',
              <tf.Tensor: shape=(5,), dtype=string, numpy=array([b'n', b'y', b'n', b'y', b'n'], dtype=object)>)])
  

 features.keys()
  

 odict_keys(['sex', 'age', 'n_siblings_spouses', 'class', 'deck', 'alone'])
  

 tf.unique(features['sex']).y.numpy()
  

 array([b'female', b'male'], dtype=object)
  

Однако эта информация пакета не обязательно должна быть аналогична остальной части набора данных. Есть ли более простой способ извлечь эту информацию и выполнить анализ? Ваша помощь очень ценится.

Ответ №1:

Я заметил, что ваша raw_train_data.element_spec переменная является tuple объектом.

Таким образом, вы можете разделить OrderedDict и TensorSpec, распаковав кортеж следующим образом:

 a, b = raw_train_data.element_spec

print(a)
print()
print(b)

>>>

OrderedDict([('sex', TensorSpec(shape=(None,), dtype=tf.string, name=None)),
              ('age', TensorSpec(shape=(None,), dtype=tf.float32, name=None)),
              ('n_siblings_spouses',
               TensorSpec(shape=(None,), dtype=tf.int32, name=None)),
              ('parch', TensorSpec(shape=(None,), dtype=tf.int32, name=None)),
              ('fare', TensorSpec(shape=(None,), dtype=tf.float32, name=None)),
              ('class', TensorSpec(shape=(None,), dtype=tf.string, name=None)),
              ('deck', TensorSpec(shape=(None,), dtype=tf.string, name=None)),
              ('embark_town',
               TensorSpec(shape=(None,), dtype=tf.string, name=None)),
              ('alone',
               TensorSpec(shape=(None,), dtype=tf.string, name=None))]

 TensorSpec(shape=(None,), dtype=tf.int32, name=None)```