【发布时间】:2018-06-13 14:07:16
【问题描述】:
我正在 Keras 中实现多层感知器,并使用 scikit-learn 执行交叉验证。为此,我受到问题 Cross Validation in Keras
中的代码的启发from sklearn.cross_validation import StratifiedKFold
def load_data():
# load your data using this function
def create model():
# create your model using this function
def train_and_evaluate__model(model, data[train], labels[train], data[test], labels[test)):
# fit and evaluate here.
if __name__ == "__main__":
X, Y = load_model()
kFold = StratifiedKFold(n_splits=10)
for train, test in kFold.split(X, Y):
model = None
model = create_model()
train_evaluate(model, X[train], Y[train], X[test], Y[test])
在我对神经网络的研究中,我了解到神经网络的知识表示是在突触权重中,并且在网络跟踪过程中,权重会被更新,从而降低网络错误率并提高其性能。 (就我而言,我使用的是监督学习)
为了更好地训练和评估神经网络性能,一种常用的方法是交叉验证,它返回数据集的分区用于模型的训练和评估。
我的疑惑是……
在这段代码中sn-p:
for train, test in kFold.split(X, Y):
model = None
model = create_model()
train_evaluate(model, X[train], Y[train], X[test], Y[test])
我们为每个生成的分区定义、训练和评估一个新的神经网络?
如果我的目标是针对整个数据集微调网络,为什么定义单个神经网络并使用生成的分区对其进行训练是不正确的?
也就是说,为什么这段代码是这样的?
for train, test in kFold.split(X, Y):
model = None
model = create_model()
train_evaluate(model, X[train], Y[train], X[test], Y[test])
不是这样吗?
model = None
model = create_model()
for train, test in kFold.split(X, Y):
train_evaluate(model, X[train], Y[train], X[test], Y[test])
我对代码工作原理的理解是否错误?还是我的理论?
【问题讨论】:
标签: machine-learning keras scikit-learn neural-network cross-validation