#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)```