南阳做网站优化,网站 图标 gif,晋中北京网站建设,wordpress 下载选择几乎所有模型都可以根据数据和样本进行调整#xff0c;它们都有各自的优势和相应的利弊权衡方式。寻找最优超参数集通常是一个棘手的问题#xff0c;但是人类的直觉和经验可以为我们提供解决问题的方法。比如之前的例子#xff1a;
#设置任意输入序列的最大长度
maxlen100
…几乎所有模型都可以根据数据和样本进行调整它们都有各自的优势和相应的利弊权衡方式。寻找最优超参数集通常是一个棘手的问题但是人类的直觉和经验可以为我们提供解决问题的方法。比如之前的例子
#设置任意输入序列的最大长度
maxlen100
#预训练的Word2vec模型维度
embedding_dims300
#在进行反向传播算法之前要通过并聚合误差的样本序列的算法
batch_size32
#训练周期个数
epochs2
#隐藏层的复杂度
num_neurons50
maxlen参数设置可能是这串参数中最大的问题。训练集在样本长度上变化很大。当我们强制将长度不超过100个词条的样本加上到400个词条那么将1000个词条的样本截断到400个词条时就会引入大量的噪声。改变这个数字对训练时间的影响比改变模型中的其他任何参数的影响都要打单个样本的长度决定了误差需要再多长时刻内反向传播。对于循环神经网络设置样本长度不是严格必要的。我们可以简单地将网络展开为样本所需的大小在刚刚的例子中这种做法是必要的因为我们把本身就是一个序列的输出传递到一个前馈层而前馈层需要同样输出的大小。
embedding_dims值是由选择的Word2vec模型决定的但是它应该是可以充分表示数据集的值。即使是像语料库中最常见的50个词条的独热编码这样简单的向量可能也足以获得精确地预测。
与所有网络一样增加batch_size可以加速训练因为它减少了需要反向传播的次数也就是计算上开销较大的部分。折中的结果是更大的批量增加了在局部极小值处停顿下来的可能。
epochs参数易于测试盒调优只需再次运行训练过程即可。但是如果我们必须从头开始尝试每个新的epochs参数那么就需要很多的耐心。Keras模型可以重新启动训练并从停止的地方继续只要我们在“停止”处保存了模型即可。要在以前训练过的模型上重新启动训练要重新加载该模型盒数据集并对数据调用model.fit()。Keras不会重新初始化权重而是像从未停止过一般继续训练。
另一种对epochs参数进行调优的方法是添加一个名为EarlyStopping的Keras回调方法。通过向模型提供此方法除非传递给EarlyStopping的度量指标超过了在回调方法中用于触发的某个阈值否则模型将继续训练直到达到我们锁清秋的周期数为止。一个常见的早停度量指标是连续几个周期验证精确率提高值。如果模型没有变得更好通常就意味着是时候“断线”断开链接了。这个度量指标允许我们设置它并忘记它的存在。当模型达到我们的度量指标时模型将停止训练。
num_neurous是一个重要的参数上面建议随意地使用50个神经元。现在用100个神经元来进行训练和测试
num_neurons100
modelSequential()
model.add(SimpleRNN(num_neurons,return_sequencesTrue,input_shape(maxlen,embedding_dims)
))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(1,activationsigmoid))
model.compile(rmsprop,binary_crossentropy,metrics[accuracy])
model.summary() model.fit(X_train,y_train,batch_sizebatch_size,epochsepochs,validation_data(X_test,y_test)) model_strucuremodel.to_json()
with open(simplernn_model2.json,w) as json_file:json_file.write(model_strucure)
model.save_weights(simplernn_weights2.h5)
上述更大的网络相当于在num_neurous50的网络的其中一层将模型的复杂度提高了一杯其验证准确率为64.06%仅提高一点点。这个微不足道的提高会让人觉得模型对于这个网络层对数据来说太复杂了。这个网络层可能有些太宽了。
下面是num_neurous25的情况 这类测试可能需要相当长的时间来培养一种直觉。我们可能会发现随着训练时间的增加有时一次改变一个参数会掩盖一次调整两个参数所带来的好处任务的复杂度会越来越高。
如果我们觉得模型对训练数据过拟合但又无法占到使模型更简单的方法那么我们总是可以尝试增加模型中的Dropout()函数中的百分比参数。这是一种可以降低过拟合的方法同时允许模型具备匹配数据所需的尽可能高的复杂度。如果我们把dropout百分比设置在50%以上那么就会开始有学习上的困难学习速度将会变慢验证误差将会增多。
对许多NLP问题来说循环网络的dropout百分比设置为20-50%是一个相当安全的范围。