标签 AI 下的文章

1 Linux 内核直呼 666~

Linux 6.6.6 版本发布了,这个版本只是处理了另一个令人头疼的 WiFi 回归问题:IWD 无线守护进程在关机时出现死锁,用户空间的网络管理器也出现相关问题。与几天前发布的 Linux 6.6.5 相比,它唯一的改动就是撤销了一个 WiFi 补丁。该补丁被从 Linux 6.7 反向移植到了 6.6,在 Linux 6.7 Git 内核中不会出现这个问题,因为 6.6 缺少了 6.7 Git 内核中的一个关键元素。而就在之前的周末,由于从 Linux 6.5 回传的补丁存在问题,导致 EXT4 数据损坏,进而影响到了使用 Linux 6.1 LTS 点版本的 Debian 12.3 延迟发布计划。

(插图:DA/3f9b3a5c-c228-4d10-81d7-4be2ee0a4cb4)

消息来源:Phoronix
老王点评:Linux 内核越来越复杂了,回传的补丁经常难以照顾周全。所以,知道做 LTS 支持有多难了吧。

2 中国发布新一代超算“天河星逸”

据报道,“天河星逸”系统以应用为中心,采用国产先进计算架构、高性能多核处理器、高速互连网络、大规模存储等关键技术构建,在通用 CPU 计算能力、网络能力、存储能力以及应用服务能力等多方面较“天河二号”实现倍增。天河二号系统从 2013 年开始一直到 2015 年底 6 次位居世界 500 强榜首,但自从中国不再披露超算基准数据,一直没有关于天河三号的官方公开细节,也没有消息可以确认 “天河星逸” 是否就是天河三号。

(插图:DA/0a9772cd-cb5b-4e26-be85-06f6cb99e743)

消息来源:广州外事
老王点评:中国超算现在已经是隐藏的实力了。

3 英伟达今年投资了二十多家人工智能公司

这些被投资的公司,其中既有估值数十亿美元的大型新人工智能平台,也有将人工智能应用于医疗保健或能源等行业的小型初创公司。根据追踪风险投资的 Dealroom 估算,英伟达在 2023 年参与了 35 笔交易,几乎是去年的六倍。

(插图:DA/01d805e5-98bb-4f75-8391-4dc2748a267f)

消息来源:金融时报
老王点评:英伟达是直接用显卡投资的吧。

1 Go 程序员大多使用 Linux 或 MacOS

Go 团队在八月份对 Go 开发者进行了一项调查,调查结果显示 90% 的受访者表示他们在上一年使用 Go 时感到满意。他们在 Linux(63%)和 macOS(58%)系统上使用 Go 语言,但新的 Go 程序员更倾向于使用 Windows。虽然 x86 兼容系统仍占开发的大多数(89%),但 ARM64 现在也被大多数受访者使用(56%),这种采用似乎部分是由苹果芯片推动的。受访者最喜欢的代码编辑器是 VS Code(44%)、GoLand(31%)、Vim/Neovim(16%)和 Emacs(3%)。3/4 的受访者在使用云服务的 Go 软件上工作,这表明开发人员认为 Go 是一种适用于现代云开发的语言。

(插图:DA/3cf4022f-9a7a-460b-8be4-741c10daa2f7)

消息来源:Go Dev
老王点评:使用 Linux 的比 macOS 和 Windows 的要多,但是为什么使用 VS Code 的最多呢。

2 欧盟就《人工智能法》的推出达成共识

来自欧洲议会及其 27 个成员国的谈判代表克服了巨大分歧,签署了《人工智能法》的临时政治协议。争议点主要是生成式人工智能和警方使用面部识别监控等方面。这一结果是在上周举行的马拉松式闭门会谈后达成的,其中一次会谈持续了 22 个小时,“欧盟成为第一个为人工智能的使用制定明确规则的大陆”。关于最终法律的具体内容,官员们提供的细节很少,该法律最早要到 2025 年才能生效,预计将为进一步谈判留出余地,以制定出更细的条款。

(插图:DA/04fef112-325d-43c4-a6b1-1731cd9866b8)

消息来源:AP News
老王点评:就怕立法追不上 AI 的发展速度。

