2015-10-22 35 views
2

更新: 我想出了問題,但沒有解決方案。這是新Java版本的問題。我開始有這個問題,一旦我更新到最新的Java。h2o深度學習包使用自動編碼器輸出一個值

我一直在使用h2o和深度學習軟件包一段時間沒有問題。今天我再次使用它,但是當我從深度學習模型中提取特徵時,我一直在爲特定列中的所有行獲取相同的值。它以前工作正常。我嘗試使用不起作用的不同數據集。所以我猜測它是我的數據集(之前曾用過的),或者比這更深的東西。

這是我的代碼。任何幫助表示讚賞。

library(h2o) 
localH20=h2o.init(nthreads = -1) 
data=h2o.importFile(localH20, path="smsAllWords.csv", header=T) 
model= h2o.deeplearning(x=1:107, training_frame = data, shuffle_training_data=TRUE, activation = "Tanh", hidden = c(100,75,50,25), epochs= 5,autoencoder = TRUE) 
dl.data=h2o.deepfeatures(model,data,4)` 

這是什麼樣的數據和輸出如下所示的樣品: 供參考:所述數據的變化是對於矩陣的其餘部分高。

data[1:10,1:10] 
H2OFrame with 10 rows and 10 columns 
     a1  a2  a3  a4  a5  a6  a7  a8  a9  a10 
1 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 -0.28192 -0.13307 -0.27609 
2 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 2.13240 -0.13307 1.80440 
3 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 6.59090 -0.28192 -0.13307 -0.27609 
4 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 -0.28192 -0.13307 -0.27609 
5 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 -0.28192 -0.13307 4.40510 
6 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 -0.28192 -0.13307 -0.27609 
7 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 -0.28192 -0.13307 -0.27609 
8 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 -0.28192 -0.13307 -0.27609 
9 -0.31289 -0.10442 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 -0.28192 -0.13307 -0.27609 
10 -0.31289 8.16410 -0.14504 -0.1143 -0.11115 -0.12753 -0.10413 -0.28192 -0.13307 -0.27609 


dl.data[1:10,1:10] 
H2OFrame with 10 rows and 10 columns 
    DF.L4.C1 DF.L4.C2 DF.L4.C3 DF.L4.C4 DF.L4.C5 DF.L4.C6 DF.L4.C7 DF.L4.C8 DF.L4.C9 DF.L4.C10 
1  -1  -1  1  -1  1  1  1  1  -1  -1 
2  -1  -1  1  -1  1  1  1  1  -1  -1 
3  -1  -1  1  -1  1  1  1  1  -1  -1 
4  -1  -1  1  -1  1  1  1  1  -1  -1 
5  -1  -1  1  -1  1  1  1  1  -1  -1 
6  -1  -1  1  -1  1  1  1  1  -1  -1 
7  -1  -1  1  -1  1  1  1  1  -1  -1 
8  -1  -1  1  -1  1  1  1  1  -1  -1 
9  -1  -1  1  -1  1  1  1  1  -1  -1 
10  -1  -1  1  -1  1  1  1  1  -1  -1 

編輯: 我跑同樣的數據集和一個不同的多次了,我會得到不同的結果。我根本沒有改變我的代碼,但有時它會起作用,有時它不會。我是否缺少一個可以控制這個的參數?

更新: 我也試過在不同的機器上設置相同的數據,它工作正常。所以我幾乎肯定這是另一臺機器的問題。我嘗試刪除R並刪除與之關聯的所有內容,然後重新安裝它,但這並沒有解決問題。

回答

1

如果之前在相同版本的H2O上工作,那麼它肯定是一個收斂問題(找不到最低的局部最小值)。您可以嘗試將hidden = c(100,75,50,25)中的隱藏層數減少到hidden=c(50)並查看是否有效。否則,這幾乎肯定是一個數據問題。

+0

我做到了。同樣的問題。如果我多次運行相同的數據集,我會得到不同的結果。我根本沒有改變我的代碼,但有時它會起作用,有時它不會。我是否缺少一個可以控制這個的參數? – nasser

+0

H2O Deep Learning不可重現,除非您設置reproducible = TRUE和seed = 1234(或任何整數)。在這種情況下,它以單線程模式運行,並且速度較慢,但​​每次都會產生相同的模型。 您的模型沒有提供一致的結果這一事實意味着參數不好。如果你需要一個深度網絡,你可以嘗試一個堆棧自動編碼器:https://github.com/h2oai/h2o-3/blob/master/h2o-r/tests/testdir_algos/deeplearning/runit_deeplearning_stacked_autoencoder_large.R或看看MSE在訓練數據上確認它隨着時間的推移實際上變得更好。 –

+0

是否與深度學習函數中的autoencoder參數不同?從技術上講,如果你有多個隱藏層,這也是堆疊的。 我也試過在不同的機器上設置相同的數據,它工作正常。所以我幾乎肯定這是另一臺機器的問題。我嘗試刪除R並刪除與之關聯的所有內容,然後重新安裝它,但這並沒有解決問題。 – nasser