Tensorflow 抛出 “TypeError: unhashable type: ‘list'” 错误

我正在学习Tensorflow。以下是我的代码。代码使用一些特征构建了一个线性回归模型,并尝试预测MPG(燃料消耗)。

代码的第一部分(数据集准备)为训练准备数据集。第二部分(开始Tensorflow)尝试构建和训练一个线性回归模型。

我遇到的问题是当我调用线性回归模型的训练函数时,抛出了一个错误…

我不知道如何修复这个错误。我也不知道为什么“不可哈希的列表”会影响训练。

请提供一些见解。谢谢。

from __future__ import absolute_import, division, print_functionimport pathlibimport pandas as pdimport seaborn as snsimport tensorflow as tffrom tensorflow import keras# tf.enable_eager_execution() # turn eager model on; this should only be called ONCE!print(tf.__version__)#-----------------------------------------------------## Dataset preparation# read dataset and previewdataset_path = keras.utils.get_file("auto-mpg.data", "https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data")column_names = ['MPG','Cylinders','Displacement','Horsepower','Weight',                'Acceleration', 'Model Year', 'Origin'] raw_dataset = pd.read_csv(dataset_path, names=column_names,                      na_values = "?", comment='\t',                      sep=" ", skipinitialspace=True)dataset = raw_dataset.copy()# erase NaN rowsdataset = dataset.dropna()# Origin column is not magnitude meaningful, don't use this as feature!origin = dataset.pop('Origin')# Separate train & test datasetdataset_train = dataset.sample(frac=0.8, random_state = 0)dataset_test  = dataset.drop(dataset_train.index)#-----------------------------------------------------## Begin Tensorflow # build input fndef train_input_fn(df, label_name):  """  Argus:    df: pandas dataframe    label_name: name of label column  return:    A function: <function tensorflow.python.estimator.inputs.pandas_io.input_fn>  """  return tf.estimator.inputs.pandas_input_fn(    x = df,    y = df[label_name],    batch_size = 32,    num_epochs = 5,    shuffle    = True,    queue_capacity = 1000,    num_threads = 1  )# define modelfeature_names = ['Cylinders', 'Displacement', 'Horsepower', 'Weight', 'Acceleration', 'Model Year'] feature_cols_tensor = [tf.feature_column.numeric_column(feature_names)]  # turn the string list into tensor objectlinear_regressor = tf.estimator.LinearRegressor(feature_columns = feature_cols_tensor)linear_regressor.train(  train_input_fn(dataset_train, 'MPG'),   steps = 100)

以下是错误信息

INFO:tensorflow:Calling model_fn.TypeErrorTraceback (most recent call last)<ipython-input-14-c1814cca00b6> in <module>()----> 1 linear_regressor.train(train_input_fn(dataset_train_norm, 'MPG'), steps = 100)/usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/estimator/estimator.pyc in train(self, input_fn, hooks, steps, max_steps, saving_listeners)    361     362     saving_listeners = _check_listeners_type(saving_listeners)--> 363     loss = self._train_model(input_fn, hooks, saving_listeners)    364     logging.info('Loss for final step: %s.', loss)    365     return self/usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/estimator/estimator.pyc in _train_model(self, input_fn, hooks, saving_listeners)    841       return self._train_model_distributed(input_fn, hooks, saving_listeners)    842     else:--> 843       return self._train_model_default(input_fn, hooks, saving_listeners)    844     845   def _train_model_default(self, input_fn, hooks, saving_listeners):/usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/estimator/estimator.pyc in _train_model_default(self, input_fn, hooks, saving_listeners)    854       worker_hooks.extend(input_hooks)    855       estimator_spec = self._call_model_fn(--> 856           features, labels, model_fn_lib.ModeKeys.TRAIN, self.config)    857       return self._train_with_estimator_spec(estimator_spec, worker_hooks,    858                                              hooks, global_step_tensor,/usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/estimator/estimator.pyc in _call_model_fn(self, features, labels, mode, config)    829     830     logging.info('Calling model_fn.')--> 831     model_fn_results = self._model_fn(features=features, **kwargs)    832     logging.info('Done calling model_fn.')    833 /usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/estimator/canned/linear.pyc in _model_fn(features, labels, mode, config)    430           optimizer=optimizer,    431           partitioner=partitioner,--> 432           config=config)    433     434     super(LinearRegressor, self).__init__(/usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/estimator/canned/linear.pyc in _linear_model_fn(features, labels, mode, head, feature_columns, optimizer, partitioner, config)    155     logit_fn = _linear_logit_fn_builder(    156         units=head.logits_dimension, feature_columns=feature_columns)--> 157     logits = logit_fn(features=features)    158     159     return head.create_estimator_spec(/usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/estimator/canned/linear.pyc in linear_logit_fn(features)     96         feature_columns=feature_columns,     97         units=units,---> 98         cols_to_vars=cols_to_vars)     99     bias = cols_to_vars.pop('bias')    100     if units > 1:/usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/feature_column/feature_column.pyc in linear_model(features, feature_columns, units, sparse_combiner, weight_collections, trainable, cols_to_vars)    409       nor `_CategoricalColumn`.    410   """--> 411   feature_columns = _clean_feature_columns(feature_columns)    412   for column in feature_columns:    413     if not isinstance(column, (_DenseColumn, _CategoricalColumn)):/usr/local/envs/py2env/lib/python2.7/site-packages/tensorflow/python/feature_column/feature_column.pyc in _clean_feature_columns(feature_columns)   2231   name_to_column = dict()   2232   for column in feature_columns:-> 2233     if column.name in name_to_column:   2234       raise ValueError('Duplicate feature column name found for columns: {} '   2235                        'and {}. This usually means that these columns refer to 'TypeError: unhashable type: 'list'

回答:

问题在于你向Tensorflow特征列函数提供了列表,但它需要一个单一的字符串来表示列名。

将以下代码行替换为:

feature_cols_tensor = [tf.feature_column.numeric_column(feature_names)]

替换为:

feature_cols_tensor = list(map(tf.feature_column.numeric_column, feature_names))

你的列名Model Year似乎是个拼写错误:在你的原始数据中,我只找到了没有空格的ModelYear

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注