3 让网速感觉更快的新标准 L4S

这项名为 L4S 的新互联网标准已于今年 1 月定稿并发布,它可以大大减少我们等待网页或流媒体加载的时间,并减少视频通话中的故障。它还有助于改变我们对网速的看法,并帮助开发人员创建在当前互联网现实情况下无法实现的应用程序。L4S 是 低延迟、低损耗、可扩展吞吐量 Low Latency, Low Loss, Scalable Throughput 的缩写,其目标是通过减少排队的需要,确保数据包减少不必要的排队等待,花费尽可能少的时间。在某些情况下,数据包缓冲延迟通常为数百毫秒甚至数千毫秒,而 L4S 则可以将延迟时间降至几毫秒。更好的是,它与目前使用的拥塞控制系统广泛兼容。虽然 L4S 还没有被广泛使用,但苹果、谷歌、英伟达、爱立信、德国电信等公司都已经对此表示了极大兴趣。

(插图:DA/cdd2468a-758a-487e-b5bd-b908700ce05e)

消息来源:The Verge
老王点评:为什么这么好的协议改进,我居然之前都没听说过。

1 Linus Torvalds 谈 Rust 和 AI 编程

在 Linux 基金会的日本开源峰会上,Linus Torvalds 在访谈中谈到了在 Linux 内核中使用 Rust 语言的问题。Torvalds 说:“它一直在增长,但内核还没有任何部分真正依赖 Rust。……Rust 还没有真正显示出它是下一个伟大的事物。……要让它成为内核的重要组成部分,还需要数年时间。但它肯定会成为内核的一部分。”我们都知道 Torvalds 对 Rust 进入内核大开绿灯,他认为 “Rust 是技术上有意义的事情之一,……更重要的是,作为内核和开发人员,我们不能停滞不前”。有趣的是,还一个原因是“有一位(Rust)维护者明显比大多数维护者年轻得多。”

他也谈到了对 AI 编程的看法,当被问到是否认为会看到提交由 AI 编写的代码时,他说:“我相信这一定会发生。而且很可能已经发生了,也许规模较小,人们更多使用它来帮助编写代码。”与许多人不同,Torvalds 并不太担心人工智能,“很明显,自动化一直在帮助人们编写代码。这根本不是什么新鲜事。”而对于 AI 幻觉问题,他说:“我每天都能看到没有 AI 而出现的 bug。所以我才不那么担心。我认为,我们自己犯错误的能力还不错。”

(插图:DA/4794e383-cb3e-421e-876b-73720b421b57)

消息来源:ZDNet
老王点评:Linux 内核有这样一位自信而开放的领袖,确实幸事。

2 Meta 用 11 亿张用户照片训练其人工智能图像生成器

Meta 推出了一项独立的文本到图像人工智能生成器服务 Imagine,该服务建立在其名为 Emu 的人工智能模型上,这个模型是在 11 亿张 Facebook 和 Instagram 用户照片上训练出来的。Instagram 上每天上传的照片数以亿计,训练的照片只占了很小一部分。Meta 称排除了私人信息和未在其服务上公开分享的图片。不过,尽管 Meta 公司大力支持开源人工智能,但 Emu 和 Imagine 目前都还没有开源。

(插图:DA/c9b0a5ca-2f10-4467-bdac-0af3a1eba5cb)

消息来源:Venture Beat
老王点评:所以,公开上传的图片其实就是很好的 AI 饲料。

3 微软 DHCP 服务器软件被滥用来欺骗 DNS 记录

据 Akamai 安全研究人员称,只需对运行微软 DHCP 服务器默认配置的服务器发动攻击,就可能会让攻击者欺骗 DNS 记录、入侵活动目录并窃取其存储的所有机密。虽然目前还没有看到服务器受到这种类型的攻击,但在 Akamai 监控的数千个网络中,有 40% 的网络正在使用带有漏洞的默认 DHCP 配置,因此大量的企业都有可能受到攻击。微软 DHCP 服务器默认启用了 DHCP DNS 动态更新,这就是问题所在,除了创建不存在的 DNS 记录外,无需认证的攻击者还可以使用 DHCP 服务器覆盖现有数据。不过,微软接到报告后表示不打算采取动作,而 Akamai 将在不久的将来发布实现这些攻击的代码。

