2017-07-28 99 views
0

任何人都可以幫助我理解爲什麼此模型不能提供可重複的結果嗎?它會更改我使用的測試集和其他驗證集的準確度值,每次運行時都會這樣。我正在使用已定義的種子。我不明白爲什麼會這樣。即使在keras中設置隨機種子順序模型也會返回不同的結果

下面是我的代碼部分:

np.random.seed(7) 

# Create the model 
def create_model(neurons=190, init_mode='normal', activation='relu', inputDim=8040, dropout_rate=0.8, 
       learn_rate=0.001, momentum=0.7, weight_constraint=5): 
    model = Sequential() 
    model.add(Dense(neurons, input_dim=inputDim, kernel_initializer=init_mode, activation=activation, kernel_constraint=maxnorm(weight_constraint), kernel_regularizer=regularizers.l2(0.002))) 
    model.add(Dense(1, activation='sigmoid')) 
    optimizer = RMSprop(lr=learn_rate) 

    # compile model 

    model.compile(loss='binary_crossentropy', optimizer='RmSprop', metrics=['accuracy']) 

model = create_model() 

seed = 7 
# Define k-fold cross validation test harness 

kfold = StratifiedKFold(n_splits=3, shuffle=True, random_state=seed) 
cvscores = [] 
for train, test in kfold.split(X_train, Y_train): 
    print("TRAIN:", train, "VALIDATION:", test) 


# Fit the model 

history = model.fit(X_train, Y_train, epochs=40, batch_size=50, validation_data=(X_test, Y_test), verbose=0) 

我將不勝感激一些關於它的評論。

回答

0

您的隨機種子正在修復您的交叉驗證拆分,但不是您在設置關鍵字「init_mode = normal」時在create_model中指定的模型重量初始化。

您可以嘗試在致電create_model之前設置RNG種子,但根據keras如何生成其隨機數,您可能需要求助於使用custom initializer以獲得一致的結果。

種子配置取決於其他幾個因素,包括您正在使用哪個keras後端(Theano與TensorFlow)以及您正在使用哪個python版本。有關更多詳細信息,請參見this github issue

+0

我沒有通過設置RNG種子來得到你的意思。順便說一句'random_state'不是創建模型的函數或屬性,所以我不知道如何在那裏設置種子。使用該自定義初始化程序,是否意味着我必須排除我的'init_mode ='normal'',並且由您向我發送鏈接的keras文檔生成了一個? –

+0

我曾嘗試這樣的:從'進口keras後端爲K DEF my_init(形狀,D型細胞=無): 返回K.random_normal(形狀,D型細胞= D型細胞,種子= 7) DEF create_model(神經元= 190, init_mode ='normal',activation ='relu',inputDim = 8040,dropout_rate = 0.8, learn_rate = 0.001,動量= 0.7,weight_constraint = 5): model = Sequential() model.add(Dense(neurons,input_dim = inputDim,kernel_initializer = my_init,activation = activation,kernel_constraint = maxnorm(weight_constraint),kernel_regularizer = regularizers.l2(0.002)))'但仍然返回不同的結果。 –

+0

我的觀點是,即使在設置隨機種子之前,我們也會繪製隨機數。有關更多詳細信息,請參閱我的答案更新。 – bogatron

相關問題