【问题标题】:tf__norm() takes 1 positional argument but 2 were giventf__norm() 接受 1 个位置参数,但给出了 2 个
【发布时间】:2020-09-13 00:48:23
【问题描述】:

我试图将一个函数传递给我的 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)

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    按照你的代码,ds 的类型是 BatchDataSet ,它的 element_spec 是元组,大小为 2,但你的 norm 函数只需要一个参数,这就是它引发的原因

    takes 1 positional argument but 2 were given

    更详细一点,第一个元素的类型是dict,另一个是TensorSpec。因此,只需像这样更新您的 norm 函数:

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

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 2019-04-20
      • 2018-11-15
      • 2014-07-19
      • 2016-08-09
      • 2020-01-30
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多