2017-04-20 59 views
0

我嘗試從GitHub使用MLPClassifier:使用MLPClassifier Tensorflow

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/multilayer_perceptron.py

但其實我不知道怎樣才能用我自己的數據使用它。我有尺寸爲20000x100的特徵矩陣X和尺寸爲20000的5個類別的目標矢量y。

X和y保存在一個numpy數組中。我感到困惑的是:

x = tf.placeholder("float", [None, n_input]) #n_input is 100 here, right? 
y = tf.placeholder("float", [None, n_classes]) 


total_batch = int(mnist.train.num_examples/batch_size) #What is that for my data? 


batch_x, batch_y = mnist.train.next_batch(batch_size)#what are these? 

回答

0

如果你看看你的變量batch_x,你會看到它的簡單形狀[batch_size, 784]的numpy的數組,所以batch_size壓扁的圖像和batch_y是形狀[batch_size, 10]的數組,所以在batch_x

所以,如果你想用這個模型中使用自己的數據每個圖像1獨熱編碼的標籤,你必須:

  • 或是在同一WA已格式化的數據Y([batch_size, 784][batch_size, 10]
  • 或更改佔位符xy,使他們可以在自己的數據

在你的情況的形狀,然後簡單地確實改變代碼中使用:

n_input = 100 
n_classes = 5 
total_batch = int(20000/batch_size) 

此外,最好不要使用上述數字,而應從數據中獲取這些值:

n_input = your_x_data.shape[1] 
n_classes = your_y_data.shape[1] 
# or n_classes = your_y_data.max(axis=1) 
# if your y data array is not already one-hot encoded 
total_batch = int(your_x_data.shape[0]/batch_size) 
+0

謝謝,但我仍然有問題與我y。當我用n_classes = 5定義y = tf.placeholder(「float」,[None,n_classes])時,那麼我的y的維度是?x5而不是?x1?另外我不確定total_batch?我認爲這只是一個例子,對吧? – HansPeterLoft

+0

我用y解決了這個問題,它被表示爲一個矩陣。 – HansPeterLoft

+0

我編輯了我的答案以清除 – ted

0

除了@ted的回答外,您還需要修改total_batch的計算。 total_batch是您的網絡將生成的批次數。假設X包含您的數據,則必須用int(20000/batch_size)int(X.shape[0]/batch_size)替換int(mnist.train.num_examples/batch_size)。您可以在那裏選擇一個批量大小,例如200.

+0

在我的示例中,batch_size究竟是什麼?從我的理解應該是一個特點,對吧?所以它應該是平等的? – HansPeterLoft

+0

批處理大小是執行參數更新之前由神經網絡處理的事件的數量。如果您選擇較高的批量大小,則訓練將不太容易出現數據集的波動,但可能會更慢一些。你可能想看看http://sebastianruder.com/optimizing-gradient-descent/,特別是有關梯度下降變體的章節。在那裏你會找到一個很好的解釋是什麼小批量。 – ml4294