【学习笔记】Day 16-18

一、进度概述

        1、ddnet_main 相关代码学习(预计 3-4 天)

二、详情

1、顶层结构

        关于代码顶层结构的一些思考和总结,其中下图为师兄代码的文件结构

总结:
        对于一个优秀的代码,其文件结构一定也是清晰的,最常见的就是数据的分类。回顾我自己做的几个项目,几乎都是所用文件全扔一个地方(很惭愧的来讲,我目前还没有写过类似于 path_config.py 的文件)。将数据,模型分门别类的整理在各自文件夹中,既美观好看,又好对其做相关处理(如更新)。
        原来对 from...import... 语句的感悟还是太差了,对于稍微大一点的项目,这个语句还是有一定的含金量的(思维层面与整体架构构筑层面)。

2、代码原理分析

        各个文件的详细说明这里就不重复了,在 README.md 中有很详细的说明。
        原理上的东西可能还需要一定时间的研究

(1)深度学习相关原理

        这部分是比较重要的,可以参考以下文章(个人自学后觉得还行):
        深度学习知识点全面总结-CSDN博客

        今天听完讨论后,我突然想明白个事儿,其实没必要对深度学习相关知识太过于畏惧,觉得自己没学就啥也不懂。以下为个人的一些理解:
        深度学习其实可以看做一种智能化标签,通过多层的网络,实现对未知数据的分类。那么 DL-FWI 中,深度学习是与全波形反演所结合,某种程度上可以理解为对地震子波的数据进行分类,然后依据相关地震勘探原理,特定的标签还原成特定的图像,最后对还原出的图像和真是图像进行比对,判断效果。

(2)相关库

        这部分的学习笔记直接参考以下链接,那些博主做的整理十分好。对于库的掌握,实在不会就上网查,更应该投入精力的是 “为什么要用这个库中的函数” 这一问题,要从原理上理解。
        这里收录一些之前没见过的库的使用。
        对于 pytorch,numpy,matplotlib,其实这些是关于图像和矩阵的函数库,为什么 DL-FWI 会用到这些呢?这可以回到之前学过的数字图像处理中,或者换句话而言,就是二维信号。

图像处理:

        Pytorch:Python Pytorch库 详细笔记(从零开始 绝对入门级别)_python torch-CSDN博客

        numpy:NumPy库的介绍与使用(一)-CSDN博客

        matplotib:Python学习之-matplotlib详解-CSDN博客

        lpips:这是深度学习中衡量两个图像的相似程度的指标

        gc:python内存回收gc模块_python gc-CSDN博客

3、感悟

1)模块化

        经过这几天的研读后,个人觉得 ddnet_main 与本科期间的小项目最大的不同在于模块化的分类。
        何为模块化?在我之前 fpga 相关项目的笔记中提到过,模块化代码使得我在编写相似项目的过程中省下了极大部分的经历,将一个项目拆分成不同的子任务,再对子任务中的不同进程进行分类,使得最后成为具有通用性质的模版代码。换句话讲,这其实也是一种意义上的函数。在 C++ 中,有一种结构叫做 “类”,编写最基本的 “类”,而后根据不同的特性化需求进行一定程度上的派生,从而形成了能处理各种不同数据的函数(这只是类比,实际上这个项目是用 python 编写的)。在编写大项目中,要着重把握这一思维,这样能大大减小重复化的代码编写。如这里的 path_config.py,路径的相关编写可以参考这个。
        这里好像突然就明白当初那个自己写的篮球计数器为啥会出现顶层 contral 文件没办法成功运行了,大概率就是因为没有路径配置,导致调用文件出现了点问题(改天回去看看)。

2)运行反馈

        在以往的代码编写经历中,我时常有着 debug de 红温的经历,一部分原因是因为代码硬实力不够,导致对着报错也得分析好一阵子才能解决;一部分原因是代码习惯不好,如双边符号只有一个;还有一部分原因就是没有编写运行反馈的习惯,导致一些原理上的错误很难找到。如下图:

        为什么说一定需要有运行反馈呢?编译器的报错只能帮你纠正语法和格式上的错误,对于运行原理,它是没有办法的。对于本科期间的小程序,你实在搞不定,可以地毯式重新过一遍代码,但这样做的前提是他体量小。当代码体量逐渐增大,这么干就显得很不明智了。而良好的运行反馈,则能帮你快速定位。
        这一点需要好好学习,这种习惯是我的弱项。

3)关于 readme

        readme 不仅仅对读代码的人来说是一个快速了解这个代码的运行逻辑,以及相关注意事项的好帮手,更是帮自己理清思路的方法。
        对我个人而言,已经有建立 readme.txt 的习惯,但是受限于 txt 只能记录文本,有些情况下十分不方便。这里发现 .md 文件是个好东西,值得学习。


后记

2024.8.17

        今天的主要内容是逐句分析 ddnet_main 相关代码,暂未完成,具体整理见明天的笔记。
        在阅读代码的过程中,发现自己的 Python 相关代码能力还有些弱,很多语法,用法上的东西还需要回到教材中去复习,这点不应该。
        关于 Python 代码能力,相关见 Python 专题整理,后续会重新开始更新该专题。

2024.8.18

        继续整理学习代码。
        今天的主要内容是关于代码顶层结构的一些思考和总结,更多细节上的代码后续继续整理。
        原理上的东西可能还需要一定时间的研究,现在依然存在原理上的理解问题,以及再很惭愧的是,python 能力真的很弱啊。
        而且还有挺多库需要去学的,好多都没见过。

2024.8.19

        截止今天,能看懂的大概率都已经差不多了,剩下的需要更多基础性的专业知识来补足。目前先去学习一些有关机器学习和深度学习的理论知识,之后再回过头来看代码原理
        这次研读代码的一大经验是:不能试图从代码上去学习原理。代码只是让计算机能够按照你的思路帮你计算的工具,从工具倒推原理这是本末导致的,后续时间开始学习机器学习的相关内容,参考文章如下:
        https://blog.csdn.net/minfanphd/category_12328466.html
        深度学习知识点全面总结-CSDN博客

         关于今天的讨论,有这么两个点值得注意:(1)标点的使用(2)论文配色,相关文章如下:
        论文写作_闵帆的博客-CSDN博客

        后续应该有对应笔记的整理。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值