(插图:DA/e8fb1f7a-b4c8-41c2-afd4-e4bb55f8e2ce)

消息来源:The Register
老王点评:默认配置不安全难道不该修复,或者至少发个安全公告吗?

1 人工智能聊天机器人被用来越狱其它人工智能

现代聊天机器人有能力通过伪装特定性格或像虚构人物一样行事来扮演角色。新研究利用了这一能力,要求一个特定的人工智能聊天机器人充当研究助手。然后,研究人员指示这个助手帮助开发可以 “越狱” 其他聊天机器人的提示语。事实证明,研究助理聊天机器人的自动攻击技术在 42.5% 的时间内成功地攻击了 GPT-4,对 Claude 2 的攻击有 61% 的成功率,对开源聊天机器人 Vicuna 的攻击有 35.9% 的成功率。研究人员称,这种助理聊天机器人提升了 25 倍的越狱效率。

(插图:DA/43112e8c-6b66-45f5-b877-a0dd29ae9afa)

消息来源:Scientific American
老王点评:“黑化”的 AI 果然会影响更多 AI。

2 几乎所有密码管理器在安卓上会泄露凭证

当安卓应用程序在 WebView 中加载登录页面时,密码管理器被调用来自动填写凭证时,理想情况下,它应该只自动填写已加载的谷歌或 Facebook 等页面。但研究人员发现,自动填写操作可能会意外地将凭证暴露给底层应用程序。这个漏洞的影响非常大,尤其是在应用程序是恶意程序的情况下。几乎所有的密码管理器,包括 1Password、LastPass、Keeper 和 Enpass,在最新的安卓设备上都存在这个名为 “AutoSpill” 的漏洞。甚至,即使禁用了 JavaScript 注入,大多数密码管理器也容易发生凭据泄漏。该团队还在调查该漏洞是否可以在 iOS 上复制。

(插图:DA/d05324b2-2021-40ba-8d03-023261eea4c0)

消息来源:Tech Crunch
老王点评:这锅不能是 WebView 一个人背,这些密码管理器也要背。

3 苹果公司发布了可以发挥苹果芯片特性的机器学习框架

MLX 是一个类似于 NumPy 的阵列框架,旨在苹果处理器上实现高效灵活的机器学习。其目的是为使用苹果硬件的研究人员简化 ML 模型的训练和部署。这不是一个面向消费者的工具;它为开发人员提供了一个构建 ML 模型的强大环境。MLX 增加了对统一内存模型的支持,这意味着数组位于共享内存中,可以在任何支持的设备类型上执行操作,而无需执行数据拷贝。除了 Python API,MLX 还有一个功能齐全的 C++ API。

(插图:DA/c3e61e5a-8725-4938-b44e-075edff5edd1)

消息来源:Computer World
老王点评:看来苹果也在 AI 方面做了一些工作。

在本系列的 上一篇文章 中,我们回顾了人工智能的历史,然后详细地讨论了矩阵。在本系列的第三篇文章中,我们将了解更多的矩阵操作,同时再介绍几个人工智能 Python 库。

在进入主题之前,我们先讨论几个人工智能和机器学习中常用的重要术语。 人工神经网络 artificial neural network (通常简称为 神经网络 neural network ,NN)是机器学习和深度学习的核心。顾名思义,它是受人脑的生物神经网络启发而设计的计算模型。本文中我没有插入神经网络模型的图片,因为在互联网上很容易找到它们。我相信任何对人工智能感兴趣的人应该都见过它们,左边是输入层,中间是一个或多个隐藏层,右边是输出层。各层之间的边上的 权重 weight 会随着训练不断变化。它是机器学习和深度学习应用成功的关键。

