Machine learning 即使在keras中设置随机种子序列模型,也会得到不同的结果

Machine learning 即使在keras中设置随机种子序列模型,也会得到不同的结果,machine-learning,keras,keras-layer,random-seed,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,

有人能帮我理解为什么这个模型不能给出可重复的结果吗?每次运行它时,它都会更改我使用的测试集和其他验证集的精度值。我正在使用一个定义的种子。我不明白为什么会这样

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

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)

我希望您能对此发表一些评论。

您的随机种子正在修复交叉验证分割,但没有修复模型权重初始化,您在设置关键字“init_mode=normal”时在
创建_model
中指定了该初始化

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


种子配置取决于其他几个因素,包括您使用的keras后端(Theano vs.TensorFlow)和您使用的python版本。有关更多详细信息,请参阅。

我不明白设置RNG种子是什么意思。顺便说一下,
random\u state
不是create model的函数或属性,因此我不知道如何在那里设置种子。使用该自定义初始值设定项,是否意味着我必须排除我的
init_mode='normal'
,以及您发送给我链接的keras文档所提供的那一个?我尝试过这样做:
从keras导入后端作为K def my_init(shape,dtype=None):返回K.random_normal(shape,dtype=dtype,seed=7)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(密集型(神经元,input_dim=inputDim=inputDim,内核_初始值设定项=my_init,activation=activation,内核_constraint=maxnorm)(权重_constraint),kernel_regularizer=regularizers.l2(0.002))
但仍然返回不同的结果。我的观点是,即使在设置随机种子之前,我们也会绘制随机数。有关更多详细信息,请参阅我答案的更新。