跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
合金电阻捷比信 · 专业器件主题站

分别介绍了串行通信协议RS-232,RS-422和RS-485的基本概念和信息

训练特殊网络还记得我们一开始就丢弃的70%的训练数据吗?结果表明,如果我们想在Kaggle排行榜上获得竞争优势,这是一个非常糟糕的主意。在包含70%数据和挑战的测试集中,我们的模型具有许多尚未发现的功能。因此,改变以前只训练一个模型的方法,让我们训练几个专门的网络,每个网络预测一组不同的目标值。我们将训练一个仅预测left_eye_center和right_eye_center的模型,一个用于鼻子_TIp,以此类推。总共,我们将有六个模型。这将使我们能够使用完整的培训数据集,并希望总体上获得更具竞争力的分数。六个专用网络都将使用完全相同的网络体系结构(一种简单的方法,不一定是最好的方法)。因为训练必须比以前花费更长的时间,所以让我们考虑一个策略,即使验证错误停止改善很多,我们也不必等待max_epochs完成。这称为提前停止,我们将编写另一个on_epoch_finished回调来处理它。此处的实现:类EarlyStopping(object):def __init __(self,paTIence = 100):self.paTIence = paTIenceself.best_valid = np.infself.best_valid_epoch = 0self.best_weights = Nonedef __call __(self,nn,train_history):current_valid = train_history [-1] [' valid_loss'] current_epoch = train_history [-1] [&#39']如果current_valid& lt; self.best_valid:self.best_valid = current_validself.best_valid_epoch = current_epochself。 best_weights = nn.get_all_params_values()elif self.best_valid_epoch + self.patience& lt; current_epoch:print(&“早期停止。& quot;)print(& quot;最佳有效损失是在{{..6f}时期}。& quot。format(self.best_valid,self.best_valid_epoch ))nn.load_params_from(self.best_weights)raise StopIteration()如您所见,调用函数中有两个分支:第一个是当前的验证错误比我们之前看到的要好,幸运的是,第二个是最佳验证错误的迭代次数与当前迭代次数之间的距离超出了我们的耐心。在第一个分支中,我们保存网络的权重:self.best_weights = nn.get_all_params_values()在第二个分支中,我们将网络的权重设置为验证错误中存储的最佳值,然后发出StopIteration,告诉NeuralNet我们要停止训练。 nn.load_params_from(self.best_weights)raise StopIteration()让我们更新net定义中的on_epoch_finished处理程序列表,并添加EarlyStopping:net8 = NeuralNet(#... on_epoch_finished = [AdjustVariable(' update_learning_rate&#) 39;,start = 0.03,stop = 0.0001),AdjustVariable(' update_momentum&#39 ;, start = 0.9,stop = 0.999),EarlyStopping(patience = 200),),#...)到目前为止如此好,但是如何定义这些特殊的网络来做出相应的预测呢?让我们做一个列表:SPECIALIST_SETTINGS = [dict(columns =(' left_eye_center_x&#39 ;,' left_eye_center_y',' right_eye_center_x&#39 ;, ' right_eye_center_y&#39 ;,),flip_indices =((0,2),(1,3)),),dict(columns =(' nose_tip_x&#39 ;,&# 39; nose_tip_y',),flip_indices =(),),dict(columns =(' mouth_left_corner_x',' mouth_left_corner_y',' mouth_right_corner_x& ;#39 ;,' mouth_right_corner_y',' mouth_center_top_lip_x',' mouth_center_top_lip_y'),flip_indices =((0,2),( 1,3)),),dict(columns =(' mouth_center_bottom_lip_x',' mouth_center_bottom_lip_y',),flip_indices =(),),dict(columns =(& ;#39; left_eye_inner_corner_x',#39; left_eye_inner_corner_y',' right_eye_inner_corner_x',' right_eye_yinner_corner_'#39; ; left_eye_outer_corner_x',' left_eye_ external_corner_y',' right_eye_outer_corner_x',' right_eye_outer_corner_y'),flip_indices)=((0,,(1,3),(4,6), (5,7)),),dict(columns =(' left_eyebrow_inner_ end_x&#39 ;,' left_eyebrow_inner_end_y',' right_eyebrow_inner_end_x&#39 ;,' #39; right_eyebrow_inner_end_y',#39; left_eyebrow_outer_end_x',' lefter' right_eyebrow_outer_end_x',' right_eyebrow_outer_end, flip_indices =(((0,2),(1,3),(4,6),(5,7)),),]]很久以前,我们讨论了flip_indices在数据扩展中的重要性。在数据介绍部分,我们的load_data()函数还接受一个可选参数来提取某些列。我们将在使用特殊网络预测结果的fit_specialists()中使用这些功能:从集合中,从sklearn.base导入OrderedDict。