tf__norm()接受1个位置参数,但给出了2个

时间:2020-09-13 00:48:23

标签: tensorflow keras

我试图将函数传递给tf数据集以对数据框中的非数字数据进行归一化,但是我不断收到此错误:

TypeError:用户代码中: TypeError:tf__norm()接受1个位置参数,但给出了2个

def norm(dataframe):
    for header in dataframe._get_numeric_data().columns:
        dataframe[header] = (dataframe[header] - dataframe[header].mean())/dataframe[header].std()
    return dataframe

train, val= train_test_split( dataframe, test_size =0.2)

def df_to_dataset(dataframe, shuffle=True, batch_size=32):
    dataframe = dataframe.copy()
    labels = dataframe.pop("target")
    ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))
    if shuffle:
        ds = ds.shuffle(buffer_size=len(dataframe))
    ds = ds.batch(batch_size)
    ds=ds.map(norm)
    return ds

    
train_ds=  df_to_dataset(train, shuffle=False, batch_size=32) 
val_ds = df_to_dataset(val, shuffle=False)

1 个答案:

答案 0 :(得分:0)

按照您的代码, ds 的类型是BatchDataSet,其element_spec是大小为2的元组,但是您的norm函数仅需要一个参数,这就是为什么它会升高

takes 1 positional argument but 2 were given

更多细节,第一个元素的类型是dict,另一个是TensorSpec。因此,只需像这样更新您的规范函数即可:

def norm(df_as_dict, tensor_spec):
    ...
    do some work for df_as_dict
    ...