tf.estimator 的 tensorflow 提要列表功能(多热)
Posted
技术标签:
【中文标题】tf.estimator 的 tensorflow 提要列表功能(多热)【英文标题】:tensorflow feed list feature (multi-hot) to tf.estimator 【发布时间】:2019-03-27 01:57:29 【问题描述】:一些特征列的数据类型是list
。它们的长度可以不同。我想将此列编码为多热分类特征并将其提供给tf.estimator
。我尝试了以下但错误Unable to get element as bytes
显示。我认为这是深度学习中的一种常见做法,尤其是推荐系统,例如深和宽模型。我发现了一个相关问题here,但它没有显示如何向估算器提供数据。
import pandas as pd
import tensorflow as tf
OUTDIR = "./data"
data = "x": [["a", "c"], ["a", "b"], ["b", "c"]], "y": ["x", "y", "z"]
df = pd.DataFrame(data)
Y = df["y"]
X = df.drop("y", axis=1)
indicator_features = [
tf.feature_column.indicator_column(
categorical_column=tf.feature_column.categorical_column_with_vocabulary_list(
key="x", vocabulary_list=["a", "b", "c"]
)
)
]
model = tf.estimator.LinearClassifier(
feature_columns=indicator_features, model_dir=OUTDIR
)
training_input_fn = tf.estimator.inputs.pandas_input_fn(
x=X, y=Y, batch_size=64, shuffle=True, num_epochs=None
)
model.train(input_fn=training_input_fn)
以下错误:
INFO:tensorflow:使用默认配置。信息:张量流:使用配置: '_model_dir':'testalg','_tf_random_seed':无, '_save_summary_steps':100,'_save_checkpoints_steps':无, '_save_checkpoints_secs':600,'_session_config':无, “_keep_checkpoint_max”:5,“_keep_checkpoint_every_n_hours”:10000, '_log_step_count_steps':100,'_train_distribute':无,'_device_fn': 无,'_service':无,'_cluster_spec': ,'_task_type':'工人','_task_id':0, '_global_id_in_cluster':0,'_master':'','_evaluation_master':'', '_is_chief':真,'_num_ps_replicas':0,'_num_worker_replicas':1 信息:张量流:调用 model_fn。信息:张量流:完成调用 模型_fn。信息:张量流:创建 CheckpointSaverHook。 INFO:tensorflow:Graph 已完成。信息:张量流:运行 local_init_op。信息:张量流:完成运行 local_init_op。 INFO:tensorflow:Error 报告给 Coordinator: ,无法 以字节形式获取元素。 INFO:tensorflow:将检查点保存为 0 到 testalg/model.ckpt。 -------------------------------------------------- ----- InternalError Traceback(最近一次调用最后一次) /home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在 _do_call(self, fn, *args) 1321 中尝试: -> 1322 return fn(*args) 1323 除了errors.OpError as e:
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在 _run_fn(feed_dict、fetch_list、target_list、options、run_metadata) 第1306章 -> 1307 个选项,feed_dict,fetch_list,target_list,run_metadata)1308
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在 _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list,run_metadata)1408 self._session,选项, feed_dict, fetch_list, target_list, -> 1409 run_metadata) 1410 其他:
InternalError: 无法以字节形式获取元素。
在处理上述异常的过程中,又发生了一个异常:
InternalError Traceback(最近一次调用最后一次) 在 () 44 45 ---> 46 model.train(input_fn=training_input_fn)
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py 在火车(自我,input_fn,钩子,步骤,max_steps,saving_listeners) 364 第365章 --> 366 loss = self._train_model(input_fn, hooks, Saving_listeners) 367 logging.info('最后一步的损失:%s。',损失) 368返回自己
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py 在 _train_model(self, input_fn, hooks, Saving_listeners) 1117 返回 self._train_model_distributed(input_fn, hooks, Saving_listeners) 1118 其他: -> 1119 返回 self._train_model_default(input_fn, hooks, Saving_listeners) 1120 1121 def _train_model_default(self, input_fn, hooks, Saving_listeners):
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py 在 _train_model_default(self, input_fn, hooks, Saving_listeners) 第1133章 工人钩子,1134 钩子,global_step_tensor, -> 1135 Saving_listeners) 1136 1137 def _train_model_distributed(self, input_fn, hooks, Saving_listeners):
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py 在 _train_with_estimator_spec(self, estimator_spec, worker_hooks, 钩子,global_step_tensor,saving_listeners)1334损失=无 第1335章 -> 1336 _, loss = mon_sess.run([estimator_spec.train_op, estimator_spec.loss]) 1337 回波损耗 1338
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py 在退出(自我、异常类型、异常值、回溯) 687 如果 [errors.OutOfRangeError, StopIteration] 中的 exception_type : 第688章 --> 689 self._close_internal(exception_type) 690 # exit 应该返回 True 以抑制异常。 691 返回异常类型为无
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py 在 _close_internal(self, exception_type) 724 如果 self._sess 为无: 725 raise RuntimeError('会话已经关闭。') --> 726 self._sess.close() 最后727: 第728章
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py 在关闭(自己) 第972章 973尝试: --> 974 self._sess.close() 975 除了_PREEMPTION_ERRORS: 976通过
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py 在关闭(自我)1116 self._coord.join(1117 stop_grace_period_secs=self._stop_grace_period_secs, -> 1118 ignore_live_threads=True) 1119 最后:1120 尝试:
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/coordinator.py 在加入(自我,线程,stop_grace_period_secs,ignore_live_threads) 第387章 第388章 --> 389 6.reraise(*self._exc_info_to_raise) 390 elif 落后者: 391 如果忽略_live_threads:
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/six.py 再加注(tp, value, tb) 第683章 684 如果 value.traceback 不是 tb: --> 685 提高价值。with_traceback(tb) 686 升值 第687章
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/inputs/queues/feeding_queue_runner.py 在 _run(self, sess, enqueue_op, feed_fn, coord) 92 尝试: 93 feed_dict = None 如果 feed_fn 是 None 否则 feed_fn() ---> 94 sess.run(enqueue_op, feed_dict=feed_dict) 95 除了(errors.OutOfRangeError,errors.CancelledError): 96 # 此异常表示队列已关闭。
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在运行中(self,fetches,feed_dict,options,run_metadata) 898尝试: 第899章 --> 900 run_metadata_ptr) 901 如果运行元数据: 902 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在 _run(self、handle、fetches、feed_dict、options、run_metadata) 1133 如果 final_fetches 或 final_targets 或(句柄和 feed_dict_tensor): 1134 结果 = self._do_run(handle, final_targets,final_fetches, -> 1135 feed_dict_tensor, options, run_metadata) 1136 else: 1137 results = []
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在 _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)1314 如果句柄为无:1315 返回 self._do_call(_run_fn, feeds, fetches, 目标, 选项, -> 1316 run_metadata) 1317 else: 1318 return self._do_call(_prun_fn, handle, feeds, fetches)
/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在 _do_call(self, fn, *args) 1333 中,除了 KeyError: 1334 经过 -> 1335 raise type(e)(node_def, op, message) 1336 1337 def _extend_graph(self):
InternalError: 无法以字节形式获取元素。
【问题讨论】:
也许这个能给你一些启发***.com/questions/47028898/… 【参考方案1】:我认为您的问题之一是 pandas 中的列类型实际上是对象而不是字符串。如果您将其转换为单独的字符串列,您将摆脱此错误。请记住 The basic TensorFlow tf.string dtype allows you to build tensors of byte strings.
并且当您在此列中存储对象而不是字符串时会出现错误。
下面的代码将克服您上面遇到的错误,但它不能完全解决您的问题。列表的可变长度必须通过填充或列表或类似的东西来处理indicator_column
可能在处理缺失值时遇到问题。
X2= pd.DataFrame(X['x'].values.tolist(), columns=['x1','x2'])
feat1 = tf.feature_column.categorical_column_with_vocabulary_list(
key="x1", vocabulary_list=["a", "b", "c"]
)
feat2 = tf.feature_column.categorical_column_with_vocabulary_list(
key="x2", vocabulary_list=["a", "b", "c"]
)
indicator_features = [
tf.feature_column.indicator_column(
categorical_column=feat1
),tf.feature_column.indicator_column(
categorical_column=feat2
)
]
training_input_fn = tf.estimator.inputs.pandas_input_fn(
x=X2, y=Y, batch_size=64, shuffle=True, num_epochs=None
)
【讨论】:
以上是关于tf.estimator 的 tensorflow 提要列表功能(多热)的主要内容,如果未能解决你的问题,请参考以下文章
import tensorflow 报错: tf.estimator package not installed.
TensorFlow tf.estimator package not installed
如何在SummarySaverHook和Estimator中使用tensorflow.metrics.x?
如何在Tensorflow中组合feature_columns,model_to_estimator和dataset API