2016-05-30 10 views
7

Uygulamamın verilerini TFRecords biçiminde almak için Tensorflow Reading Data kılavuzunu takip ettim ve bu verileri okumak için giriş pipeline'larında TFRecordReader kullanıyorum.Bir tensorflow giriş boru hattını skflow/tf ile kullanarak

Şimdi basit bir regresör oluşturmak için skflow/tf.learn kullanım kılavuzlarını okuyorum, ancak giriş verilerimi bu araçlarla nasıl kullanacağımı göremiyorum. Aşağıdaki kodda

, uygulama ValueError: setting an array element with a sequence. ile regressor.fit(..) çağrı başarısız olur.

Hata:

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. 

Kodu:

check_array çağrı gerçek dizi değil, bir tensör bekliyor gibi görünüyor
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) 
     ... 

. Verilerimi doğru şekle masaj yapmak için yapabileceğim bir şey var mı?

+0

Ne senin regressor.fit çağrısından önce x = x.eval() ve etiketleri = labels.eval() do olur? Bu tensörü bir diziye göre değerlendirmeli, ama bunun şoförüyle yapmanın doğru yolu olduğuna şüphe yok ... – mathetes

+0

@mathetes, bu işe yarayacak gibi görünüyor ama bu yola başlamadan önce, 'tf-y' yolu şeyler yapmak? Sezgim, TF grafiğinin, programımı değil, veriyi taşıması gerektiğidir. –

+0

Kesinlikle, özür dilemedim ama sadece bir hata ayıklama yöntemi olarak ifade edildi. Bu yüzden bir cevap yerine yorum yazdım. Yine de size yardım edemem, skype – mathetes

cevap

1

Çalıştığınız API değeri amortismana benzer. Daha modern bir tf.contrib.learn.LinearRegressor (Ben => 1.0) kullanırsanız, temel olarak girişleri ve etiketleri üreten input_fn'u belirtmeniz gerekir. Ben senin örnekte, bu şekilde run fonksiyonunu değiştirmek kadar basit olacağını düşünüyorum:

def run(): 
    with tf.Graph().as_default(): 
     regressor = tf.contrib.learn.LinearRegressor() 
     regressor.fit(input_fn=my_input_fn) 

ve sonra my_input_fn denilen bir giriş fonksiyonunu tanımlayan.

def my_input_fn(): 

    # Preprocess your data here... 

    # ...then return 1) a mapping of feature columns to Tensors with 
    # the corresponding feature data, and 2) a Tensor containing labels 
    return feature_cols, labels 

Ben belgeleri size geri kalan yolu alabilirsiniz düşünmek: the docs itibaren bu giriş fonksiyonu halini alır. Verilerinizi görmeden nasıl ilerlemeniz gerektiğini söylemek benim için zor.

+1

aşina değilim Bu eski bir sorun olduğunu ve ben şimdi geçmiş bir yol olduğunu haklısın. Faydalı ve güncel bir çözüm sunduğunuz için teşekkür ederiz. –