从零手写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上哦,链接在建仓库之后会公布。

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

相关文章
|
4月前
|
PyTorch 算法框架/工具
Bert Pytorch 源码分析:五、模型架构简图
Bert Pytorch 源码分析:五、模型架构简图
27 0
|
15天前
|
机器学习/深度学习 PyTorch 测试技术
PyTorch实战:图像分类任务的实现与优化
【4月更文挑战第17天】本文介绍了使用PyTorch实现图像分类任务的步骤,包括数据集准备(如使用CIFAR-10数据集)、构建简单的CNN模型、训练与优化模型以及测试模型性能。在训练过程中,使用了交叉熵损失和SGD优化器。此外,文章还讨论了提升模型性能的策略,如调整模型结构、数据增强、正则化和利用预训练模型。通过本文,读者可掌握基础的PyTorch图像分类实践。
|
9月前
|
XML 存储 PyTorch
基于Pytorch的从零开始的目标检测 | 附源码
基于Pytorch的从零开始的目标检测 | 附源码
|
10月前
|
机器学习/深度学习 PyTorch 语音技术
使用PyTorch构建卷积神经网络(CNN)源码(详细步骤讲解+注释版) 01 手写数字识别
在使用PyTorch构建GAN生成对抗网络一文中,我们使用GAN构建了一个可以生成人脸图像的模型。但尽管是较为简单的模型,仍占用了1G左右的GPU内存,因此需要探索更加节约资源的方式。
|
机器学习/深度学习 算法
从零手写Resnet50实战—手写龟速卷积
从零手写Resnet50实战—手写龟速卷积
|
机器学习/深度学习 存储 算法
|
机器学习/深度学习 数据挖掘 PyTorch
# 【深度学习】:《PyTorch入门到项目实战》(十一):卷积层
>之前已经介绍了基本的神经网络知识以及一些处理过拟合欠拟合的概念。现在我们正式进入卷积神经网络的学习。CNN是⼀类强⼤的、为处理图像数据⽽设计的神经⽹络。基于卷积神经⽹络架构的模型在计算机视觉领域中已经占主导地位,当今⼏乎所有的图像识别、⽬标检测或语义分割相关的学术竞赛和商业应⽤都以这种⽅法为基础。对于计算机视觉而言,面临的一个重大挑战就是数据的输入可能会很大。例如,我们有一张64$\times$ 64的图片,假设通道数为3,那么它是数据量相当于是一个$64\times 64\times 3=12288$的特征向量。当我们要操作更大的图片时候,需要进行卷积计算,它是卷积神经网络中非常重要的一部
 # 【深度学习】:《PyTorch入门到项目实战》(十一):卷积层
|
机器学习/深度学习 算法 PyTorch
PyTorch实战 | 使用卷积神经网络对CIFAR10图片进行分类(附源码)
首先通过torch.randn()生成四维的随机数据,由于我们之前定义网络中Conv2d()函数接收的数据要求是四维的,其中第一维度代表样本数据的个数,第二维代表数据的通道数,第3、4维代表数据大小,这里是32×32的网格。然后将生成的数据送入neural_net(),这里会自动调用该对象的forward()方法进行模型训练并输出结果。
PyTorch实战 | 使用卷积神经网络对CIFAR10图片进行分类(附源码)
|
算法 计算机视觉
【YOLO系列学习笔记】-第二章初识YOLO
you only look once,属于one-stage目标检测算法
62 0
【YOLO系列学习笔记】-第二章初识YOLO
|
算法 PyTorch 算法框架/工具
从零开始学Pytorch(十七)之目标检测基础(一)
从零开始学Pytorch(十七)之目标检测基础
从零开始学Pytorch(十七)之目标检测基础(一)