2017-07-28 4 views
0

このモデルでは再現性のある結果が得られない理由を知りたい人はいらっしゃいますか?これは、私が使用するたびに、テストセットや他の検証セットの精度値を変更します。私は定義された種を使用しています。私はなぜそれが起こっているのか理解できません。以下はケラスのランダムシードシーケンシャルモデルを設定しても、結果は異なります

は、私のコードの一部です:

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シードを設定することはできますが、ケラスが乱数を生成する方法によっては、一致結果を得るためにcustom initializerを使用する必要があります。

種の設定は、使用しているケラスバックエンド(Theano vs. TensorFlow)や使用しているPythonのバージョンなど、いくつかの要因によって異なります。詳細については、this github issueを参照してください。

+0

RNGシードを設定することで何を意味するのか分かりませんでした。ところで、 'random_state'はcreate modelの関数や属性ではありませんので、そこにシードを設定する方法はわかりません。このカスタムイニシャライザを使用すると、自分の 'init_mode = 'normal''を除外しなければならないということでしょうか? –

+0

私はこれを試みた: 'K としてkerasインポートバックエンドからDEF my_init(形状、DTYPE =なし): リターンK.random_normal(形状、DTYPE = DTYPE、種子= 7) デフCREATE_MODEL(ニューロン= 190、 learn_rate = 0.001、momentum = 0.7、weight_constraint = 5): model = Sequential() model.add(Dense(ニューロン、input_dim) = inputDim、kernel_initializer = my_init、activation = activation、kernel_constraint = maxnorm(weight_constraint)、kernel_regularizer = regularizers.l2(0.002))) 'しかし、私はまだ別の結果を返します。 –

+0

私のポイントは、乱数の種を設定する前でも乱数が描画されているということでした。詳細については、私の答えの更新を参照してください。 – bogatron

関連する問題