Ich habe eine grundlegende input_fn
, die unten mit Tensorflow Estimators verwendet werden kann. Es funktioniert einwandfrei, ohne den Parameter num_epochs
einzustellen; der erhaltene Tensor hat eine diskrete Form. Pass in num_epochs
als alles andere als None
führt zu einer unbekannten Form. Mein Problem liegt in der Konstruktion von Sparse-Tensoren unter Verwendung von num_epochs
; Ich kann nicht herausfinden, wie man die Tensoren generisch erzeugt, ohne die Form des Eingangstensors zu kennen.Wie erstelle ich `input_fn` mit` read_batch_examples` mit `num_epochs` set?
Kann jemand an eine Lösung für dieses Problem denken? Ich würde gerne num_epochs=1
übergeben können, um nur 1 mal über den Datensatz auswerten zu können, und auch an predict
zu übergeben, um eine Reihe von Vorhersagen über die Größe des Datensatzes zu erhalten, nicht mehr und nicht weniger.
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