即使在keras中设置随机种子序列模型也会返回不同的结果

时间:2017-07-28 18:19:43

标签: machine-learning keras keras-layer random-seed

任何人都可以帮助我理解为什么这个模型不能提供可重复的结果?每次运行时,它都会更改我正在使用的测试集和其他验证集的准确度值。我正在使用已定义的种子。我不明白为什么会这样。

以下是我的代码的一部分:

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)

我很感激对此发表评论。

1 个答案:

答案 0 :(得分:1)

您的随机种子正在修复交叉验证拆分,但不是模型权重初始化,您在设置关键字“init_mode = normal”时在create_model中指定。

您可以在调用create_model之前尝试设置RNG种子,但根据keras生成随机数的方式,您可能需要使用custom initializer来获得一致的结果。

种子配置取决于其他几个因素,包括您正在使用的keras后端(Theano与TensorFlow)以及您正在使用的python版本。有关其他详细信息,请参阅this github issue