首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:特性字典中没有的特性

ValueError:特性字典中没有的特性
EN

Stack Overflow用户
提问于 2017-12-04 14:25:59
回答 5查看 10.6K关注 0票数 13

我正在尝试使用TensorFlow编写一个简单的深入机器学习模型。我使用我在Excel中合成的玩具数据集来使模型工作和接受数据。我的代码如下:

代码语言:javascript
复制
import pandas as pd
import numpy as np
import tensorflow as tf

raw_data = np.genfromtxt('ai/mock-data.csv', delimiter=',', dtype=str)
my_data = np.delete(raw_data, (0), axis=0) #deletes the first row, axis=0 indicates row, axis=1 indicates column
my_data = np.delete(my_data, (0), axis=1) #deletes the first column

policy_state = tf.feature_column.categorical_column_with_vocabulary_list('policy_state', [
    'AL', 'CA', 'MI'
])

modern_classic_ind = tf.feature_column.categorical_column_with_vocabulary_list('modern_classic_ind', [
    '0', '1'
])

h_plus_ind = tf.feature_column.categorical_column_with_vocabulary_list('h_plus_ind', [
    '0', '1'
])

retention_ind = tf.feature_column.categorical_column_with_vocabulary_list('retention_ind', [
    '0', '1'
])

feature_columns = [
    tf.feature_column.indicator_column(policy_state),
    tf.feature_column.indicator_column(modern_classic_ind),
    tf.feature_column.indicator_column(h_plus_ind)
]
classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns,
                                      hidden_units=[10, 20, 10],
                                      n_classes=3,
                                      model_dir="/tmp/ret_model")

train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": np.array(my_data[:, 0:3], dtype=str)},
y=np.array(np.array(my_data[:, 3], dtype=str)),
num_epochs=None,
shuffle=True)

classifier.train(input_fn=train_input_fn, steps=2000)

不幸的是,我得到了以下错误。我已经尝试过从csv文件中剪裁标签,而不是离开它们,命名特性列不同的东西,并改变numpy数组的类型。错误仍然存在。

ValueError: Feature h_plus_ind is not in features dictionary.

如果删除h_plus_ind,它只会将错误抛到另一列上。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-12-04 16:06:59

当使用tf.feature_columns时,您在input_fn中输入的数据应该具有与以前创建的功能列相同的键。因此,您的x of train_input_fn应该是一个字典,其中的键以feature_columns命名。

一个模拟的例子:

代码语言:javascript
复制
x = {"policy_state": np.array(['AL','AL','AL','AL','AL']),
     "modern_classic_ind": np.array(['0','0','0','0','0']),
     "h_plus_ind": np.array(['0','0','0','0','0']),}

侧面的 :

开发人员google提供的这个伟大的文章可能是一个很好的读物,因为它引入了一种使用csv API从csv文件直接创建input_fn的新方法。它具有更好的内存管理,避免将所有数据集加载到内存中。

票数 16
EN

Stack Overflow用户

发布于 2018-08-03 09:43:04

我也有同样的问题,但是当我检查我的数据库列的名称时,列的名称出现了一个小错误。看看你专栏的名字。

票数 1
EN

Stack Overflow用户

发布于 2022-02-01 08:34:35

如果使用已存在的数据集,则建议重命名这些列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47635507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档