Podążałem za przewodnikiem Tensorflow Reading Data, aby uzyskać dane mojej aplikacji w postaci TFRecords, i używam TFRecordReader w moich wejściowych potokach do odczytu tych danych.Używanie potoku wejściowego Tensorflow z przepływem/tf nauczyć się
Teraz czytam przewodniki na temat korzystania z skflow/tf.learn do budowy prostego regresora, ale nie widzę sposobu korzystania z moich danych wejściowych za pomocą tych narzędzi.
W poniższym kodzie aplikacja kończy się niepowodzeniem w przypadku połączenia regressor.fit(..)
z ValueError: setting an array element with a sequence.
.
Błąd:
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.
Kod:
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)
...
Wygląda na to wezwanie check_array
spodziewa się prawdziwą tablicę, a nie tensora. Czy jest coś, co mogę zrobić, aby pomasować moje dane we właściwym kształcie?
Co się stanie, jeśli zrobisz x = x.eval() i labels = labels.eval() przed wywołaniem regressor.fit? To powinno ocenić tensor w macierzy, ale wątpię, czy to jest właściwy sposób robienia tego z przepływem ... – mathetes
@makhetes, który wydaje się działać, ale zanim pójdę tą ścieżką, jest to, że 'tf-y' sposób robienia rzeczy? Mam intuicję, że wykres TF powinien przenosić dane, a nie mój program. –
Absolutnie, przykro mi, że nie określiłem, ale to było po prostu jako sposób debugowania. Dlatego wysłałem komentarz zamiast odpowiedzi. Nie mogę ci pomóc dalej, nie jestem zaznajomiony ze skąpem – mathetes