学习心得

       之前并没接触过飞桨,从预习作业开始,安装paddlepaddle-gpu,也算是“零基础”

飞桨 predict_system 乱码 百度飞桨入门_2d

       之前也看过一些深度学习资料和教程,这个算是有点基础,但当“毕然”老师带着计算梯度反向传播时,才有了深刻的理解。配上作业的图例,对链式法则 乘加运算 梯度求导 学习率 有了更清晰的认识。

       通过numpy实现和飞桨实现的房价预测对比,初步认识到飞桨的便捷。结合minist cifar10等随堂练习和打卡作业,对分类任务有了更深一层的领悟。通过不同optimizer act loss 的尝试,发现我不是一个合格的“调参师”,要学的还很多!

飞桨 predict_system 乱码 百度飞桨入门_paddlepaddle_02

##

由此可见,均方误差表现的“圆滑”的坡度有两个好处:

  • 曲线的最低点是可导的。
  • 越接近最低点,曲线的坡度逐渐放缓,有助于通过当前的梯度来判断接近最低点的程度(是否逐渐减少步长,以免错过最低点)。

而这两个特性绝对值误差是不具备的,这也是损失函数的设计不仅仅要考虑“合理性”,还要追求“易解性”的原因。

##

        好吧!作业做错了!谨记!

        课程深入,计算机视觉基础知识没什么问题,但是对几种分类网络,虽然都跑了一遍,其实理解并不深,很多网络层设计并不明白其奥妙,也看了一些其他讲解,只能说是人云亦云!

         对于目标检测,对YOLO SSD fasterRCNN也看过一些讲解,本次课程条理清晰,跟着视频,听老师的讲解,收获良多。也尝试做调试,反复看了多次YOLO视频,后续答疑课的fasterRCNN串讲没听明白,好吧!道阻且长!

NUM_ANCHORS = 3
NUM_CLASSES = 7
num_filters=NUM_ANCHORS * (NUM_CLASSES + 5)
with fluid.dygraph.guard():
    backbone = DarkNet53_conv_body(is_test=False)
    detection = YoloDetectionBlock(ch_in=1024, ch_out=512, is_test=False)
    conv2d_pred = Conv2D(num_channels=1024, num_filters=num_filters,  filter_size=1)
    
    x = to_variable(img)
    C0, C1, C2 = backbone(x)
    route, tip = detection(C0)
    P0 = conv2d_pred(tip)
    # anchors包含了预先设定好的锚框尺寸
    anchors = [116, 90, 156, 198, 373, 326]
    # downsample是特征图P0的步幅
    pred_boxes = get_yolo_box_xxyy(P0.numpy(), anchors, num_classes=7, downsample=32)
    iou_above_thresh_indices = get_iou_above_thresh_inds(pred_boxes, gt_boxes, iou_threshold=0.7)
    label_objectness = label_objectness_ignore(label_objectness, iou_above_thresh_indices)
    
    label_objectness = to_variable(label_objectness)
    label_location = to_variable(label_location)
    label_classification = to_variable(label_classification)
    scales = to_variable(scale_location)
    label_objectness.stop_gradient=True
    label_location.stop_gradient=True
    label_classification.stop_gradient=True
    scales.stop_gradient=True
    
    total_loss = get_loss(P0, label_objectness, label_location, label_classification, scales,
                              num_anchors=NUM_ANCHORS, num_classes=NUM_CLASSES)
    total_loss_data = total_loss.numpy()
    print(total_loss_data)

     以前重来没考虑过 "scales" 对小目标以及得分较高目标的作用,这次课学到了,虽然还不知道怎么用、@……@

三、小结

    很少写博客,好吧!很少写文档总结,现在发现写的时候学习的过程在脑海里回档,以后尽量多总结!

    课程过半,每天坚持打卡学习,最初几天会觉得不习惯甚至想放弃,现在会觉得期待,每次学习,有期待有收获!

    感谢飞桨团队各位老师!昨晚看了”芮芮“的直播,立个flag: 努力!奋斗!参加下一期的论文复现营!