简体   繁体   中英

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

While running the wide_n_deep_tutorial program from TensorFlow on my dataset, the following error is displayed.

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

在此处输入图片说明

Following is the code snippet:

 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]))

Any help is appreciated.

would help to see the output prior to the error message to determine which part of the process this error tripped out at, but, the message says quite clearly that the key is expected to be a string whereas an integer was given instead. I am only guessing, but are the column names set out correctly in the earlier part of your script as they could potentially be the keys that are being referred to in this instance?

Judging by your traceback , the problem you're having is caused by your inputs to feature columns, or the output of your input_fn . Your sparse tensors are most likely being fed non-string dtypes for the values parameter; sparse feature columns expect string values. Ensure that you're feeding the correct data, and if you're sure you are, you can try the following:

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}

This is how I solved this challenge:

from sklearn.model_selection import train_test_split

# split the data set 
X_train, X_test, y_train, y_test = train_test_split(M, N, test_size=0.3)

# covert string to int64 for training set
X_train = X_train[X_train.columns] = X_train[X_train.columns].apply(np.int64)
y_train = y_train.apply(np.int64)

# covert string to int64 for testing set
X_test = X_test[X_test.columns] = X_test[X_test.columns].apply(np.int64)
y_test = y_test.apply(np.int64)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM