TensorFlow多标签回归模型构建报错:索引不匹配问题求助
解决TensorFlow多标签回归中x与y索引不匹配的问题
嘿,我来帮你搞定这个困扰你的索引不匹配问题!先看报错信息,核心问题出在你传给pandas_input_fn的y参数格式不对,导致它没法和x的索引对应上。
问题根源
你现在用list(map(lambda label: data_set[label].values, LABELS))生成的y是一个包含两个numpy数组的列表,而pandas_input_fn要求y必须是带索引的pandas对象——单标签用Series,多标签用DataFrame。普通列表/数组没有pandas那样的索引结构,函数自然没法和x的RangeIndex匹配,哪怕换成numpy数组的列表也没用。
修正后的代码
直接把y设置为数据集里对应标签列组成的DataFrame就行,不需要手动转成values或者拆成列表:
FEATURES = ["crim", "zn", "indus", "nox", "rm", "dis", "tax", "ptratio"] LABELS = ["medv", "age"] def get_input_fn(data_set, num_epochs=None, shuffle=True): return tf.estimator.inputs.pandas_input_fn( x=pd.DataFrame({k: data_set[k].values for k in FEATURES}), # 直接取标签列的DataFrame,自动保留索引 y=data_set[LABELS], num_epochs=num_epochs, shuffle=shuffle) # 你的DNNRegressor定义是对的,label_dimension=2适配多标签回归 regressor = tf.estimator.DNNRegressor( feature_columns=feature_cols, label_dimension=2, hidden_units=[10, 10], model_dir="/tmp/boston_model" )
额外小提示
如果想手动构造y的DataFrame,也可以这么写:
y=pd.DataFrame({col: data_set[col].values for col in LABELS})
效果和直接取data_set[LABELS]完全一致,都能保证索引和x匹配。记住,尽量别把pandas数据转成普通列表/数组再传给pandas_input_fn的x或y参数,不然很容易出索引问题。
内容的提问来源于stack exchange,提问作者user1646040
相关产品推荐
相关产品推荐