监督学习 supervised learning 无监督学习 unsupervised learning 是两个重要的机器学习模型。从长远来看,任何立志于从事人工智能或机器学习领域工作的人都需要学习它们,并了解实现它们的各种技术。这里我认为有必要简单说明两种模型之间的区别了。假设有两个人分别叫 A 和 B,他们要把苹果和橘子分成两组。他们从未见过苹果或橘子。他们都通过 100 张苹果和橘子的图片来学习这两种水果的特征(这个过程称为模型的训练)。不过 A 还有照片中哪些是苹果哪些是橘子的额外信息(这个额外信息称为标签)。这里 A 就像是一个监督学习模型,B 就像是无监督学习模型。你认为在是识别苹果和橘子的任务上,谁的效果更好呢?大多数人可能会认为 A 的效果更好。但是根据机器学习的理论,情况并非总是如此。如果这 100 张照片中只有 5 张是苹果,其它都是橘子呢?那么 A 可能根本就不熟悉苹果的特征。或者如果部分标签是错误的呢?在这些情况下,B 的表现可能比 A 更好。

在实际的机器学习应用中会发生这样的情况吗?是的!训练模型用的数据集可能是不充分的或者不完整的。这是两种模型都仍然在人工智能和机器学习领域蓬勃发展的众多原因之一。在后续文章中,我们将更正式地讨论它们。下面我们开始学习使用 JupyterLab,它是一个用于开发人工智能程序的强大工具。

JupyterLab 入门

在本系列的前几篇文章中,为了简单起见,我们一直使用 Linux 终端运行 Python 代码。现在要介绍另一个强大的人工智能工具——JupyterLab。在本系列的第一篇文章中,我们对比了几个候选项,最终决定使用 JupyterLab。它比 Jupyter Notebook 功能更强大,为我们预装了许多库和包,并且易于团队协作。还有一些其它原因,我们将在后续适时探讨它们。

在本系列的第一篇文章中,我们已经学习了如何安装 JupyterLab。假设你已经按文中的步骤安装好了 JupyterLab,使用 jupyter labjupyter-lab 命令在会默认浏览器(如 Mozilla Firefox、谷歌 Chrome 等)中打开 JupyterLab。(LCTT 译注:没有安装 JupyterLab 也不要紧,你可以先 在线试用 JupyterLab)图 1 是在浏览器中打开的 JupyterLab 启动器的局部截图。JupyterLab 使用一个名为 IPython(交互式 Python)的 Python 控制台。注意,IPython 其实可以独立使用,在 Linux 终端运行 ipython 命令就可以启动它。

图 1:JupyterLab 启动器

现阶段我们使用 JupyterLab 中的 Jupyter Notebook 功能。点击图 1 中用绿框标记的按钮,打开 Jupyter Notebook。这时可能会要求你选择内核。如果你按照本系列第一篇的步骤安装 JupyterLab,那么唯一的可选项就是 Python 3(ipykernel)。请注意,你还可以在 JupyterLab 中安装其它编程语言的内核,比如 C++、R、MATLAB、Julia 等。事实上 Jupyter 的内核相当丰富,你可以访问 Jupyter 内核清单 了解更多信息。

图 2:Jupyter Notebook 窗口

下面我们快速了解一下 Jupyter Notebook 的使用。图 2 显示的是一个在浏览器中打开的 Jupyter Notebook 窗口。从浏览器标签页的标题可以看出,Jupyter Notebook 打开的文件的扩展名是 .ipynb

在图 2 处可以看到有三个选项,它们表示 Jupyter Notebook 中可以使用的三种类型的单元。“Code”(绿色框) 表示代码单元,它是用来执行代码的。“Markdown” 单元可用于输入说明性的文本。如果你是一名计算机培训师,可以用代码单元和 Markdown 单元来创建交互式代码和解释性文本,然后分享给你的学员。“Raw”(红色框)表示原始数据单元,其中的内容不会被格式化或转换。

和在终端中不同,在 Jupyter Notebook 中你可以编辑并重新运行代码,这在处理简单的拼写错误时特别方便。图 3 是在 Jupyter Notebook 中执行 Python 代码的截图。

图 3:在 Jupyter Notebook 中执行 Python 代码

要在执行代码单元中的代码,先选中该单元格,然后点击蓝框标记的按钮。图 3 中用红框标记的是 Markdown 单元,用绿框标记的是代码单元,用黄框标记的执行代码的输出。在这个例子中,Python 代码输出的是 π 的值。

