昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示,PHP 的流行度降至了历史最低,排在第 17 名,同时,在年度 Stack Overflow 开发者调查报告中,PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言”已成为承载程序员黑色幽默的热梗。在满是唱衰的市场环境中,究竟 PHP 是否真的没有前景,是否已经不值得学习了?今天,我们特邀了识沃科技 CEO 韩天峰老师,他将为我们深入解读 PHP 的发展现状和未来发展趋势。

作者简介

韩天峰,识沃科技 CEO,Swoole 开源项目创始人,PHP 官方 PECL 开发组成员。曾任好未来学而思网校首席架构师,在腾讯朋友网、淘宝搜索、虎牙直播等互联网企业担任架构师和技术负责人。

一、PHP从辉煌到走向没落?

众所周知,PHP 语言诞生于 1995 年,它最初只是一个处理 HTTP 表单的脚本工具。在后续的版本中增加了 MySQL 数据库查询的支持,才逐渐成为一门独立的 Web 项目开发语言。随着互联网的迅猛发展,因PHP易学易用和强大的开发社区而备受青睐,成为了互联网应用开发的主要语言之一。与 Linux、MySQL、Apache 合并称为 LAMP 技术栈,LAMP 对互联网的影响巨大,逐渐成为构建动态网站和应用程序的主要技术架构,据 W3C 的统计,全球有接近 78% 的 Web 网站是基于 PHP 开发构建的。

值得一提的是,PHP 以其低成本、易用、灵活性和可扩展、繁荣的 Web 技术生态,一度在编程开发领域占据着重要的地位,与 Java 语言并驾齐驱。

而随着移动互联网、云计算、人工智能等新技术的兴起,互联网软件系统变得越来越复杂。大型网站系统对于高并发、可用性的要求也越来越高。Java 相比 PHP 拥有类型安全、更好的性能、多线程连接池技术、更严格的编程规范,并且在服务治理方面拥有更成熟的解决方案和生态。很多技术团队更倾向于使用 Java 构建 Web 系统,而非 PHP。

除此之外,伴随如 Node.js、Golang 等新编程语言的出现,它们在某些方面具有 PHP 不具备的优势,例如静态编译、更好的性能和异步编程。这些编程语言也在蓬勃发展,被越来越多的开发者使用。

虽然 PHP 社区也在不断努力改进语言本身,但 PHP 在某些领域的竞争地位逐渐被其他语言所取代,随着时代的发展,一些重要的网站和应用开始转向其他语言和框架,这导致了一些人对 PHP 的未来产生了质疑,很多开发者认为 PHP 正在走向没落。近期 TIOBE 最新指数显示,PHP 的流行度降至了第 17 名,也说明了这一点,开发者正在对 PHP 失去信心,转向其他编程语言。

二、PHP流行度下降的原因

外因是时代的变化,互联网的热潮已退去,现在是人工智能的时代,Python 现在是最流行的编程语言,其他的编程语言的关注度都在下降。内因有以下 3 个:

● PHP 生态过于单一,没有在 Web 之外进入新的领域;

● PHP 语言在类型系统、编译器、并发编程方面迭代更新力度不够,没能及时赶超 Java、Golang、JavaScript(v8) 这些语言和技术;

● 解决历史包袱的魄力不足,至今依然保留着 20 年前的包袱,例如 $_GET/$_POST 等超全局变量、混乱的函数命名等。

尽管如此,PHP 仍然是一门不错的编程语言技术,许多网站和 Web 应用仍然在使用它。PHP 社区和开发者们也在不断努力改进 PHP,使其能够适应新的技术趋势和市场需求,尽管可能会经历了一段时间的没落,但 PHP 仍然会在编程开发领域中扮演着重要角色,这无疑得益于其强大的生态系统。

三、PHP编程语言生态

其实,生态对于编程开发的重要性是不可忽视的,包括开发工具、库、框架、社区、文档、教程、第三方服务和支持等。生态系统的健康与发展直接影响着开发者的工作效率、项目的成功和技术的发展。

