我有一个input_fn
可以与下面的 Tensorflow Estimators 一起使用的基础知识。num_epochs
无需设置参数即可完美运行;获得的张量具有离散的形状。除了导致未知形状之外num_epochs
的任何其他内容传入。None
我的问题在于在使用时构造稀疏张量num_epochs
;在不知道输入张量的形状的情况下,我无法弄清楚如何一般地创建所述张量。
谁能想到这个问题的解决方案?我希望能够通过num_epochs=1
以仅对数据集进行一次评估,以及通过predict
以产生一组数据集大小的预测,不多不少。
def input_fn(batch_size):
examples_op = tf.contrib.learn.read_batch_examples(
FILE_NAMES,
batch_size=batch_size,
reader=tf.TextLineReader,
num_epochs=1,
parse_fn=lambda x: tf.decode_csv(x, [tf.constant([''], dtype=tf.string)] * len(HEADERS)))
examples_dict = {}
for i, header in enumerate(HEADERS):
examples_dict[header] = examples_op[:, i]
continuous_cols = {k: tf.string_to_number(examples_dict[k], out_type=tf.float32)
for k in CONTINUOUS_FEATURES}
# Problems lay here while creating sparse categorical tensors
categorical_cols = {
k: tf.SparseTensor(
indices=[[i, 0] for i in range(examples_dict[k].get_shape()[0])],
values=examples_dict[k],
shape=[int(examples_dict[k].get_shape()[0]), 1])
for k in CATEGORICAL_FEATURES}
feature_cols = dict(continuous_cols)
feature_cols.update(categorical_cols)
label = tf.string_to_number(examples_dict[LABEL], out_type=tf.int32)
return feature_cols, label