一、进度概述
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博客
后续应该有对应笔记的整理。