在我看来,PHP 只在 Web 开发领域是很成熟的,而 Java 在桌面软件、Android、大数据、金融系统、电商平台均有成熟的生态。Python 在数据科学、人工智能、机器学习、科学计算、教育等领域有广泛应用,尤其是随着 AI 时代的到来,Python 成为当下最为炙手可热的技术。Golang 云原生、基础服务器端软件方面取代了 C/C++。而 Node.js 在前端、单页面应用(SPA)、全栈开发方面具备优势。

相比之下 PHP 的生态非常单一,这也使得 PHP 的局限性尤为明显。而似乎 PHP 官方团队似乎对于 Web 开发之外的生态支持兴趣不大,主要的版本更新也依然是围绕着 PHP-FPM/Apache 这样的 Web 服务器进行着。

不过幸好 PHP 社区有 Swoole 这样类似于 Golang 的异步协程方案,从而弥补了 PHP 在异步并发编程、网络通信方面的一些不足。Swoole 的引入也为开发者提供了更多选择和灵活性,使他们能够更好地应对复杂的应用场景和高并发需求。此外,在软件开发过程中,良好的工程规范也是保证项目质量和开发效率的又一关键要素。

四、工程规范更重要

随着项目研发的经验越来越多,我深刻体会到工程规范比开发的速度更重要。良好的工程规范能够确保项目的长期可维护性、可扩展性和稳定性,虽然追求快速开发可能在短期内带来一些优势,但长期来看,缺乏规范的项目可能会面临诸多问题,包括但不限于以下这些:

● 代码质量下降:没有规范的代码往往会变得混乱、难以理解和维护,使得团队成员在开发、调试和修改代码时耗费更多的时间和精力;

● 团队协作困难:缺乏规范的项目往往意味着每个开发者都有自己的编码风格和习惯,这会导致团队协作时的不一致性和沟通困难;

● 代码可读性差:规范的代码更易于阅读和理解,有助于开发者快速定位问题、理解代码逻辑和进行代码审查;

● 维护成本增加:缺乏规范的代码往往会增加项目的维护成本,因为开发者需要花更多的时间和精力来理解和修改代码,从而增加了项目的技术债务;

● 项目演进困难:随着项目规模的扩大和需求的变更,缺乏规范的代码可能会变得越来越难以维护和扩展,甚至需要重构或重写部分代码。

若我们不重视工程规范,随着项目持续时间的增加,将会造成严重的后果,甚至导致项目研发停滞。而 PHP 社区有很多优秀的项目,可以帮助项目提高工程规范:

● phpunit:单元测试框架;

● composer:包依赖管理器;

● PSR:是社区制定的一系列 PHP 编码规范,涵盖了自动加载、编码风格、命名规范、接口设计等方面;

● php-cs-fixer:代码自动格式化工具;

● phpstan:静态分析检查工具;

● rector:语言版本兼容性检查工具,若项目要升级 PHP 版本可以使用它。

● php-parser:PHP AST 抽象语法树解析工具,可以分析 PHP 语法,做些安全检查、漏洞扫描、编程语言转换,例如 phpy 项目 py2php 就是用它实现的。

不过从编程语言的角度上,PHP 相比 Java 在规范上存在一些天然的缺陷,早期甚至连 namespace 都不支持,面向对象的特性支持也不够完整。虽然在 PHP7 版本做了大量改进,但最新的 PHP 依然存在以下的问题:

(一)无法实现彻底的严格类型

严格类型更容易写出工程规范的代码。这一点基本上是开发者之间的广泛共识。弱类型编程基本上就是 “开发一时爽,重构火葬场”。

现在的 PHP 其实已经在大部分语法上支持了类型限定,例如:

1、函数参数和返回值

function fun(int $a, float $b, FunClass $c, string $d, callable $e): bool {// code ...
}

2、对象属性

class FunClass {public int $age;public string $name;public stdClass $attrs;
}

在开发中也建议启用严格模式:

<?php
declare(strict_types=1);

但遗憾的是在 PHP 最常用的数组依然是一个类型黑洞:

$a1 = new FunClass;
$array = [$a1];
$a2 = $array[0];