前面提到,JupyterLab 默认安装了许多库和包,我们不用自己安装了。你可以使用 import 命令将这些库导入到代码中。使用 !pip freeze 命令可以列出 JupyterLab 中目前可用的所有库和包。如果有库或包没有安装,大多数情况下都可以通过 pip install <全小写的库或者包的名称> 来安装它们。例如安装 TensorFlow 的命令是 pip install tensorflow。如果后面有库的安装命令不遵循这个格式,我会进行特别说明。随着本系列的继续,我们还会看到 Jupyter Notebook 和 JupyterLab 更多强大的功能。

复杂的矩阵运算

通过下面的代码,我们来了解一些更复杂的矩阵运算或操作。为了节省空间,我没有展示代码的输出。

import numpy as np
A = np.arr ay([[1,2,3],[4,5,6],[7,8,88]])
B = np.arr ay([[1,2,3],[4,5,6],[4,5,6]])
print(A.T)
print(A.T.T)
print(np.trace(A))
print(np.linalg.det(A))
C = np.linalg.inv(A)
print(C)
print(A@C)

下面我逐行来解释这些代码:

  1. 导入 NumPy 包。
  2. 创建矩阵 A
  3. 创建矩阵 B
  4. 打印矩阵 A 转置 transpose 。通过比较矩阵 AA 的转置,你用该可以大致理解转置操作到底做了什么。
  5. 打印 A 的转置的转置。可以看到它和矩阵 A 是相同的。这又提示了转置操作的含义。
  6. 打印矩阵 A trace 。迹是矩阵的对角线(也称为主对角线)元素的和。矩阵 A 的主对角线元素是 1、5 和 88,所以输出的值是 94。
  7. 打印 A 行列式 determinant 。当执行代码的结果是 -237.00000000000009(在你的电脑中可能略有区别)。因为行列式不为 0,所以称 A 为 非奇异矩阵 non-singular matrix
  8. 将矩阵 A inverse 保存到矩阵 C 中。
  9. 打印矩阵 C
  10. 打印矩阵 AC 的乘积。仔细观察,你会看到乘积是一个 单位矩阵 identity matrix ,也就是一个所有对角线元素都为 1,所有其它元素都为 0 的矩阵。请注意,输出中打印出的不是精确的 1 和 0。在我得到的答案中,有像 -3.81639165e-17 这样的数字。这是浮点数的科学记数法,表示 -3.81639165 × 10 -17, 即小数的 -0.0000000000000000381639165,它非常接近于零。同样输出中的其它数字也会有这种情况。我强烈建议你了解计算机是怎样表示浮点数的,这对你会有很大帮助。

根据第一篇文章中的惯例,可以将代码分成基本 Python 代码和人工智能代码。在这个例子中,除了第 1 行和第 9 行之外的所有代码行都可以被看作是人工智能代码。

现在将第 4 行到第 10 行的操作应用到矩阵 B 上。从第 4 行到第 6 行代码的输出没有什么特别之处。然而运行第 7 行时,矩阵 B 的行列式为 0,因此它被称为 奇异矩阵 singular matrix 。运行第 8 行代码会给产生一个错误,因为只有非奇异矩阵才存在逆矩阵。你可以尝试对本系列前一篇文章中的 8 个矩阵都应用相同的操作。通过观察输出,你会发现矩阵的行列式和求逆运算只适用于方阵。

方阵就是行数和列数相等的矩阵。在上面的例子中我只是展示了对矩阵执行各种操作,并没有解释它们背后的理论。如果你不知道或忘记了矩阵的转置、逆、行列式等知识的话,你最好自己学习它们。同时你也应该了解一下不同类型的矩阵,比如单位矩阵、对角矩阵、三角矩阵、对称矩阵、斜对称矩阵。维基百科上的相关文章是不错的入门。

现在让我们来学习 矩阵分解 matrix decomposition ,它是更复杂的矩阵操作。矩阵分解与整数的因子分解类似,就是把一个矩阵被写成其它矩阵的乘积。下面我通过图 4 中整数分解的例子来解释矩阵分解的必要性。代码单元开头的 %time 是 Jupyter Notebook 的 魔法命令 magic command ,它会打印代码运行所花费的时间。** 是 Python 的幂运算符。基本的代数知识告诉我们,变量 a 和 b 的值都等于 (6869 x 7873) 100。但图 4 显示计算变量 b 的速度要快得多。事实上,随着底数和指数的增大,执行时间的减少会越来越明显。

