Python tensorflow馈送列表功能(多热)到tf.estimator

Python tensorflow馈送列表功能(多热)到tf.estimator,python,tensorflow,machine-learning,neural-network,deep-learning,Python,Tensorflow,Machine Learning,Neural Network,Deep Learning,某些要素列的数据类型为list。它们的长度可以不同。我想将此列编码为一个多热点分类功能,并将其提供给tf.estimator。我尝试了以下操作,但错误无法获取显示为字节的元素。我认为这是深度学习中的常见做法,尤其是推荐系统,例如深度和广度模型。我发现了一个相关的问题,但它没有显示如何反馈给估计器 import pandas as pd import tensorflow as tf OUTDIR = "./data" data = {"x": [["a", "c"], ["a", "b"],

某些要素列的数据类型为
list
。它们的长度可以不同。我想将此列编码为一个多热点分类功能,并将其提供给
tf.estimator
。我尝试了以下操作,但错误
无法获取显示为字节的元素。我认为这是深度学习中的常见做法,尤其是推荐系统,例如深度和广度模型。我发现了一个相关的问题,但它没有显示如何反馈给估计器

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)
出现以下错误:

信息:tensorflow:使用默认配置。信息:tensorflow:使用配置: {u model_dir':'testalg','u tf_random_seed':无, “_save_summary_steps”:100“_save_checkpoints_steps”:无, “\u保存\u检查点\u秒”:600“\u会话\u配置”:无, “保持检查点最多”:5,“保持检查点每小时”:10000, “\u日志\u步骤\u计数\u步骤”:100“\u序列\u分布”:无“\u设备\u fn”: 无,“\u服务”:无,“\u群集\u规范”: ,“\u任务\u类型”:“工作者”,“\u任务\u id”:0, “\u集群中的\u全局\u id\u”:0,“\u主节点”:”“评估\u主节点”:”, “_is_chief”:True“_num_ps_replications”:0“_num_worker_replications”:1}” 信息:tensorflow:正在调用模型\u fn。信息:tensorflow:完成呼叫 型号(fn)。信息:tensorflow:创建检查点SaveRhook。 信息:tensorflow:图表已定稿。信息:tensorflow:正在运行 local_init_op.INFO:tensorflow:已完成运行local_init_op。 信息:tensorflow:向协调员报告的错误:,无法 以字节形式获取元素。信息:tensorflow:正在将0的检查点保存到 testalg/model.ckpt。 -------------------------------------------------------内部错误回溯(最后一次最近调用) /home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在_do_call(self,fn,*args)1321中尝试: ->1322返回fn(*args)1323,错误除外。操作错误为e:

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py in_run_fn(feed_dict、fetch_list、target_list、options、run_元数据) 1306返回self.\u调用\u tf\u会话运行( ->1307选项、提要、获取列表、目标列表、运行元数据)1308

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py 在调用会话运行中(self、options、feed、dict、fetch、list、, 目标\u列表,运行\u元数据)1408 self.\u会话,选项, 提要、获取列表、目标列表、, ->1409运行_元数据)1410其他:

InternalError:无法获取作为字节的元素

在处理上述异常期间,发生了另一个异常:

内部错误回溯(最后一次最近调用) 在() 44 45 --->46型号.列车(输入\u fn=培训\u输入\u fn)

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py 列车内(自我、输入、挂钩、步数、最大步数、保存侦听器) 364 365保存侦听器=\u检查侦听器\u类型(保存侦听器) -->366损失=自我训练模型(输入、挂钩、保存侦听器) 367 logging.info('最后一步丢失:%s',丢失) 368回归自我

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py 在列车模型中(自我、输入、钩子、保存侦听器)1117
返回自。\列车\模型\分布式(输入\ fn、挂钩、, 保存_侦听器)1118其他: ->1119返回self.\u train\u model\u default(输入、钩子、保存侦听器)1120 1121 def\u train\u model\u default(self, 输入\u fn、挂钩、保存\u侦听器):

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py 在默认情况下(自我、输入、挂钩、保存侦听器)
1133带估计器规范(估计器规范、, 工人钩,1134
hooks,全局步进张量, ->1135保存侦听器)1136 1137定义列车模型分布式(自身、输入、挂钩、, 保存(U侦听器):

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/estimator/estimator.py 带估计器规格的列车(自身、估计器规格、工人挂钩、, hooks,全局\u步长\u张量,保存\u侦听器)1334损失=无 1335而不是周一。是否应停止() ->1336 u,损耗=单次运行([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]中键入异常: 688异常类型=无 -->689自关闭内部(例外类型) 690#退出应返回True以抑制异常。 691返回异常类型为“无”

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py 内部(自身、异常类型) 724如果self.\u sess为无: 725 raise RUNTIMERROR('会话已关闭') -->726自我评估结束() 727最后: 728 self.\u sess=无

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py 近距离(自我) 972如果自评: 973尝试: -->974自我评估结束() 975除_抢占_错误外: 976通行证

/home/yinan.li1/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/monitored_session.py 密切(自我)1116自我合作加入(1117
停止\u宽限期\u秒=自我。\u停止\u宽限期\u秒, ->1118忽略\u活动\u线程=Tru
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
)