Ich habe die Tensorflow-Anleitung Reading Data verwendet, um die Daten meiner Anwendung in Form von TFRecords zu erhalten, und verwende TFRecordReader in meinen Eingabe-Pipelines, um diese Daten zu lesen.Verwenden einer Tensorflow-Eingabepipeline mit skflow/tf learn
Ich lese jetzt die Anleitungen zur Verwendung von skflow/tf.learn, um einen einfachen Regressor zu erstellen, aber ich kann nicht sehen, wie ich meine Eingabedaten mit diesen Tools verwenden kann.
Im folgenden Code schlägt die App unter regressor.fit(..)
mit ValueError: setting an array element with a sequence.
fehl.
Fehler:
Traceback (most recent call last):
File ".../tf.py", line 138, in <module>
run()
File ".../tf.py", line 86, in run
regressor.fit(x, labels)
File ".../site-packages/tensorflow/contrib/learn/python/learn/estimators/base.py", line 218, in fit
self.batch_size)
File ".../site-packages/tensorflow/contrib/learn/python/learn/io/data_feeder.py", line 99, in setup_train_data_feeder
return data_feeder_cls(X, y, n_classes, batch_size)
File ".../site-packages/tensorflow/contrib/learn/python/learn/io/data_feeder.py", line 191, in __init__
self.X = check_array(X, dtype=x_dtype)
File ".../site-packages/tensorflow/contrib/learn/python/learn/io/data_feeder.py", line 161, in check_array
array = np.array(array, dtype=dtype, order=None, copy=False)
ValueError: setting an array element with a sequence.
Code:
import tensorflow as tf
import tensorflow.contrib.learn as learn
def inputs():
with tf.name_scope('input'):
filename_queue = tf.train.string_input_producer([filename])
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(serialized_example, feature_spec)
labels = features.pop('actual')
some_feature = features['some_feature']
features_batch, labels_batch = tf.train.shuffle_batch(
[some_feature, labels], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
return features_batch, labels_batch
def run():
with tf.Graph().as_default():
x, labels = inputs()
# regressor = learn.TensorFlowDNNRegressor(hidden_units=[10, 20, 10])
regressor = learn.TensorFlowLinearRegressor()
regressor.fit(x, labels)
...
Es sieht aus wie der check_array
Anruf wird ein echtes Array erwartet, kein Tensor. Kann ich irgendetwas tun, um meine Daten in die richtige Form zu bringen?
Was passiert, wenn Sie x = x.eval() und labels = labels.eval() vor Ihrem Aufruf von regressor.fit eingeben? Dies sollte den Tensor in ein Array auswerten, aber ich bezweifle, dass dies der richtige Weg ist, dies mit Skflow zu tun ... – mathetes
@mathetes, das scheint zu funktionieren, aber bevor ich diesen Pfad hinunter gehe, ist das der 'tf-y' Weg Dinge tun? Meine Intuition ist, dass der TF-Graph die Daten bewegen sollte, nicht mein Programm. –
Absolut, es tut mir leid, ich habe nicht angegeben, aber es war nur als eine Art des Debuggens gemeint. Deshalb habe ich eher einen Kommentar als eine Antwort gepostet. Ich kann dir jedoch nicht weiter helfen, ich kenne Skflow nicht. – mathetes