由于 PHP 的数组是无类型的,将有严格类型的变量存入数组后再取出就出现了类型的丢失。这也是为什么 Facebook 实现的 HHVM 最终选择不再兼容 PHP,而是独立为一门新的语言 Hack,在 Hack 语言中实现了彻底的严格类型。

(二)缺少二进制构建支持

一个软件开发完整流程包括开发、测试、构建、部署运行,Java 和 Golang 这样的静态语言是比较好的,软件开发测试完成发布版本后,应用程序将构建为一份二进制程序,分发和部署不再需要源码。而 PHP 大部分是直接部署源码运行的,就导致出现了一些列问题:

● WebShell 注入,通过上传或其他文件写入的攻击行为,将部分有害代码注入系统中;

● 直接在线上修改 PHP 源代码文件,导致了实际服务器上的代码与 Git 仓库中的代码不一致;

● 部署系统的难题,碎片式更新,导致了部署期间出现各种逻辑错误;

● 源代码泄露

虽然现在很多开发者使用 Docker 镜像构建和部署,解决了一些问题。但PHP 依然存在一些不足,很多上古时期的 PHP 开发者认为热更新是 PHP 的优势,实际上热更新只在开发测试环境中有价值,线上部署运行的服务是不会热更新的,而且 PHP 的核心开发者们,依然顽固地坚持着热更新这个特性。

(三)混乱的内置函数命名

PHP 语言内置的函数全部是在根命名空间内的,并且部分内置函数的命名规范还是错误的,例如:

● htmlspecialchars,多个字母直接拼在一起,正确的应该是:html_encode_special_chars

● strstr, substr, str_replace 等字符串相关函数,命名相当混乱,而数组操作相关函数的命名就规范多了,均是 array_* 这样命名

(四)混乱的参数顺序

内置函数的参数顺序非常混乱,以数组操作函数为例,array_search 和 array_filter,分别是搜索数组是否存在一个元素,后者是从数组筛选出一些符合条件的元素。

array_filter($array, $callback);
arary_search($value, $array);

因为数组本身不是始终为第一个参数,所以导致开发者无法记忆,每次都需要去看文档,以确定参数在前还是在后。

五、PHP语言还值得学习吗?

尽管如此,我认为 PHP 语言还是值得学习的,相比现在主流的编程语言 Java、Python、C++,以及流行的 Node.js、Rust、Golang 等新型编程语言,PHP 有其无法被取代的独特优势,是一个非常便捷的开发工具集,可以帮助开发者节约很多时间。

(一)语言的简单性

首先,PHP 相较于大多数编程语言来说,没有太复杂的语法,不像某些编程语言,有些语法实在难以理解,比如 C++ 的 move/forward(这在 C++ 中还算是比较简单的,C++ 甚至有语言律师这个职业)。

其次,它不需要考虑整型溢出、符号之类的问题,C++ 或 Golang 中的 int8/int16/int32/int64/uint8/uint16/uint32/uint64。

再者,它没有指针的概念,也不会遇到 Java 和 Golang 的空指针异常这类开发者头痛的问题。

同时,它也没有 Python 中各种眼花缭乱的语法,或 JavaScript 中 0 和 []、'\t'、'0' 三位一体的烧脑问题。

综上,客观来说 PHP 语言就是一种朴实无华,入门友好的编程语言,加上它比较简单,学习的成本极低。

(二)庞大的函数库

PHP 语言自带一个庞大的函数库,各种功能应有尽有。这些函数库涵盖了各种各样的功能和用途,让开发者能够更轻松地实现各种软件功能,包括字符串、数组、日期、数学、正则表达式、JSON、XML、文件操作、邮件、网络通信、数据库操作、密码、加密、图像处理、终端和进程管理、国际化与字符编码支持等等。

相比其他语言,需要自己编写很多代码去实现一个功能,或者依赖各种第三方库实现,PHP 就直接可以用内置函数实现。例如:

1、版本比较

要比较两个格式为x.y.z的版本号哪个更高,可以使用 version_compare

