2016-09-27 218 views
1

虽然从TensorFlow在我的数据集运行wide_n_deep_tutorial程序,会显示以下错误。TypeError:签名不匹配。关键字必须是D型细胞<D型:“串”>,有<D类:“Int64的”>

"TypeError: Signature mismatch. Keys must be dtype <dtype: 'string'>, got <dtype:'int64'>" 

enter image description here

以下是代码片段:

def input_fn(df): 
    """Input builder function.""" 
    # Creates a dictionary mapping from each continuous feature column name (k) to 
    # the values of that column stored in a constant Tensor. 
    continuous_cols = {k: tf.constant(df[k].values) for k in CONTINUOUS_COLUMNS} 
    # Creates a dictionary mapping from each categorical feature column name (k) 
    # to the values of that column stored in a tf.SparseTensor. 
    categorical_cols = {k: tf.SparseTensor(
     indices=[[i, 0] for i in range(df[k].size)], 
     values=df[k].values, 
     shape=[df[k].size, 1]) 
         for k in CATEGORICAL_COLUMNS} 

    # Merges the two dictionaries into one. 
    feature_cols = dict(continuous_cols) 
    feature_cols.update(categorical_cols) 
    # Converts the label column into a constant Tensor. 
    label = tf.constant(df[LABEL_COLUMN].values) 
    # Returns the feature columns and the label. 

    return feature_cols, label 



def train_and_eval(): 
    """Train and evaluate the model.""" 
    train_file_name, test_file_name = maybe_download() 

    df_train=train_file_name 
    df_test=test_file_name 

    df_train[LABEL_COLUMN] = (
     df_train["impression_flag"].apply(lambda x: "generated" in x)).astype(str) 

    df_test[LABEL_COLUMN] = (
     df_test["impression_flag"].apply(lambda x: "generated" in x)).astype(str) 

    model_dir = tempfile.mkdtemp() if not FLAGS.model_dir else FLAGS.model_dir 
    print("model directory = %s" % model_dir) 

    m = build_estimator(model_dir) 
    print('model succesfully build!') 
    m.fit(input_fn=lambda: input_fn(df_train), steps=FLAGS.train_steps) 
    print('model fitted!!') 
    results = m.evaluate(input_fn=lambda: input_fn(df_test), steps=1) 
    for key in sorted(results): 
    print("%s: %s" % (key, results[key])) 

任何帮助表示赞赏。

回答

0

将有助于看到之前的错误信息输出,以确定这个错误在起出过程的哪一部分,但是,有消息称很清楚,关键是预期是一个字符串,而整数给予,而不是。我只是猜测,但是脚本的前面部分是否正确设置了列名,因为它们可能是在此实例中引用的键?

0

根据your traceback来判断,您遇到的问题是由您输入的特征列或input_fn的输出引起的。对于values参数,您的稀疏张量很可能会被输入非字符串dtypes;稀疏特征列期望字符串值。确保您提供的数据正确无误,如果您确定自己的数据正确,则可以尝试以下操作:

categorical_cols = {k: tf.SparseTensor(
    indices=[[i, 0] for i in range(df[k].size)], 
    values=df[k].astype(str).values, # Convert sparse values to string type 
    shape=[df[k].size, 1]) 
        for k in CATEGORICAL_COLUMNS} 
相关问题