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

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

Python AI 入门:从 Hello World 到图像分类 一、Python AI 的 Hello World 1.1 环境搭建 首先,我们需要搭建 Python AI 的开发环境: 1.2 第一个 AI 程序 让我们来编写一个最简单的 AI 程序 - 线性回归: 二、从线性回归到神经网络 2.1 神经网络基础 线性回归是最简单的 AI 模型,而神经网络则是更复杂的模型。让我们来构建一个简单…

灭霸发布于 2026/4/6更新于 2026/9/883K 浏览

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

一、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 入门:从 Hello World 到图像分类
  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. 五、总结

更多推荐文章

查看全部
  • LeetCode 297:二叉树的序列化与反序列化
  • CSS 基础语法、选择器及常用属性指南
  • llama.cpp 量化模型部署实战:从模型转换到 API 服务
  • JavaScript 中 var、let、const 的核心区别与实战应用
  • Seedance 2.0 提示词完全指南:从新手到 AI 导演
  • UV 换源指南:配置 PyPI 与 CPython 源提升下载速度
  • AIGC 中的变分自编码器(VAE)代码与实现
  • 六大核心芯片 MCU/SOC/DSP/FPGA/NPU/GPU 区别与应用解析
  • GitHub Copilot 兼容 OpenAI/Anthropic API 代理服务详解
  • 大模型技术学习指南:从基础理论到高级应用路线
  • GitHub Agent HQ 实战:Copilot Pro 接入与代码库全生命周期管理
  • 英伟达与 GitHub 免费获取大模型 API Key 方法指南
  • C++ 基础实战:从循环控制到算法入门
  • 复杂环境下移动机器人连接解决方案:Auto-Connect 架构解析
  • 【FPGA入坑指南第二章】安装vivado/vitis2023.1软件
  • 鸿蒙分布式智能办公应用架构设计与性能优化
  • Windows 11 使用 llama.cpp 运行 Qwen3.5 量化模型测试
  • 基于STM32的智能家居安防系统设计与实现
  • 力扣 Hot100 普通数组题目 Python 实现
  • 文心一言 4.5 开源模型技术解析与部署实践

相关免费在线工具

  • 加密/解密文本

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