深度神经网络中的交叉验证

时间:2017-06-10 16:39:32

标签: tensorflow deep-learning cross-validation

如何在深层神经网络中执行交叉验证?我知道要执行交叉验证以在除了一个之外的所有折叠上训练它并在排除的折叠上测试它。然后这样做k倍折叠并平均每个折叠的公告。你如何为每次迭代做到这一点。你在每次折叠时更新参数吗?或者您为每次迭代执行k折交叉验证?或者是对所有折叠的每次训练,但是一次考虑作为一次迭代?

2 个答案:

答案 0 :(得分:3)

Cross-validation是ML中用于防止过度拟合的一般技术。在深度学习模型上进行并在线性回归上进行操作之间没有区别。所有ML型号的想法都是一样的。您在问题中描述的CV背后的基本思想是正确的。

但问题你如何为每次迭代做这件事没有意义。 CV算法中没有任何内容与训练时的迭代有关。您训练了模型,然后才对其进行评估。

您是否每次更新参数?。你训练相同的模型k次,最有可能每次你有不同的参数。

DL中不需要CV的答案是错误的。 CV的基本思想是更好地估计模型在有限数据集上的表现。因此,如果您的数据集很小,训练k模型的能力将为您提供更好的估计(缩小尺寸是您花费~k倍的时间)。如果你有100mln的例子,大多数可能有5%的测试/验证设置已经给你一个很好的估计。

答案 1 :(得分:0)

分层交叉验证 有多种解决方案可用于在交叉交叉验证中运行深度神经网络。

def create_baseline():
    # create model
    model = Sequential()
    model.add(Dense(60, input_dim=11, kernel_initializer='normal', activation='relu'))
    model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
    # Compile model
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model
# evaluate model with standardized dataset
estimator = KerasClassifier(build_fn=create_baseline, epochs=100, batch_size=5,     verbose=0)
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(estimator, X, encoded_Y, cv=kfold)
print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))