图 4:Python 代码的执行耗时

在几乎所有的矩阵分解技术技术中,原始矩阵都会被写成更稀疏的矩阵的乘积。 稀疏矩阵 sparse matrix 是指有很多元素值为零的矩阵。在分解后,我们可以处理稀疏矩阵,而不是原始的具有大量非零元素的 密集矩阵 dense matrix 。在本文中将介绍三种矩阵分解技术——LUP 分解、 特征分解 eigen decomposition 奇异值分解 singular value decomposition (SVD)。

为了执行矩阵分解,我们需要另一个强大的 Python 库,SciPy。SciPy 是基于 NumPy 库的科学计算库,它提供了线性代数、积分、微分、优化等方面的函数。首先,让我们讨论 LUP 分解。任何方阵都能进行 LUP 分解。LUP 分解有一种变体,称为 LU 分解。但并不是所有方阵都能 LU 分解。因此这里我们只讨论 LUP 分解。

在 LUP 分解中,矩阵 A 被写成三个矩阵 L、U 和 P 的乘积。其中 L 是一个 下三角矩阵 lower triangular matrix ,它是主对角线以上的所有元素都为零的方阵。U 是一个 上三角矩阵 upper triangular matrix ,它是主对角线以下所有元素为零的方阵。P 是一个 排列矩阵 permutation matrix 。这是一个方阵,它的每一行和每一列中都有一个元素为 1,其它元素的值都是 0。

现在看下面的 LUP 分解的代码。

import numpy as np
import scipy as sp
A=np.array([[11,22,33],[44,55,66],[77,88,888]])
P, L, U = sp.linalg.lu(A)
print(P)
print(L)
print(U)
print(P@L@U)

图 5 显示了代码的输出。第 1 行和第 2 行导入 NumPy 和 SciPy 包。在第 3 行创建矩阵 A。请记住,我们在本节中会一直使用矩阵 A。第 4 行将矩阵 A 分解为三个矩阵——PLU。第 5 行到第 7 行打印矩阵 PLU。从图 5 中可以清楚地看出,P 是一个置换矩阵,L 是一个下三角矩阵,U 是一个上三角矩阵。最后在第 8 行将这三个矩阵相乘并打印乘积矩阵。从图 5 可以看到乘积矩阵 P@L@U 等于原始矩阵 A,满足矩阵分解的性质。此外,图 5 也验证了矩阵 LUP 比矩阵 A 更稀疏。

图 5:用 SciPy 进行 LUP 分解

下面我们讨论特征分解,它是将一个方阵是用它的 特征值 eigenvalue 特征向量 eigenvector 来表示。用 Python 计算特征值和特征向量很容易。关于特征值和特征向量的理论解释超出了本文的讨论范围,如果你不知道它们是什么,我建议你通过维基百科等先了解它们,以便对正在执行的操作有一个清晰的概念。图 6 中是特征分解的代码。

图6:用 SciPy 进行特征分解

在图 6 中,第 1 行计算特征值和特征向量。第 2 行和第 3 行输出它们。注意,使用 NumPy 也能获得类似的效果,Lambda, Q = np.linalg.eig(A)。这也告诉我们 NumPy 和 SciPy 的功能之间有一些重叠。第 4 行重建了原始矩阵 A。第 4 行中的代码片段 np.diag(Lambda) 是将特征值转换为对角矩阵(记为 Λ)。对角矩阵是主对角线以外的所有元素都为 0 的矩阵。第 4 行的代码片段 sp.linalg.inv(Q) 是求 Q 的逆矩阵(记为 Q -1)。最后,将三个矩阵 QΛQ -1 相乘得到原始矩阵 A。也就是在特征分解中 A=QΛQ -1

图 6 还显示了执行的代码的输出。红框标记的是特征值,用绿框标记的是特征向量,重构的矩阵 A 用蓝框标记。你可能会感到奇怪,输出中像 11.+0.j 这样的数字是什么呢?其中的 j 是虚数单位。11.+0.j 其实就是 11.0+0.0j,即整数 11 的复数形式。

现在让我们来看奇异值分解(SVD),它是特征分解的推广。图 7 显示了 SVD 的代码和输出。第 1 行将矩阵 A 分解为三个矩阵 USV。第 2 行中的代码片段 np.diag(S)S 转换为对角矩阵。最后,将这三个矩阵相乘重建原始矩阵 A。奇异值分解的优点是它可以对角化非方阵。但非方阵的奇异值分解的代码稍微复杂一些,我们暂时不在这里讨论它。

图 7:用 SciPy 进行 奇异值分解

其它人工智能和机器学习的 Python 库

当谈到人工智能时,普通人最先想到的场景可能就是电影《终结者》里机器人通过视觉识别一个人。 计算机视觉 computer vision 是人工智能和机器学习技术被应用得最广泛的领域之一。下面我将介绍两个计算机视觉相关的库:OpenCV 和 Matplotlib。OpenCV 是一个主要用于实时计算机视觉的库,它由 C 和 C++ 开发。C++ 是 OpenCV 的主要接口,它通过 OpenCV-Python 向用户提供 Python 接口。Matplotlib 是基于 Python 的绘图库。我曾在 OSFY 上的一篇早期 文章 中详细介绍了 Matplotlib 的使用。

前面我一直在强调矩阵的重要性,现在我用一个实际的例子来加以说明。图 8 展示了在 Jupyter Notebook 中使用 Matplotlib 读取和显示图像的代码和输出。如果你没有安装 Matplotlib,使用 pip install matplotlib 命令安装 Matplotlib。

图 8:用 Matplotlib 读取和显示图像

在图 8 中,第 1 行和第 2 行从 Matplotlib 导入了一些函数。注意你可以从库中导入单个函数或包,而不用导入整个库。这两行是基本的 Python 代码。第 3 行从我的计算机中读取标题为 OSFY-Logo.jpg 的图像。我从 OSFY 门户网站的首页下载了这张图片。此图像高 80 像素,宽 270 像素。第 4 行和第 5 行在 Jupyter Notebook 窗口中显示图像。请注意图像下方用红框标记的两行代码,它的输出告诉我们变量 image 实际上是一个 NumPy 数组。具体来说,它是一个 80 x 270 x 3 的三维数组。

数组尺寸中的 80 x 270 就是图片的大小,这一点很容易理解。但是第三维度表示什么呢?这是因计算机像通常用 RGB 颜色模型来存储的彩色图。它有三层,分别用于表示红绿蓝三种原色。我相信你还记得学生时代的实验,把原色混合成不同的颜色。例如,红色和绿色混合在一起会得到黄色。在 RGB 模型中,每种颜色的亮度用 0 到 255 的数字表示。0 表示最暗,255 表示最亮。因此值为 (255,255,255) 的像素表示纯白色。

现在,执行代码 print(image), Jupyter Notebook 会将整个数组的一部分部分打印出来。你可以看到数组的开头有许多 255。这是什么原因呢?如果你仔细看 OSFY 的图标会发现,图标的边缘有很多白色区域,因此一开始就印了很多 255。顺便说一句,你还可以了解一下其他颜色模型,如 CMY、CMYK、HSV 等。

现在我们反过来从一个数组创建一幅图像。首先看图 9 中所示的代码。它展示了如何生成两个 3 x 3 的随机矩阵,它的元素是 0 到 255 之间的随机值。注意,虽然相同的代码执行了两次,但生成的结果是不同的。这是通过调用 NumPy 的伪随机数生成器函数 randint 实现的。实际上,我中彩票的几率都比这两个矩阵完全相等的几率大得多。

图 8:两个随机矩阵

接下来我们要生成一个形状为 512 x 512 x 3 的三维数组,然后将它转换为图像。为此我们将用到 OpenCV。注意,安装 OpenCV 命令是 pip install opencv-python。看下面的代码:

import cv2
img = np.random.randint(0, 256, size=(512, 512, 3))
cv2.imwrite('img.jpg', img)