var_dump(version_compare('1.9.2', '1.10.0'));
var_dump(version_compare('1.10.0', '1.9.20'));

2、 通配符计算

var_dump(fnmatch('*.qq.com', 'qqcloud.com'));
var_dump(fnmatch('*.qq.com', 'im.qq.com'));

3、路径计算

获取一个文件路径字符串的目录、扩展名、文件名

$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n";

还有一个更有趣的扩展库,可以在 PHP 中直接调用 Python 中的函数,借此 PHP 也可以直接使用 PyTorch、TensorFlow 等 AI 库,运行 AI 大模型推理、训练,调用 transformers、Paddle NLP、modelscope 的 AI 能力

https://github.com/swoole/phpy

4、transformers

$transformers = PyCore::import('transformers');$os = PyCore::import('os');
$os->environ->__setitem__('https_proxy', getenv('https_proxy'));$distilled_student_sentiment_classifier = $transformers->pipeline(model: "lxyuan/distilbert-base-multilingual-cased-sentiments-student",top_k: null,
);$rs = $distilled_student_sentiment_classifier ("I love this movie and i would watch it again and again!");
var_dump(PyCore::scalar($rs));

5、modelscope

$pipeline = PyCore::import('modelscope.pipelines')->pipeline;
$Tasks = PyCore::import('modelscope.utils.constant')->Tasks;$pipe = $pipeline($Tasks->ocr_recognition, model: 'damo/cv_convnextTiny_ocr-recognition-general_damo');
$file = '/tmp/captcha.png';
file_put_contents($file, file_get_contents($captcha_url));
echo '识别结果:' . $pipe($file)['text'][0], PHP_EOL;

6、paddle NLP

