一、前言
偶然在飞桨公众号"飞桨PaddlePaddle"上看见一个21天零基础深度学习带学的消息,抱着试一试的心态报了名,其实并没报太大期望(OS:之前也报过其他的 "××吧"、"***线"等课程,还是付费的,虽然钱不多,但是讲的真是一般,也没学到啥),AIStudio也许是yiyang。
进群了解到居然要每天打卡做作业,一度想放弃。刚好赶上最近找房子搬家,不过我也没想到到现在还在坚持每天打卡学习(不想成为优秀工程师的程序猿不是个好咸鱼@_@)。
二、学习心得
之前并没接触过飞桨,从预习作业开始,安装paddlepaddle-gpu,也算是“零基础”
之前也看过一些深度学习资料和教程,这个算是有点基础,但当"毕然"老师带着计算梯度反向传播时,才有了深刻的理解。配上作业的图例,对链式法则 乘加运算 梯度求导 学习率 有了更清晰的认识。
通过numpy实现和飞桨实现的房价预测对比,初步认识到飞桨的便捷。结合minist cifar10等随堂练习和打卡作业,对分类任务有了更深一层的领悟。通过不同optimizer act loss 的尝试,发现我不是一个合格的”调参师“,要学的还很多!
##
由此可见,均方误差表现的“圆滑”的坡度有两个好处:
- 曲线的最低点是可导的。
- 越接近最低点,曲线的坡度逐渐放缓,有助于通过当前的梯度来判断接近最低点的程度(是否逐渐减少步长,以免错过最低点)。
而这两个特性绝对值误差是不具备的,这也是损失函数的设计不仅仅要考虑“合理性”,还要追求“易解性”的原因。
##
好吧!作业做错了!
课程深入,计算机视觉基础知识没什么问题,但是对几种分类网络,虽然都跑了一遍,其实理解并不深,很多网络层设计并不明白其奥妙,也看了一些其他讲解,只能说是人云亦云!
对于目标检测,对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: 努力!奋斗!参加下一期的论文复现营!