操作Keras中的权重束缚镌汰深度神经收集中的过拟合
运行该示例陈诉列车和测试数据集上的模子机能。我们可以看到模子在实习数据集上的机能优于测试数据集,这是太过拟合的一个也许符号。鉴于神经收集和逊?с法的随机性,您的详细功效也许会有所差异。由于模子是太过拟合的,以是我们凡是不会祈望在沟通数据集上一再运行模子的精度差别(假若有的话)。 Train: 1.000, Test: 0.914 建设一个图,表现实习集和测试集上模子精度的曲线图。我们可以看到太过拟合模子的预期外形,个中测试精度增进到一个点然后再次开始减小。 具有加权束缚的Overfit MLP 我们可以更新示例以行使权重束缚。有一些差异的加权限定可供选择。这个模子的一个很好的简朴束缚是简朴地尺度化加权,使得范数便是1.0。此束缚具有逼迫全部传入权重较小的结果。我们可以通过在Keras中行使unit_norm来实现。可以将此束缚添加到第一个潜匿层,如下所示: model.add(Dense(500, input_dim=2, activation='relu', kernel_constraint=unit_norm())) 我们也可以通过行使min_max_norm并将min和maximum配置为1.0来实现沟通的功效,譬喻: model.add(Dense(500, input_dim=2, activation='relu', kernel_constraint=min_max_norm(min_value=1.0, max_value=1.0))) 我们无法通过最大范数束缚得到沟通的功效,由于它应承类型便是或低于指定的限定; 譬喻: model.add(Dense(500, input_dim=2, activation='relu', kernel_constraint=max_norm(1.0))) 下面列出了具有单元类型束缚的完备更新示例: # mlp overfit on the moons dataset with a unit norm constraint from sklearn.datasets import make_moons from keras.layers import Dense from keras.models import Sequential from keras.constraints import unit_norm from matplotlib import pyplot # generate 2d classification dataset X, y = make_moons(n_samples=100, noise=0.2, random_state=1) # split into train and test n_train = 30 trainX, testX = X[:n_train, :], X[n_train:, :] trainy, testy = y[:n_train], y[n_train:] # define model model = Sequential() model.add(Dense(500, input_dim=2, activation='relu', kernel_constraint=unit_norm())) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # fit model history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=4000, verbose=0) # evaluate the model _, train_acc = model.evaluate(trainX, trainy, verbose=0) _, test_acc = model.evaluate(testX, testy, verbose=0) print('Train: %.3f, Test: %.3f' % (train_acc, test_acc)) # plot history pyplot.plot(history.history['acc'], label='train') pyplot.plot(history.history['val_acc'], label='test') pyplot.legend() pyplot.show() 运行该示例陈诉实习集和测试数据集上的模子机能。我们可以看到,对权重巨细的严酷限定确实进步了模子在测试集上的机能,而不会影响实习集的机能。 Train: 1.000, Test: 0.943 回首实习集的曲线和测试精度,我们可以看到模子已经太过拟合实习数据集了。实习集和测试集的模子精度继承进步到不变程度。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |