“CS+X”-预备

从这个篇章开始,本系列正式启动。采纳了许多朋友的建议,把本系列主要框架重新梳理了一下:

  • 开发工具
  • 不造轮子
  • DL/ML的基本逻辑
  • 回归与分类
  • 如何与自身问题结合
  • 几个简单实例,面向文科、理工科、医科不同需求(希望作为仓库主要用途,不断存储不同学科与计算机交叉的实例)

这篇博客主要关于第一部分:开发工具

1. 编程语言

a. 什么是编程语言

对于我们想要达到的目标:计算机辅助跨专业本科毕设,其实我们并不需要了解编程语言具体是怎样转换成计算机能看懂的语言,这方面内容其实几乎每一个关于计算机学习的B站视频都会有讲到。那么,我们这里其实只需要明确一点:编程语言是工具,让计算机根据我们的需求完成对应的任务。

编程语言多种多样,详见:https://en.wikipedia.org/wiki/List_of_programming_languages 。一般来说,我们都认为不同的语言适用场景不同,例如SQL,主要与数据库管理等等有关;JavaScript,一般与网页开发有关等等。但实际上,这并不意味着某一门语言只能用来做特定的事情。比如我们现在主要关心的机器学习、深度学习,目前大多数项目都是Python语言编写,但这就意味着只有Python能做吗?也并不是,大名鼎鼎的Caffe:https://caffe.berkeleyvision.org/ ,就是C++编写的深度学习框架。所以,语言工具并没有我们想象中限制的那么死,当然,也没有哪一门语言能在所有场景下都运作良好,只有“对症下药”这一说。

对于初学者,尤其是在没有编程基础的情况下,却需要学习机器学习/深度学习并运用到自身学科的初学者,我建议使用Python语言,因为这门语言是我们所称之为的“高级语言”,并不是等级高级,而是刚开始使用Python的时候,并不需要去考虑与学习内存管理、寄存器等等这些内容(也带来了弊端:性能相对来说较为低下),也很容易能够运行起来,不像Java或者C#,入学门槛更高。另外,Python在机器学习、深度学习、数据分析这方面的资源和轮子更多(从开源社区角度考虑),也不需要考虑太多关于整数长度、浮点数精度等等内容带来的影响。

当然,在我印象中,其实很多同学接触了MATLAB、R这种语言。其实MATLAB也非常强大,集成了很多机器学习模型、深度学习模型,有着很强势的数值计算能力,但个人认为,MATLAB终究不适用于整个机器学习或深度学习项目的主要开发工具,二次开发难度比较大。结合个人竞赛的经验,我认为最好的就是Python作为主要工具,MATLAB根据学科具体需求辅助。而R语言,主要是对包的调用,在可视化方面非常强大,但也和MATLAB一样,二次开发或者从头开始构建模型,都不如Python合适,可以作为辅助工具使用。

接下来系列里的内容也会主要使用Python。

b. 开发平台(环境)

上面我们说到,语言是一种工具,控制计算机根据需求完成任务。有时候我们会看到,很多指令或者代码是在终端上跑的,用shell脚本运行,甚至很多开发者直接使用Vim编写程序。但对于初学者来说,选择一个IDE(集成开发环境),还是很有必要的。IDE是一个功能强大的开发工具,在IDE里面,可以直接编写程序、运行、连接服务器、配置环境、设计图形化界面等等。

有的IDE是面向特定语言设计的,比如Pycharm、Clion、Eclipse,也有拓展性很强,通过下载插件可以兼容各种语言的IDE,比如Vscode。个人使用感觉,Vscode对远程服务器连接支持更好,对语言兼容性强(但也带来问题:各个语言都需要配置一下,针对特定语言的IDE配置上相对简单些,比如虚拟环境配置,用Pycharm对Python虚拟环境的配置肯定比用Vscode更傻瓜式),但平时也经常使用Pycharm的原因是,一些纯Python的项目,在本地运行,肯定是Pycharm更加方便搭建整个项目。(还有一点是我真觉得JetBrains的IDE很好看。)

真正的雨露均沾

(雨露均沾是我本人。)

具体使用什么开发环境,根据需求上网查查,按照步骤安装即可。只要理解IDE就是一个方便进行开发的平台即可。

2. 环境管理

a. 什么是环境管理

这里的环境与上面开发环境想表达的不太一样,上面说的是IDE,用来开发项目的平台,而这里的环境指的是,整个项目运行起来,依赖的解释器、所有库、可执行程序等的集合。大概理解一下就比如,项目A需要在安装了包1、包2、包3之后,可以正常运行起来,那么{包1,包2,包3}就是项目A所需要的开发环境。

那为什么需要环境管理呢,因为不同的项目如果共享一个开发环境,那么这个环境不仅会随着项目变多而越来越大,还有很大概率会发生兼容性问题。比如,项目A只能在Python某版本下运行,但项目B需要的一个包1需要在Python的另外一个版本下才能正常使用,那么就发生冲突了。

所以,我们需要对不同项目进行隔离,不同项目才能在各自对应的开发环境下相安无事地运行。我们把这样针对不同项目搭建的环境叫做虚拟环境(Virtual Environment),“虚拟”是因为这些环境其实都是开发环境的副本,存在不同的位置。虚拟环境具体包括了什么、文件是怎么安排的,感兴趣的话可以自行搜索学习,最主要的是需要了解一下,解释器比如Python.exe存在什么位置、各种库安装在哪里,方便在IDE里配置虚拟环境。

b. 常用工具

许多语言都有对应的环境管理工具,比如Go的GVM、Java的Jenv等等,其实很多语言的所谓环境管理,主要是管理不同版本的开发语言。但Python项目中,尤其是做ML、DL相关的项目,各种库需要下载配置,很多轮子需要安装,对虚拟环境管理的需求更大。这里主要围绕Python的虚拟环境管理介绍几个工具:

① Pyenv+Virtualenv/Venv

Pyenv可以用来管理不同Python版本;Virtualenv/Venv可以用来给每个项目创建一个虚拟环境,将不同版本的库隔离开。所以,二者搭配就能实现使用不同Python版本,在某个项目特定的虚拟环境中运行项目。

不赘述具体操作,可参考:https://cloud.tencent.com/developer/article/1593451 (里面有提到pip,不着急,下面会介绍。)

② Anaconda/Miniconda

其实conda很适合新手使用,本质上和方案①一样,都是管理不同Python版本,管理不同项目环境,conda的安装、使用都对新生更加友好。主要的conda发行版软件有anaconda和miniconda,anaconda的好处是,有图形化界面、预装的工具等等,坏处是臃肿,虚拟环境多起来很占空间。miniconda更轻量化,没有图形化界面,适合已经了解conda基本使用的用户。(还有miniforge、mambaforge什么的,主要是因为mamba这个工具的出现,下面会讲到)

