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

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

Python AI 开发的基础流程,涵盖环境搭建、线性回归与神经网络模型构建、以及基于 PyTorch 的 MNIST 图像分类实战。文章对比了 Python 与 Rust 在 AI 开发中的差异,为开发者提供了学习路径建议。

雾岛听风发布于 2026/4/5更新于 2026/7/2054 浏览

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
 epoch  (epochs):
    
    outputs = model(x)
    
    loss = criterion(outputs, y)
    
    optimizer.zero_grad()
    loss.backward()
    
    optimizer.step()
     (epoch + ) %  == :
        ()


 torch.no_grad():
    predicted = model(x)


plt.scatter(x.numpy(), y.numpy(), label=)
plt.plot(x.numpy(), predicted.numpy(), , label=)
plt.legend()
plt.show()
()
for
in
range
# 前向传播
# 计算损失
# 反向传播
# 更新参数
if
1
10
0
print
f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}'
# 测试模型
with
# 可视化结果
'Original data'
'r-'
'Fitted line'
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. 五、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • WebGIS 视角:体感温度实证,哪座“火炉”最热?
  • Processing.py Python 创意编程入门指南
  • FPGA 图像处理:图像畸变矫正原理及 MATLAB 与 FPGA 实现
  • 主流 AI 编程模型区别与高效开发选型指南
  • Python 库 addict 使用指南
  • Trae 集成 Vizro:低代码构建数据可视化仪表板
  • Linux 进程程序替换和 exec 函数族
  • Clawdbot 源码部署实战:从环境搭建到 WebChat 验证
  • 《人工智能的底层逻辑》:清华大学 AI 通识经典解析
  • 《人工智能的底层逻辑》:清华大学张长水教授 AI 通识经典
  • VS Code 配合 Overleaf Workshop 插件集成 Copilot 进行 LaTeX 写作
  • 基于 Java 标准库读取 CSV 实现天地图 POI 分类导入 PostGIS 数据库
  • OpenClaw + 飞书搭建专属 AI 机器人指南
  • Python 面向对象编程实战:构建智能家居系统
  • Java GUI 组件详解:对话框与 JOptionPane 使用
  • Java String 类常用方法详解
  • Java 统计子字符串在父字符串中的出现次数
  • VS Code 中 GitHub Copilot 插件无法加载模型的排查与修复
  • 2024 年中国大模型落地路线图
  • OpenClaw 中 web_search 与 web_fetch 最佳实践速查

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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