$pprint = PyCore::import('pprint')->pprint;
$Taskflow = PyCore::import('paddlenlp')->Taskflow;$schema = new PyList(['时间', '选手', '赛事名称']);
$ie = $Taskflow('information_extraction', schema: $schema);
$pprint($ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!"));

7、 gradio client

作为 Gradio 客户端,调用 AI 模型的能力

$gradio_client = PyCore::import('gradio_client')->Client;
$client = $gradio_client("http://192.168.1.146:8088/");
$result = $client->predict("Hello!!", api_name: "/predict");
PyCore::print($result);

强大的字符串处理能力

各种常用的编程语言中 PHP 的字符串处理能力是最强大的,没有之一。PHP 除了是一个编程语言之外,还是一个模版语言。可以直接在模版中嵌入 PHP 表达式,使用起来甚至比 Vue 或 React JSX 模版更强大。

注意:缺点只是不能在浏览器中运行

例如下面的代码,可以模版中使用任意 PHP 语法,没有任何限制:

var json = <?= json_encode($data) ?>;<?php foreach($lines as $line): ?>document.write(<?=$line?>);
<?php endforeach; ?>

六、PHP的未来发展趋势

自从 PHP 基金会成立后,它每年可以收到上百万美金的捐助,PHP 语言官方开发团队的贡献也越来越稳定。很多编程语言的问题,相信可以在未来都能得以解决。

以 Laravel、Symfony 为代表的 PHP 框架现在也越来越成熟,逐渐拉近了与 Java Spring 框架的距离。而协程扩展项目 Swoole 在今年也推出了 v6.0 的计划,为 PHP 引入了多线程+协程的并发编程方案。

除此之外,PHP 社区中还诞生了很多有趣的新项目,例如:

● RoadRunner

● nativephp

● frankenphp

● phpy

结语

总而言之,在我看来,PHP 语言整体发展仍是稳中向前,在未来重新流行起来也是极有可能的。最后,我也分别给企业和开发者们一些可供参考的建议。

首先,对于企业选型 PHP 来说,在数千万甚至上亿用户活跃的大型 Web 系统中,PHP 技术栈可能会面临各种挑战和难题,使用 Java 或 Golang 可以容易获得更好的性能、工程规范、高并发和高可用性、更成熟的服务治理方案。但绝大部分项目不会有如此大规模的用户量级和复杂度,使用 PHP 技术栈的开发团队依然是比较有性价比的选择。研发团队可以以较少的人力资源投入保持更快的迭代速度,在当下开源节流的大趋势下尤为重要。

其次,对于 PHP 开发者们而言,第一,我们要学习 AI,使用 ChatGPT、Github Copliot 等工具提升自己的开发效率,了解 Transformers 等大模型的原理;第二,我们可以使用 Docker 镜像和 Docker Swarm 容器编排工具、Docker Compose 实现本机的容器启动管理;第三,我们也要掌握 Vue/React/ElementUI 等前端技术栈,要具备全栈开发的能力;最后,学习 C++/Golang/Java 等其他编程语言技术,不仅仅局限于 PHP 一种编程语言也是十分必要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/333003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】大学生竞赛管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、系统介绍 学生管理模块 教师管理模块 竞赛信息模块 竞赛报名模块 二、系统截图 三、核心代码 一、系统介绍 基于Vue.js和SpringBoot的大学生竞赛管理系统&#xff0c;分为管理后台和用户网页端&#xff0c;可以给管理员、学生和教师角色使用&#xff0c;包括学…

【Flutter】Dialog组件PageView组件

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月27日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

如何确保大模型 RAG 生成的信息是基于可靠的数据源?

在不断发展的人工智能 (AI) 领域中&#xff0c;检索增强生成 (RAG) 已成为一种强大的技术。 RAG 弥合了大型语言模型 (LLM) 与外部知识源之间的差距&#xff0c;使 AI 系统能够提供更全面和信息丰富的响应。然而&#xff0c;一个关键因素有时会缺失——透明性。 我们如何能够…

mysql中单表查询的成本

大家好。我们知道MySQL在执行一个查询时&#xff0c;经常会有多个执行方案&#xff0c;然后从中选取成本最低或者说代价最低的方案去真正的执行查询。今天我们来聊一聊单表查询的成本。 那么到底什么是成本呢&#xff1f;这里我们说的成本或者代价是由两方面组成的&#xff1a…

vscode插件-03 PHP

PHP Intelephense 如果php在远程计算机上&#xff0c;要把插件安装在远程&#xff0c;而不是本地。 这个插件&#xff0c;要求php版本大于7&#xff0c;且设置环境变量&#xff08;好像不一定要设置&#xff09;。 设置里面搜索php.executablePath&#xff0c;打开setting.js…

element ui 的el-input输入一个字后失去焦点,需重新点击输入框才能再次输入

解决方案&#xff1a; 我是form表单嵌套表格&#xff0c;里面的el-input输入框&#xff0c;输入第一个值的时候会突然失去焦点&#xff0c;需要再次点击输入框才能正常输入&#xff0c;原因是table的key值&#xff0c;需要改成正常的index即可&#xff0c;如果你是循环的&…

ESP32入门:1、VSCode+PlatformIO环境搭建

文章目录 背景安装vscode安装配置中文 安装Platform IO安装PIO 新建ESP32工程参考 背景 对于刚接触单片机的同学&#xff0c;使用vscodeplatformIO来学习ESP32是最方便快捷的&#xff0c;比IDF框架简单&#xff0c;且比arduino文件管理性能更好。但是platformIO安装较为麻烦&a…

gnocchi学习小结

背景 总结gnocchi 4.4版本gnocchi-metricd工作流程 入口 gnocchi.cli.metricd metricd stop after processing metric默认为0&#xff0c;调servicemanager run MetricdServiceManager __init__ 服务逻辑封装到MetricdServiceManager初始化中 主要由MetricProcessor, Met…

【方法】ZIP压缩文件的密码如何设置和取消?

ZIP是一种常见的压缩文件格式&#xff0c;今天来分享一下&#xff0c;ZIP压缩文件如何设置密码保护&#xff0c;以及如何取消密码&#xff0c;不清楚的小伙伴一起来看看吧&#xff01; 设置ZIP文件密码&#xff1a; 想要给ZIP压缩包设置密码&#xff0c;需要用到支持ZIP格式的…

香橙派 Kunpeng Pro使用教程:从零开始打造个人私密博客

一、引言 在这个日益互联的世界中&#xff0c;单板计算机已经成为创新和个性化解决方案的重要载体。而在单板计算机领域&#xff0c;香橙派 Kunpeng Pro凭借其强大的性能和灵活的应用潜力&#xff0c;正逐渐吸引着全球开发者和技术爱好者的目光。 作为一款集成了华为的鲲鹏处…

【AD21】文件的整理

当所有文件输出完成后&#xff0c;需要对不同的文件去做一个整理&#xff0c;方便后续工作的交接。 在项目工程文件夹下新建名称为BOM、SMT、PRJ、Gerber和DOC的文件夹。 BOM文件夹存放BOM表发给采购人员。SMT文件夹存放装配图文件和坐标文件发给贴片厂。PRJ文件夹存放工程文件…

AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研

目录 前言一、DB-GPT总体概述二、DB-GPT关键特性1、私域问答&数据处理&RAG2、多数据源&GBI3、多模型管理4、自动化微调5、Data-Driven Multi-Agents&Plugins6、隐私安全 三、服务器资源准备1、创建实例2、打开jupyterLab 四、DB-GPT启动1、激活 conda 环境2、切…

2024年03月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 期末考试结束了,全班的语文成绩都储存在列表score中,班主任老师请小明找到全班最高分,小明准备用Python来完成,以下哪个选项,可以获取最高分呢?( ) A:min(score) B:max(score) C:sco…

夏日将至,给手机装个“液冷”降温可行吗?

夏天出门在外&#xff0c;手机总是更容易发热&#xff0c;尤其是顶着大太阳用手机的时候&#xff0c;更是考验手机的散热能力。如果你也是一个对手机体验有追求的人&#xff0c;比较在意手机的温度&#xff0c;那么可以考虑入手一个微泵液冷手机壳。 【什么是微泵液冷壳&#…

【Spring Security + OAuth2】OAuth2

Spring Security OAuth2 第一章 Spring Security 快速入门 第二章 Spring Security 自定义配置 第三章 Spring Security 前后端分离配置 第四章 Spring Security 身份认证 第五章 Spring Security 授权 第六章 OAuth2 文章目录 Spring Security OAuth21、OAuth2简介1.1、OAu…

数据结构(三)循环链表

文章目录 一、循环链表&#xff08;一&#xff09;概念&#xff08;二&#xff09;示意图&#xff08;三&#xff09;操作1. 创建循环链表&#xff08;1&#xff09;函数声明&#xff08;2&#xff09;注意点&#xff08;3&#xff09;代码实现 2. 插入&#xff08;头插&#x…

vue3 3D炫酷模型banner图

项目场景&#xff1a; 在官网首页展示3D炫酷动画模型&#xff0c;让整个模型都展示出来。 问题描述 主要是3D动画的展示效果&#xff0c;有些3d模型网站可以从51建模网站中获取。 案例代码&#xff1a; <script setup> import * as imgs from ../units/img import { o…

如果查看svn的账号和密码

一、找到svn存放目录&#xff08;本地默认存放SVN用户信息的目录为&#xff1a;C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple&#xff09;每个人的电脑环境不一样&#xff0c;因人而异。 如果找不到直接搜索svn.simple 二、下载密码查看工具 链接: 百…

基础—SQL—DDL—建表、查表、修改表以及总结

一、DDL—表—创建表与数据类型的设定 &#xff08;1&#xff09;要求 根据需求创建表(设计合理的数据类型、长度) 设计一张员工信息表&#xff0c;要求如下: 1、编号&#xff08;纯数字) 2、员工工号(字符串类型&#xff0c;长度不超过10位) 3、员工姓名&#xff08;字符串类…

初学迁移学习的理解

1.迁移学习&#xff08;Transfer Learning&#xff09;是什么&#xff1f; 简而言之&#xff0c;迁移学习(Transfer Learning)是一种机器学习方法&#xff0c;就是把为任务 A 开发的模型作为初始点&#xff0c;重新使用在为任务 B 开发模型的过程中。 迁移学习是通过从已学习…