游乐游手机版
首页/AI教程/文章详情

Python AI入门从Hello World到图像分类教程

时间:2026-06-05 16:45
Python AI入门:从Hello World到图像分类 从Hello World起步探索一项新技术,几乎是每位程序员约定俗成的仪式。那么在Python AI入门过程中,我们的Hello World究竟是什么样子?先别急着敲“print”,这里所说的Hello World,指的是借助线性回归让机器

Python AI入门:从Hello World到图像分类

从Hello World起步探索一项新技术,几乎是每位程序员约定俗成的仪式。那么在Python AI入门过程中,我们的Hello World究竟是什么样子?先别急着敲“print”,这里所说的Hello World,指的是借助线性回归让机器学会“绘制一条线”的核心基本功。继续往下阅读,你会发现整个过程远比想象中更直观易懂。

一、Python AI的Hello World

1.1 环境搭建

首先配置好开发环境。下面这几行命令就能顺利安装PyTorch及常用工具包:

Python AI入门:从Hello World到图像分类

# 安装PyTorch
pip install torch torchvision
# 安装其他依赖
pip install numpy matplotlib

1.2 第一个AI程序

接下来,从最基础的线性回归入手。它的任务是根据一组带有噪声的数据点,找到最贴合的那条直线:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

# 生成训练数据
x = torch.linspace(0, 10, 100).unsqueeze(1)
y = 2 * x + 1 + torch.randn(100, 1) * 0.5

