加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

操作Keras中的权重束缚镌汰深度神经收集中的过拟合

发布时间:2020-07-16 01:36:28 所属栏目:创业 来源:站长网
导读:副问题#e# 权重束缚提供了一种要领,用于镌汰深度进修神经收集模子对实习数据的太过拟合,并改进模子对新数据(譬喻测试集)的机能。有多种范例的权重束缚,譬喻最大和单元向量类型,有些必要必需设置的超参数。 在本教程中,您将发明Keras API,用于向深度

运行该示例陈诉列车和测试数据集上的模子机能。我们可以看到模子在实习数据集上的机能优于测试数据集,这是太过拟合的一个也许符号。鉴于神经收集和逊?с法的随机性,您的详细功效也许会有所差异。由于模子是太过拟合的,以是我们凡是不会祈望在沟通数据集上一再运行模子的精度差别(假若有的话)。

Train: 1.000, Test: 0.914 

建设一个图,表现实习集和测试集上模子精度的曲线图。我们可以看到太过拟合模子的预期外形,个中测试精度增进到一个点然后再次开始减小。

操作Keras中的权重束缚镌汰深度神经收集中的过拟合

具有加权束缚的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 

回首实习集的曲线和测试精度,我们可以看到模子已经太过拟合实习数据集了。实习集和测试集的模子精度继承进步到不变程度。

操作Keras中的权重束缚镌汰深度神经收集中的过拟合

 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读