张量流数据集直接归一化

时间:2020-07-23 01:26:00

标签: tensorflow dataset normalization

def get_dataset(file_path, **kwargs):
    dataset = tf.data.experimental.make_csv_dataset(
      file_path,
      batch_size=5, # Artificially small to make examples easier to show.
      label_name=LABEL_COLUMN,
      na_value="?",
      num_epochs=1,
      ignore_errors=True, 
      **kwargs)
    return dataset

CSV_COLUMNS = ['survived', 'sex', 'age', 'n_siblings_spouses', 'parch', 'fare', 'class', 'deck', 'embark_town', 'alone']

TRAIN_DATA_URL = "https://storage.googleapis.com/tf-datasets/titanic/train.csv"    
train_file_path = tf.keras.utils.get_file("train.csv", TRAIN_DATA_URL)
temp_dataset = get_dataset(train_file_path, column_names=CSV_COLUMNS)

是否可以直接规范化temp_dataset ,而无需将数据导出到其他数据库进行进一步操作? (某些列为数字列,另一些为类别列)

1 个答案:

答案 0 :(得分:0)

我首先要使用Pandas读取CSV文件。使用map函数对列进行标准化,

# Read the CSV
df = pd.read_csv( 'train.csv' )

# Normalize the "temp" column
df[ 'temp' ] = df[ 'temp' ].map( lambda x : x / SOME_NUMBER )

现在,保存修改后的CSV,

df.to_csv( 'data.csv' , sep='\t', encoding='utf-8')

现在,将此CSV文件传递给make_csv_dataset()

dataset = tf.data.experimental.make_csv_dataset(
      'data.csv',
      batch_size=5, # Artificially small to make examples easier to show.
      label_name=LABEL_COLUMN,
      na_value="?",
      num_epochs=1,
      ignore_errors=True, 
      **kwargs)

这可能是一个简短的技巧,可以标准化单个列,然后将其伪造为tf.data.Dataset。有关更多详细信息,请参阅此doc