# 定义模型
class LinearModel(nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()
        self.linear = nn.Linear(1, 1)
    def forward(self, x):
        return self.linear(x)

# 创建模型实例
model = LinearModel()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练模型
epochs = 100
for epoch in range(epochs):
    # 前向传播
    outputs = model(x)
    # 计算损失
    loss = criterion(outputs, y)
    # 反向传播
    optimizer.zero_grad()
    loss.backward()
    # 更新参数
    optimizer.step()
    if (epoch + 1) % 10 == 0:
        print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')

# 测试模型
with torch.no_grad():
    predicted = model(x)

# 可视化结果
plt.scatter(x.numpy(), y.numpy(), label='Original data')
plt.plot(x.numpy(), predicted.numpy(), 'r-', label='Fitted line')
plt.legend()
plt.show()
print("Hello World! AI模型训练完成")

运行完这段代码,你会观察到原始数据点与模型拟合的直线紧密贴合——这正是机器“学习”的真实体现。

二、从线性回归到神经网络

2.1 神经网络基础

线性回归只能处理直线关系,然而现实世界中的数据往往呈现非线性特征。这时就需要神经网络来发挥作用。下面这个网络仅包含一个隐藏层加一个输出层,专门用于拟合二次曲线:

import torch
import torch.nn as nn
import torch.optim as optim

# 生成非线性数据
x = torch.linspace(-1, 1, 100).unsqueeze(1)
y = x.pow(2) + 0.2 * torch.randn(100, 1)

# 定义神经网络模型
class NeuralNet(nn.Module):
    def __init__(self):
        super(NeuralNet, self).__init__()
        self.hidden = nn.Linear(1, 10)
        self.output = nn.Linear(10, 1)
    def forward(self, x):
        x = torch.relu(self.hidden(x))
        x = self.output(x)
        return x

# 创建模型实例
model = NeuralNet()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型
epochs = 1000
for epoch in range(epochs):
    outputs = model(x)
    loss = criterion(outputs, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    if (epoch + 1) % 100 == 0:
        print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')

# 测试模型
with torch.no_grad():
    predicted = model(x)

# 可视化结果
import matplotlib.pyplot as plt
plt.scatter(x.numpy(), y.numpy(), label='Original data')
plt.plot(x.numpy(), predicted.numpy(), 'r-', label='Neural network prediction')
plt.legend()
plt.show()

2.2 理解神经网络的工作原理

神经网络的核心架构可以拆解为以下几个层次:

  1. 输入层:负责接收原始数据
  2. 隐藏层:用于提取数据中的特征
  3. 输出层:生成最终的预测结果
  4. 激活函数:引入非线性变换,使网络具备学习复杂模式的能力

简而言之,就是通过多层线性与非线性变换的组合,去逼近任意复杂的函数关系。

三、图像分类入门

3.1 数据准备

图像分类领域的“Hello World”非MNIST手写数字识别莫属。先加载数据一探究竟:

import torch
import torchvision
import torchvision.transforms as transforms

# 数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

# 加载MNIST数据集
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)

# 查看数据
import matplotlib.pyplot as plt
import numpy as np

# 函数:显示图像
def imshow(img):
    img = img / 2 + 0.5  # 反归一化
    npimg = img.numpy()
    plt.imshow(np.transpose(npimg, (1, 2, 0)))
    plt.show()

# 获取一批训练数据
dataiter = iter(trainloader)
images, labels = next(dataiter)

# 显示图像
imshow(torchvision.utils.make_grid(images))
print('标签:', ' '.join(f'{labels[j]}' for j in range(4)))

3.2 构建图像分类模型

接下来搭建一个卷积神经网络(CNN),专门用于识别图片中的数字:

import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 卷积层
        self.conv1 = nn.Conv2d(1, 32, 3, 1)
        self.conv2 = nn.Conv2d(32, 64, 3, 1)
        # 池化层
        self.pool = nn.MaxPool2d(2, 2)
        # 全连接层
        self.fc1 = nn.Linear(64 * 12 * 12, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 64 * 12 * 12)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 创建模型实例
net = Net()
print(net)

3.3 训练图像分类模型

训练流程与之前类似,但损失函数换成了交叉熵(分类任务的标准选择),优化器额外加入了动量机制:

import torch.optim as optim

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

# 训练模型
epochs = 5
for epoch in range(epochs):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        # 获取输入
        inputs, labels = data
        # 清零梯度
        optimizer.zero_grad()
        # 前向传播
        outputs = net(inputs)
        # 计算损失
        loss = criterion(outputs, labels)
        # 反向传播
        loss.backward()
        # 更新参数
        optimizer.step()
        # 统计损失
        running_loss += loss.item()
        if i % 100 == 99:
            print(f'[{epoch + 1}, {i + 1}] loss: {running_loss / 100:.3f}')
            running_loss = 0.0
print('训练完成')

3.4 测试模型

训练结束后当然要验证效果,查看在测试集上的准确率,再随机挑选几张图片对比真实标签与预测结果:

# 测试模型
correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
print(f'测试准确率: {100 * correct / total:.2f}%')

# 查看预测结果
dataiter = iter(testloader)
images, labels = next(dataiter)

# 显示图像
imshow(torchvision.utils.make_grid(images))
print('真实标签:', ' '.join(f'{labels[j]}' for j in range(4)))

# 预测
outputs = net(images)
_, predicted = torch.max(outputs, 1)
print('预测标签:', ' '.join(f'{predicted[j]}' for j in range(4)))

四、从Rust开发者角度的思考

4.1 与Rust的对比

作为拥有Rust背景的学习者,刚接触Python AI时会有几个鲜明的体会:

  • 开发效率:Python在AI开发中的速度优势极为突出,从编写代码到跑通模型的周期比Rust短得多
  • 生态系统:PyTorch、TensorFlow、scikit-learn等库一应俱全,几乎无需自行造轮子
  • 性能:尽管Python本身运行较慢,但PyTorch底层基于C++/CUDA实现,实际训练和推理的性能并不逊色
  • 类型系统:从Rust的静态强类型切换到Python的动态类型,初期确实需要适应,但习惯之后能感受到其灵活性

4.2 学习建议

对于同样来自Rust社区的开发者,这里提供几条实用建议:

  • 利用系统思维:Rust的底层知识(内存管理、线程、FFI)能帮助你更深入地理解AI框架的底层实现,例如张量存储与算子调度
  • 注重代码质量:将在Rust中养成的清晰编码风格带到Python中,编写可读性强、易于维护的代码,而非“能跑就行”
  • 实践项目:先找一个小数据集(如MNIST)完整运行一遍,再换成真实场景的数据(如CIFAR-10),实战过程中能学到大量细节
  • 跨语言结合:如果对性能有极致要求,可以通过PyO3用Rust编写Python扩展,在关键环节借助Rust加速,充分发挥各自优势

五、总结

从线性回归的“Hello World”到图像分类的卷积神经网络,这条学习路径清晰地展示了AI的基本范式:数据 → 模型 → 训练 → 评估。对于有Rust背景的开发者而言,学习体验更像是在两种思维方式之间切换——一边是底层控制的精妙,一边是快速迭代的自由。挑战固然存在,例如动态类型和内存管理习惯的转变,但Python AI生态所提供的开发效率,足以让这些适应成本变得非常值得。

下一步,你可以尝试用PyTorch复现一个经典的论文模型(比如ResNet),或者将Rust与Python结合起来构建一个端到端的推理服务。AI的世界才刚刚打开一扇门,前方还有更多有趣的内容等待你去探索。

来源:https://blog.csdn.net/guoyizhongxing/article/details/159324438
上一篇6套降AI提示词配合DeepSeek,论文AI率从90%降至3% 下一篇286亿GEO市场爆发 AI搜索时代GEO优化成品牌推荐位密码
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Sentieon DNAscope Hybrid长短读长混合分析流程详解评测
AI教程 · 2026-06-07

Sentieon DNAscope Hybrid长短读长混合分析流程详解评测

一、前言 基因组学研究已进入下半场,精度与全面性成为临床诊断及群体研究的核心需求。然而,单一测序技术常常让人陷入选择困境:短读长测序(如 Illumina)准确性高、成本低廉,但在面对结构变异、重复序列和复杂区域时显得力不从心;长读长测序(如 Oxford Nanopore)虽能轻松跨越这些障碍,超

腾讯混元Hy3 preview 295B/21B MoE架构与上下文详解
AI教程 · 2026-06-07

腾讯混元Hy3 preview 295B/21B MoE架构与上下文详解

摘要: 295B 21B MoE 是腾讯 2026 年 4 月发布的混元 Hy3 preview 的核心架构标识。本文解释参数总量与激活参数的含义、MoE 的工作机制、为什么 Hy3 preview 能原生支持 256K 上下文,并说明它在 TokenHub 上的完整能力支持与价格档位。 一、读懂

腾讯云AI业务流架构师训练营重塑编程与业务的新范式
AI教程 · 2026-06-07

腾讯云AI业务流架构师训练营重塑编程与业务的新范式

AI业务流架构师训练营:在腾讯云上重塑编程与业务的新范式 到2026年,企业AI竞争的核心已不再是“拥有AI”,而是“谁的AI业务流架构更为高效”。这一转变彻底颠覆了传统编程模式。对于技术从业者而言,AI业务流架构师已成为舞台中央的关键角色——他们不再仅仅编写代码,而是将业务需求转化为自主运行的数字

推荐一款免费使用谷歌最新NanoBanana 2插件
AI教程 · 2026-06-07

推荐一款免费使用谷歌最新NanoBanana 2插件

谷歌近期推出了重磅更新——NanoBanana2模型正式登场。无论是在知识储备、图像生成质量、推理能力还是主体一致性方面,这一版本都实现了全面升级,堪称当前地表最强的AI生图模型之一。 生成速度直接减半,价格也同步腰斩,性价比表现极为突出。不过,国内用户想直接访问官方渠道依然困难重重,大部分路径都绕

企业生产管理系统选型排行榜
AI教程 · 2026-06-07

企业生产管理系统选型排行榜

企业在进行生产管理系统选型时,往往容易陷入一个常见的思维误区:首先问“哪家功能更全面”。但从实际部署与落地效果来看,真正决定系统价值的,往往不是模块数量的简单堆叠,而是它是否真正贴合实际生产流程、能否支撑高效的跨部门协作、以及是否具备随业务变化持续迭代升级的能力。迈入2026年,制造企业对生产管理系