我试图将函数传递给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)
答案 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
...