我是一個機器學習的新手,這是第一個真正的ML任務挑戰之一。如何查找數據集是否可以訓練神經網絡?
一些實驗數據包含512個獨立的布爾特徵和一個布爾結果。
在提供的數據集中有大約1e6個實驗實驗記錄。
在經典的XOR示例中,需要4種可能狀態中的4種來訓練NN。在我的情況下,它只有2^(10-512) = 2^-505
接近零。
我沒有關於數據性質的更多信息,只是這些(512 + 1) * 1e6
位。
在可用數據上嘗試了帶有1個隱藏層的NN。訓練集上的訓練神經網絡的輸出甚至從訓練集中輸出總是接近於0,而不是接近「1」的單個輸出。玩重量初始化,梯度下降學習率。
我code利用TensorFlow 1.3,Python 3的型號摘錄:
with tf.name_scope("Layer1"):
#W1 = tf.Variable(tf.random_uniform([512, innerN], minval=-2/512, maxval=2/512), name="Weights_1")
W1 = tf.Variable(tf.zeros([512, innerN]), name="Weights_1")
b1 = tf.Variable(tf.zeros([1]), name="Bias_1")
Out1 = tf.sigmoid(tf.matmul(x, W1) + b1)
with tf.name_scope("Layer2"):
W2 = tf.Variable(tf.random_uniform([innerN, 1], minval=-2/512, maxval=2/512), name="Weights_2")
#W2 = tf.Variable(tf.zeros([innerN, 1]), name="Weights_2")
b2 = tf.Variable(tf.zeros([1]), name="Bias_2")
y = tf.nn.sigmoid(tf.matmul(Out1, W2) + b2)
with tf.name_scope("Training"):
y_ = tf.placeholder(tf.float32, [None,1])
cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(
labels = y_, logits = y)
)
train_step = tf.train.GradientDescentOptimizer(0.005).minimize(cross_entropy)
with tf.name_scope("Testing"):
# Test trained model
correct_prediction = tf.equal(tf.round(y), tf.round(y_))
# ...
# Train
for step in range(500):
batch_xs, batch_ys = Datasets.train.next_batch(300, shuffle=False)
_, my_y, summary = sess.run([train_step, y, merged_summaries],
feed_dict={x: batch_xs, y_: batch_ys})
我懷疑兩種情況:
- 我的錯 - 壞NN執行,錯誤的體系結構;
- 壞數據。與XOR示例相比,不完整的訓練數據會導致NN失敗。然而,訓練樣本餵給訓練好的神經網絡應該給出正確的預測,不是嗎?
如何評價如果有可能在所有所提供的數據訓練神經網絡(2層感知)來預測結果?一個可勝任的例子將是XOR例子。反對一些隨機噪音。
我不會傾向於使用神經網絡來處理僅由布爾輸入組成的數據。 –
@GordonLinoff在這種情況下什麼是更好的方法? – Serge
我會從決策樹開始,然後迅速切換到隨機森林。根據數據的性質,您可能對SVM有好運(取決於數據結構),但我認爲隨機森林可能會做得更好。 –