第 1 行导入库 OpenCV。注意导入语句是 import cv2,这与大多数其他包的导入不同。第 3 行将矩阵 img 转换为名为 img.jpg 的图像。图 10 显示了由 OpenCV 生成的图像。在系统中运行这段代码,将图像将被保存在 Jupyter Notebook 的同一目录下。如果你查看这张图片的属性,你会看到它的高度是 512 像素,宽度是 512 像素。通过这些例子,很容易看出,任何处理计算机视觉任务的人工智能和机器学习程序使用了大量的数组、向量、矩阵以及线性代数中的思想。这也是本系列用大量篇幅介绍数组、向量和矩阵的原因。

图 10:OpenCV 生成的图像

最后,考虑下面显示的代码。image.jpg 输出图像会是什么样子?我给你两个提示。函数 zeros 在第 4 行和第 5 行创建了两个 512 x 512 的数组,其中绿色和蓝色填充了零。第 7 行到第 9 行用来自数组 redgreenblue 的值填充三维数组 img1

import numpy as np
import cv2
red = np.random.randint(0, 256, size=(512, 512))
green = np.zeros([512, 512], dtype=np.uint8)
blue = np.zeros([512, 512], dtype=np.uint8)
img1 = np.zeros([512,512,3], dtype=np.uint8)
img1[:,:,0] = blue
img1[:,:,1] = green
img1[:,:,2] = red
cv2.imwrite(‘image.jpg’, img1)

本期的内容就到此结束了。在下一篇文章中,我们将开始简单地学习 张量 tensor ,然后安装和使用 TensorFlow。TensorFlow 是人工智能和机器学习领域的重要参与者。之后,我们将暂时放下矩阵、向量和线性代数,开始学习概率论。概率论跟线性代数一样是人工智能的重要基石。

(题图:MJ/ec8e9a02-ae13-4924-b6cb-74ef96ab8af9)


via: https://www.opensourceforu.com/2023/07/ai-a-few-more-useful-python-libraries/

作者:Deepu Benson 选题:lujun9972 译者:toknow-gh 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

1 巴西城市颁布由 ChatGPT 编写的法令

巴西南部第二大城市 阿雷格里港 Porto Alegre 于 10 月份通过了一项法令,旨在防止该市在水表被盗时向纳税人收取更换水表的费用。但议员们不知道的是,该提案是议员 拉米罗·罗萨里奥 Ramiro Rosário 通过 ChatGPT 拟定的,他仅仅输入了 49 个字的提示语,在几秒钟内就返回了完整的提案草案,还包括理由说明。该提案被提交给了议会中的 35 位同僚,没有做任何改动就一致通过了该提案。对提案来源保密是有意为之,罗萨里奥说,“如果我在此之前透露了这一消息,该提案肯定不会被付诸表决。”他并不是世界上第一个测试 ChatGPT 能力的立法者。其他一些人也在更有限的范围内进行了测试,或取得了不太成功的结果。

消息来源:AP News
老王点评:其实不必惊讶,AI 以后就是和办公软件、拼写检查工具一样的工具。

2 研究人员量化生成人工智能图像的碳足迹

Hugging Face 和卡内基梅隆大学的研究人员发现,使用人工智能生成图像的碳足迹相当于给智能手机充电,生成文本所消耗的能量相当于智能手机充电至约 16%。他们使用 30 个数据集对 88 种不同的模型进行了实验。研究结果表明,最耗能的任务是那些要求人工智能模型生成新内容的任务,无论是文本生成、摘要、图像标题还是图像生成。图像生成产生的排放量最高,而文本分类则被列为能耗最低的任务。

消息来源:Engadget
老王点评:如果从节省的时间和成本来看,降低的碳足迹更多。

3 Servo 浏览器引擎继续走嵌入式友好之路

Servo 项目现在是欧洲 Linux 基金会的一项工作,他们在持续改进 Servo 的嵌入可能性。Servo 项目正在加快构建速度、改进离屏渲染、支持多个网页视图以及其他工作。如果 Servo 能够成为一个适合嵌入式环境的网络引擎,这将是 Servo 取得成功和发展的主要领域之一。

消息来源:Phoronix
老王点评:确实,在目前浏览器市场几乎被 Chromium 引擎统治的情况下,面向独特的领域发展更好。