(支持一下好兄弟的anaconda个人教程:https://www.wolai.com/76zewrHjDtkrBuwBzYo1KZ?theme=light)

conda还有一个好处,就是虚拟环境不仅限于Python,比如R这些也是可以包含的,也包括了很多R的包。对于医学生来说,conda应该不陌生,我也挺推荐conda管理R项目,很多install.packages安装不好的,conda能够正常安装。

那对于我们刚入门,近期只有毕设课题需求的同学,我觉得用anaconda也无伤大雅,但对于已经比较了解的了,还是尽快换成miniconda!不然就会像我之前一样:

image-20240206182720330

(114514)

③ Poetry

Poetry其实很强大,但是配置和使用起来更加复杂。放在这里是觉得不能不提,但和我们系列的需求不太契合。感兴趣的可以直接去官方文档学习:https://python-poetry.org/

④ Docker

这个我曾经在知乎看到过一个回答,找到了:

image-20240206183304004

docker我认为在我们这个系列也不是很符合需求,但docker非常适合团队合作,其他人不需要花太多时间去重新部署你的环境,有docker就够了。也附上官方文档:https://docs.docker.com/

感觉如果不是涉及底层编译等等问题的冲突,普通Python项目用docker管理有点杀鸡用牛刀的感觉。

总体而言,我还是推荐①和②,不论是哪种,都有足够多的文章和文档讲解了具体用法,基本上能覆盖所有的问题。

3. 库

a. 什么是库

库,其实就是可以直接调用的,封装好的工具包。也就是经常在Python代码里会看到的import xxx,xxx很有可能就是某个库。大部分文章里库、包在Python里面经常混用,大致表达的都是一个意思。

b. 常用工具

① 耐心

这里我们说的“安装”,其实和大家概念里的,下载安装包,点开,确认到底,安装,不一样。我们这里说的安装,其实都是直接通过工具一步到位下载到虚拟环境里放置库的位置。所以我们需要安装工具,来帮助我们一步到位,安装各种需要的库。

安装我们项目需要的各种库,首先需要的是耐心。因为在刚入门的时候,光是PyTorch的安装就能打倒70%(猜测)的人,要是加上TensorFlow,我想都不敢想。所以,遇到问题是正常的,重要的是耐心。

安装各种库,我首先不要去跟着搜索引擎推荐出来的csdn、知乎上的文章安装,先去找找有没有官方文档。为什么呢?其实不是不相信内容创作者,而是这些库和工具,时效性很重要。文章总是在某个时间点X是最新的,但你在时间点Y才看到,就不是最新的了。而官网肯定是随着迭代而更新,安装方式也一定是最新的。所以我推荐尽量找官网和官方文档或者代码仓库(github,下一篇会讲到),找安装使用说明(一般叫做tutorial或installation或get started等等)。

image-20240206184958851

image-20240206185022458

image-20240206185041671

(上面都是官网截图,能看到很显眼的官方安装教程位置)

但也有很多库比较小,没有官网之类的,如果在github上也找不到,那么再参考博客文章等等,如果还没有,那就硬着头皮下载看看。

② Pip

pip内置在Python当中,提供对Python包的查找、下载安装等等功能。其实pip下载包很简单,直接pip install 啥啥啥就行。需要注意的是,如果想快一些的话,建议可以配置镜像源。配置也可以参考很多博客,但我个人觉得,其实也可以不用先急着配好镜像。遇到下载起来很慢的包,在命令后面加上 -i “<镜像源地址>”,临时用一下就好。但如果很多包都很慢,那还是设置一下吧。

③ Conda

conda用法是类似的,但是conda和pip下载是有区别的,具体参考:https://www.anaconda.com/blog/understanding-conda-and-pip

image-20240206222741318

我的建议是,整个项目统一成一种安装方式。有时候conda下载的包,不一定识别得到pip下载的包。总的来说,Python项目还是尽量用pip进行安装,而一些不是Python的库,用conda再安装即可。

④ Mamba

mamba其实可以简单看做升级版的conda,速度上有很大优化。但我觉得刚入门,还是先熟悉conda使用更合适,因为对应的教程更全更丰富,渐渐熟悉了再转成mamba。

总体上,我推荐刚入门使用pip和conda就好,具体如何使用指令安装库,网上有详细的教程,并不复杂。我在这个系列里希望能尽量避开具体的内容,也是担心太具体会误人子弟,所以主要分享一下刚起步的一些逻辑和思路。

4. 搜索引擎与问答平台

搜索引擎首选Google,🪜的问题……各显神通!遇到问题,首选StackOverflow、StackExchange,然后就是国内平台。

其实,现在已经有很多很好用的AI助手,许多问题可以通过它们辅助解答。

但遇到各种答案,不要直接复制粘贴,要思考一下,为什么这样子能够解决这个问题,这个方法真的符合我的问题吗?因为报错可能都是一样的,但是造成的原因有所不同,直接复制粘贴一个答案可能会导致问题更多。

5. 小结

这一部分主要包括了我认为,刚入门需要了解的一些内容。但我并没有提供详细的,某个工具怎么去用,因为我觉得这个需要各位自己去搜索与调研,我这里罗列出来,是希望能帮助大家把这些名词和工具理顺一些,知道各个东西大概是用来做什么的。

需要提一下:很多IDE都有教育邮箱认证,免费试用专业版,别忘了去用邮箱白嫖!

谢谢大家看到这里,有问题请随意指正。