跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python AI 入门:从线性回归到图像分类

介绍 Python AI 入门教程,涵盖环境搭建、线性回归、神经网络基础及 MNIST 图像分类实战。通过 PyTorch 框架演示模型训练流程,并对比 Python 与 Rust 在 AI 开发中的差异,为开发者提供学习建议与跨语言视角的总结。

狂少发布于 2026/4/6更新于 2026/9/459 浏览

Python AI 入门:从线性回归到图像分类

一、Python AI 的 Hello World

1.1 环境搭建

首先,我们需要搭建 Python AI 的开发环境:

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

1.2 第一个 AI 程序

让我们来编写一个最简单的 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 神经网络基础

线性回归是最简单的 AI 模型,而神经网络则是更复杂的模型。让我们来构建一个简单的神经网络:

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 数据准备

我们将使用 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 构建图像分类模型

现在我们来构建一个用于图像分类的卷积神经网络:

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 的开发效率比 Rust 高,尤其是在 AI 开发中
  • 生态系统:Python 的 AI 生态系统非常丰富,有大量成熟的库
  • 性能:Python 的性能虽然不如 Rust,但在 AI 开发中,PyTorch 等库已经做了很多优化
  • 类型系统:Python 的动态类型与 Rust 的静态类型有很大不同,需要适应

4.2 学习建议

对于 Rust 开发者学习 Python AI,我有以下建议:

  • 利用系统思维:Rust 的系统级编程经验有助于理解 AI 模型的底层实现
  • 注重代码质量:保持 Rust 的代码风格,写出清晰、可维护的 Python 代码
  • 实践项目:通过实际项目巩固学习成果
  • 跨语言学习:将 Rust 和 Python 结合起来,发挥各自的优势

五、总结

通过从 Hello World 到图像分类的学习,我已经初步掌握了 Python AI 的基本概念和使用方法。作为一个 Rust 开发者,我发现 Python AI 的学习过程既有挑战也有机遇。

挑战在于 Python 的动态类型和内存管理与 Rust 有很大不同,需要适应新的思维方式。机遇在于 Python 的 AI 生态系统非常丰富,开发效率高,能够快速实现 AI 模型。

目录

  1. Python AI 入门:从线性回归到图像分类
  2. 一、Python AI 的 Hello World
  3. 1.1 环境搭建
  4. 安装 PyTorch
  5. 安装其他依赖
  6. 1.2 第一个 AI 程序
  7. 生成训练数据
  8. 定义模型
  9. 创建模型实例
  10. 定义损失函数和优化器
  11. 训练模型
  12. 测试模型
  13. 可视化结果
  14. 二、从线性回归到神经网络
  15. 2.1 神经网络基础
  16. 生成非线性数据
  17. 定义神经网络模型
  18. 创建模型实例
  19. 定义损失函数和优化器
  20. 训练模型
  21. 测试模型
  22. 可视化结果
  23. 2.2 理解神经网络的工作原理
  24. 三、图像分类入门
  25. 3.1 数据准备
  26. 数据预处理
  27. 加载 MNIST 数据集
  28. 查看数据
  29. 函数:显示图像
  30. 获取一批训练数据
  31. 显示图像
  32. 3.2 构建图像分类模型
  33. 创建模型实例
  34. 3.3 训练图像分类模型
  35. 定义损失函数和优化器
  36. 训练模型
  37. 3.4 测试模型
  38. 测试模型
  39. 查看预测结果
  40. 显示图像
  41. 预测
  42. 四、从 Rust 开发者角度的思考
  43. 4.1 与 Rust 的对比
  44. 4.2 学习建议
  45. 五、总结

更多推荐文章

查看全部
  • 闲鱼 x-sign 生成算法逆向分析
  • Pico 4XVR 1.10.13 安装与使用指南
  • AI 编程实战:自动化代码生成、低代码与算法优化
  • GLM-4.5V-FP8 开源:多模态视觉推理新范式
  • OpenAI 发布 GPT-4o 多模态模型及接入方式详解
  • C++ STL 容器常用函数与实战技巧
  • 利用腾讯云 HAI 与 DeepSeek 快速构建个人网页
  • OpenFang 实战:Rust 驱动的 Agent OS 本土化部署指南
  • LobsterAI:网易有道开源的 24/7 全天候个人 AI 工作助理
  • Visual C++ 运行库安装与修复指南
  • 基于 AI 助手的自然语言转 SQL 查询与数据库优化实践
  • Flutter 开发环境配置指南 Windows/Mac
  • C++ 类和对象:拷贝构造函数与运算符重载详解
  • 解决 PKIX path building failed:SSL 证书导入 Java 信任库
  • C、C++、Java 跨语言语法与底层机理实战指南
  • 宇树 G1 机器人开发入门:有线与无线连接配置
  • VisionReward:重塑 AIGC 时代视觉生成的人类偏好对齐范式
  • C++26 std::future 原生支持超时机制,优化异步任务管理
  • 动态规划详解:爬楼梯问题与核心思想
  • 在 Cursor 中配置和使用 MCP 服务指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online