列表

详情


37. 用过哪些神经网络?如何调参

回答思路

我学习的方向比较多,做了不少项目,比如

最开始是图像分类任务开始学习的,包括LeNet、AlexNet、VGGNet,再到ResNet等等;

然后是目标检测,包括FasterRCNN、MaskRCNN、Center Net等等;

后面接触了视频动作识别,主要是SlowFast、TSN等;

调参的时候也不能无章法的乱调,试试这个参数行不行,那个参数行不行,效率太低,调一次要跑很久才能出结果,也不一定能搜到好结果。

比较科学的方法是GridSearch,即网格搜索,在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。

Ps:为什么叫网格搜索?以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,所以叫grid search)

下面给出一个示例:

from sklearn.datasets import load_iris  from sklearn.svm import SVC  from sklearn.model_selection  import train_test_split   #加载数据iris = load_iris()  X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=0)  print("Size of training set:{} size of testing set:{}".format(X_train.shape[0],X_test.shape[0]))   #开始网格搜索best_score = 0 for gamma in [0.001,0.01,0.1,1,10,100]:     for C in [0.001,0.01,0.1,1,10,100]:         svm = SVC(gamma=gamma,C=C) #对于每种参数可能的组合,进行一次训练         svm.fit(X_train,y_train)         score = svm.score(X_test,y_test)         if score > best_score: #找到表现最好的参数             best_score = score             best_parameters = {'gamma':gamma,'C':C}  print("Best score:{:.2f}".format(best_score)) print("Best parameters:{}".format(best_parameters))

另外,调参还需要结合具体任务。

比如,我们想用通用目标检测网络FasterRCNN实现表格单元格的检测,那么就可以针对表格单元格的特点(通常是细长的长条),调整anchor ratio(即宽高比),提高模型效果。

上一题