张量流数据集列的规范化

时间:2020-06-23 19:17:10

标签: python python-3.x tensorflow tensorflow2.0

我有一个Tensorflow数据集:

data = tf.data.experimental.make_csv_dataset(r"data.tsv.gz",
                                             field_delim="\t",
                                             compression_type="GZIP",
                                             batch_size=1000, 
                                             label_name="Y", 
                                             num_epochs=1)

并且我想规范列X1,我尝试过这种方式:

columns = []

x1 = tf.feature_column.numeric_column('X1', normalizer_fn=lambda x: (x - xMean) / xStd)
columns.append(x1)

l = tf.keras.layers.DenseFeatures(columns)

nn = tf.keras.Sequential()
nn.add(l)
nn.compile(optimizer="Adam", loss="binary_crossentropy", metrics=[tf.keras.metrics.AUC(name='auc')])
nn.fit(data, epochs=5)

但是我不知道如何计算均值和标准差。如何从数据集中获取一列并计算均值和标准差?也许张量流中有一些归一化功能?

1 个答案:

答案 0 :(得分:0)

到目前为止,您可以使用一些变通方法来实现此目的,方法是先计算均值和偏差,然后使用tf.data.experimental.make_csv_dataset加载CSV数据。

下面是代码段。

import tensorflow as tf
import pandas as pd
import numpy as np

df = pd.read_csv("/content/titanic.csv")

def normalize(data):
  Numeric_column = ["Age"]
  x = df[Numeric_column]
  MEAN = np.mean(x)
  STD = np.std(x)
  return (data-MEAN)/STD

df["normalized_age"] = df["Age"].apply(normalize)
#save the normalized dataframe to csv file
df.to_csv("normalized_data.csv",sep='\t',encoding='utf-8') 

现在使用tf.data.experimental.make_csv_dataset

加载标准化的CSV文件