2016-11-27 11 views
0

h2oの空白関数の特定のパラメータの組み合わせに対して、実行するたびに異なる結果が得られます。h2o deeplearningを複数実行した結果を一致

args <- list(list(hidden = c(200,200,200), 
        loss = "CrossEntropy", 
        hidden_dropout_ratio = c(0.1, 0.1,0.1), 
        activation = "RectifierWithDropout", 
        epochs = EPOCHS)) 

run <- function(extra_params) { 
    model <- do.call(h2o.deeplearning, 
        modifyList(list(x = columns, y = c("Response"), 
        validation_frame = validation, distribution = "multinomial", 
        l1 = 1e-5,balance_classes = TRUE, 
        training_frame = training), extra_params)) 
} 

model <- lapply(args, run) 

私はこれを実行するたびにモデルの一貫した結果を得るために何が必要でしょうか?

+1

詳しい情報は、だからあなたは** **一定のランダムシードを設定したのですか? – sascha

+0

私は属性として使う代わりにset.seedを使っていました:(ポインタありがとう –

答えて

3

複数のコアで実行されている場合、H2Oによるディプレイは再現できません。結果とパフォーマンスメトリックは、あなたが深い学習モデルを訓練するたびに表示されるものと多少異なる場合があります。 H2Oの実装では、「Hogwild!」というテクニックが使用されます。複数のコアで再現性を犠牲にしてトレーニングのスピードが向上します。

再現性のある結果を得るには、H2Oを単一コアで実行するように制限し、h2o.deeplearning呼び出しでseedを必ず使用する必要があります。ダレン・クックのコメントに基づいて

編集: 私はそれを本当に再現可能にするためにseedとの組み合わせで設定する必要がreproducible = TRUEパラメータを含めるのを忘れていました。これにより、実行するのがずっと遅くなることに注意してください。そして、大規模なデータセットでこれを行うことはお勧めできません。 "Hogwild!"

+1

'seed'を設定するだけではうまくいきません。深い学習では、' reproducible = TRUE'も設定する必要があります。 1つのコアで動くようにする。 –

+0

@DarrenCook、その部分を忘れてしまった。 – phiver

関連する問題