从零手写Resnet50实战—开始了

简介: 从零手写Resnet50

大家好啊,我是董董灿。

最近,我想到一个很好的写作计划,与其说是写作,不如说是给自己立的一个小小的实战项目,而且绝对是从零开始的保姆级实战项目。

我会结合Resnet50中的算法原理,从零开始,手写全部算法,并且完成这个网络的搭建,最后,完成图像分类任务的推理。

项目最终的效果是:从网上下载一张图片,这个网络可以正确的识别出来图片中的物体是什么。

为什么要从零手写Resnet50?

相信很多同学在初学的时候,都会从网上查过很多神经网络的文章,大部分文章都存在以下的痛点,导致对新手来说,很不友好:

调用第三方库来完成算法的运算

典型的比如 tf.nn.conv2d, 这一个接口调用,就完成了一个卷积算法的运算。

对于新手来说,几乎是很难知道卷积这个算法,到底是如何实现的。

基于某些框架,来进行的网络的推理

一些文章或者教程,基本都是基于某某框架,来完成的一个Resnet50的神经网络搭建。

甚至有些文章教程,都没有网络搭建的过程,直接利用框架已经搭好的网络,上来就直接进行推理。

最终,学完之后的效果就是,跟着教程走,确实能把一张图片成功推理出来,但是对新手来说,依旧一脸懵。

我初学的时候,拿手写数字识别项目练手,就是这种感觉。

按照教程一步步来,确实神经网络很轻松地就识别出来我手写的数字是1还是9, 但是为什么就识别出来了,我不知道。

知其然,不知其所以然。

环境问题搞死新手

对于新手来说,最难的不是算法和框架,而是环境。

如果基于上述第三方API调用或第三方框架来学习,我相信每一个人都会被python环境折磨一遍。

像什么 tensflow、torch、conda、jupyter notebook 等等,每一个都会有不少坑。一整天都在搞编程环境问题,大大磨灭了学习的动力。

于是,我在想,抛弃所有的第三方库和框架,就不能完成一个神经网络的推理了么?

当然可以,而且不会有上述3个痛点的存在。

怎么做? 从零开始写呗

在经过了一些前期调研之后,我制定了从零手写的三个步骤:

首先,抛弃所有的三方库,将Resnet50中的所有算法——Convolution,Pooling,BatchNormal,Relu等手写一遍,语言选择python 和 C++,两个版本都会写。

至于权值,从网上下载已有的就好。
然后,同样抛弃对三方库或框架的依赖,将手写的算法,按照Resnet50的网络结构,搭积木似的搭起来。

最后,从网上下载一张图片,输入给搭建的网络,它能正确的输出图片的类别,这个小项目就算成功了。

image.png

刚百度搜出来的一只猫,最终希望这个小项目可以识别出这张图片是一只猫。

就这么简单。整个过程,我们只需要简单的C++或python开发环境。
已经和chatGPT达成了初步意向,希望它能作为我的一个助手,在编程和文章写作的过程中,给与一些帮助。
毕竟,在现在,chatGPT的生产力有时候比人要高效很多。

在这个过程中,可能会遇到不少困难,但是,有了chatGPT这个伙伴的加入,相信会顺利很多。

为什么会计划手写python和C++两个版本呢?

因为之前和一些小伙伴沟通,才意识到,并不是每个人的软件技术栈都是一样,甚至有不少小伙伴是java出身的,不好意思本人对java确实不熟。

而且深度学习中,几乎都是 python和C++的天下,写这两个版本,能让更多的小伙伴看得懂,最终代码都会放在gitee上哦,链接在建仓库之后会公布。

期待,手写的这个网络,最终识别出上面的那只猫!

相关文章
|
8月前
|
机器学习/深度学习 编解码 算法
YOLOv5改进 | 主干网络 | 将backbone替换为MobileNetV3【小白必备教程+附完整代码】
本文介绍了将YOLOv5的backbone替换为MobileNetV3以提升目标检测性能的教程。MobileNetV3采用倒残差结构、Squeeze-and-Excitation模块和Hard-Swish激活函数,实现更高性能和更低计算成本。文中提供了详细的代码实现,包括MobileNetV3的关键组件和YOLOv5的配置修改,便于读者实践。此外,还分享了完整代码链接和进一步的进阶策略,适合深度学习初学者和进阶者学习YOLO系列。
|
7月前
|
机器学习/深度学习 算法 TensorFlow
Inception v3算法的实战与解析
Inception v3算法的实战与解析
182 0
|
8月前
|
算法 文件存储 计算机视觉
【YOLOv8改进】MobileNetV3替换Backbone (论文笔记+引入代码)
YOLO目标检测专栏探讨了MobileNetV3的创新改进,该模型通过硬件感知的NAS和NetAdapt算法优化,适用于手机CPU。引入的新架构包括反转残差结构和线性瓶颈层,提出高效分割解码器LR-ASPP,提升了移动设备上的分类、检测和分割任务性能。MobileNetV3-Large在ImageNet上准确率提升3.2%,延迟降低20%,COCO检测速度增快25%。MobileNetV3-Small则在保持相近延迟下,准确率提高6.6%。此外,还展示了MobileNetV3_InvertedResidual模块的代码实现。
|
8月前
|
机器学习/深度学习 存储 算法
【轻量化:实操】动手实现神经网络中的裁枝操作(附演示代码&yolo系列)
【轻量化:实操】动手实现神经网络中的裁枝操作(附演示代码&yolo系列)
197 1
|
计算机视觉 机器学习/深度学习 编解码
【轻量化网络系列(4)】ShuffleNetV1论文超详细解读(翻译 +学习笔记+代码实现)
【轻量化网络系列(4)】ShuffleNetV1论文超详细解读(翻译 +学习笔记+代码实现)
741 0
【轻量化网络系列(4)】ShuffleNetV1论文超详细解读(翻译 +学习笔记+代码实现)
|
机器学习/深度学习 算法
从零手写Resnet50实战—手写龟速卷积
从零手写Resnet50实战—手写龟速卷积
|
机器学习/深度学习 存储 算法
|
机器学习/深度学习
【深度学习】Dropout原理以及代码实现
【深度学习】Dropout原理以及代码实现
187 0
【深度学习】Dropout原理以及代码实现
|
人工智能 TensorFlow 算法框架/工具
MobileNet原理+手写python代码实现MobileNet
MobileNet原理+手写python代码实现MobileNet
|
机器学习/深度学习 计算机视觉 Python
手把手带你调参Yolo v5 (v6.2)(推理)(一)
手把手带你调参Yolo v5 (v6.2)(推理)
手把手带你调参Yolo v5 (v6.2)(推理)(一)