2017-04-10 38 views
0

假設我有1000x500表,其中500是列和1000行。爲Tensorflow生成輸入標籤

而行表示1000樣品,每個樣品由499 features和1標籤

如果我想把這個tensorflow模型,並說,每一次我得到了一批20 samples

......................................... 
inputdata #is filled and has a shape of 499x1000 
inputlabel #is filled and has a shape of 1x1000 

y_ = tf.placeholder(tf.float32,[None,batchSize],name='Labels') 
for j in range(numberOfRows/BatchSize): 
    sess.run(train_step,feed_dict={x:batch_xs[j],y_:np.reshape(inputlabel[j] ,(batchSize,1))})) 

所以我一直試圖運行我的code兩天沒有任何成功,所以我會感謝任何幫助考慮y_和重塑部分。我的問題是要了解,當我讀取一批20 data行時,我應該如何塑造標籤Y_

回答

1

第一個問題:將您的batch_size維度作爲您的第一維,這是標準和相當數量的計算在張量流中承擔儘可能多的。

其次,我沒有看到您的數據的佔位符,X。但是你把它作爲變量傳給sess.run。爲了保持簡單,我建議你做所有這些在tensorflow之外重塑,使用numpy。不要誤解我的意思,你可以在張量流中完全做到這一點,但如果切片和合並讓你感到困惑(他們第一次讓所有人感到困惑),張量流只會增加混淆,因爲你不能簡單地打印出結果在tensorflow中方便地切割操作,就像在numpy中調試您的情況一樣。

因此,爲了這個目的,讓我們做吧:

# your data 
mydata = np.random.rand(500,1000) 

# tensorflow placeholders 
X = tf.placeholder(tf.float32, [batchSize, 499], name='X') 
y_ = tf.placeholder(tf.float32, [batchSize, 1], name=y_') 

# let's transpose your data so the batch is the first dimension (1000 x 500) 
mydata = mydata.T 

# Let's split the labels from the data 
data = mydata[:,0:499] 
labels = mydata[:,500] 

# Now train 
for j in range(numOfRows/BatchSize): 
    row_from = j * BatchSize 
    row_to = j * BatchSize + BatchSize 
    sess.run(train_step, feed_dict={ 
       x : data[row_from:row_to, :] 
       y_ : labels[row_from:row_to] 
    }) 
  • 不要忘記置換您的數據,我們沒有做到這一點在這裏。我個人喜歡np.random.permutation(1000)來獲得一個隨機的索引列表,然後只需要第一個BatchSize索引,然後np.roll隨機排列,超級簡單的方式來遍歷數據集而不處理計算索引或尾部批次這不是一個均勻的大小。
+0

感謝您的回答,但我仍然想念班級的數量,說11班,哪裏告訴培訓師你有多少班? – Engine

+0

啊!我的答案假設了一個二元類。如果你有兩個以上的課程,你需要將你的y_標籤改爲一個熱門的編碼。因此,類3可以由向量'[0 0 1 0 0 0 0 0 0 0 0]'表示。例如,將標籤從類「3」更改爲「[0 0 1 0 0 0 0 0 0 0 0]」,對於其他類也是如此。然後你的標籤數據將有維度11.看到這個問題:http://stackoverflow.com/questions/29831489/numpy-1-hot-array –

+0

感謝您的幫助,但我應該在哪裏使用placeOf中的numberOfclasses for ex。 Y_? – Engine