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

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# 定义模型classLinearModel(nn.Module):def__init__(self):super(LinearModel, self).__init__() self.linear = nn.Linear(1,1)defforward(self, x):return self.linear(x)# 创建模型实例 model = LinearModel()# 定义损失函数和优化器 criterion = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 训练模型 epochs =100for epoch inrange(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)# 定义神经网络模型classNeuralNet(nn.Module):def__init__(self):super(NeuralNet, self).__init__() self.hidden = nn.Linear(1,10) self.output = nn.Linear(10,1)defforward(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 =1000for epoch inrange(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 # 函数:显示图像defimshow(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 inrange(4)))

3.2 构建图像分类模型

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

import torch.nn as nn import torch.nn.functional as F classNet(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)defforward(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 =5for epoch inrange(epochs): running_loss =0.0for i, data inenumerate(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.0print('训练完成')

3.4 测试模型

# 测试模型 correct =0 total =0with 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 inrange(4)))# 预测 outputs = net(images) _, predicted = torch.max(outputs,1)print('预测标签:',' '.join(f'{predicted[j]}'for j inrange(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模型。

Read more

AI时代人人都是产品经理:架构设计:从 0 到 1 搭建 AI 产品的信息架构与核心业务流程

AI时代人人都是产品经理:架构设计:从 0 到 1 搭建 AI 产品的信息架构与核心业务流程

一、为什么AI产品需要重新设计信息架构? 在传统软件产品中,信息架构(IA)的核心是将功能按用户认知逻辑组织,比如电商APP的"商品-购物车-结算"流程,本质是对"人找货"逻辑的数字化映射。但AI产品的核心逻辑是**“货(服务)找人”**:用户的需求不再是明确的功能调用,而是模糊的任务目标(比如"帮我优化一份市场报告")。 这种差异直接导致了两个核心痛点: * 传统的菜单式导航无法适配AI产品的开放式交互 * 用户对AI能力的认知不清晰,容易产生"不会用"或"用不好"的挫败感 * AI的输出结果不可控,需要在架构层设计"修正-反馈"闭环 核心结论:AI产品的信息架构不是"功能的容器",而是&

用Python打造AI三剑客:自动总结+写代码+查资料的完整指南

用Python打造AI三剑客:自动总结+写代码+查资料的完整指南

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 前言 * 目录 * 一、准备工作:环境与API配置 * 1.1 技术栈选择 * 1.2 环境配置 * 1.3 核心工具类封装 * 二、工具一:智能文档总结器 * 2.1 功能设计 * 2.2 核心代码实现 * 2.3 使用效果对比 * 三、工具二:AI代码生成器 * 3.1 功能架构 * 3.2 核心实现 * 交互式代码生成器 * 使用示例 * 4.2 核心代码 * 4.3 搜索效率对比 * 五、

2026年3月23日技术资讯洞察:AI Agent失控,Claude Code引领AI编程新趋势

兄弟们早上好!今天是2026年3月23日,我又准时给大家分享今天的技术资讯啦,就是这么准时!话不多说,开始上菜! 1. Meta内部AI Agent失控:首个Sev 1级生产事故敲响安全警钟 来源: InfoQ《Meta 内部 Agent 失控升级:首个 Sev 1 级事故曝光,系统数据裸奔了两小时》 发布时间: 2026年3月20日 事件回顾:权限失控两小时 上周,Meta内部发生了一起典型的"Agent失控"生产事故。一名Meta员工在内部论坛发帖求助技术问题,另一名工程师调用公司内部的AI Agent来分析问题。然而,这个Agent没有跟调用者私聊,而是直接在论坛上公开发布了建议回复。 更糟糕的是,Agent给出的建议是错误的。提问员工按照这个错误信息操作,导致权限配置出错,大量公司内部数据+用户相关数据短暂暴露给一批原本无权限的工程师。整个暴露过程持续近2小时,Meta内部将其定为Sev 1级,即公司安全事件体系中第二高的严重等级。 技术剖析:上下文压缩的安全隐患

AI三分钟第1弹|3分钟学会给Cursor配置代理

AI三分钟第1弹|3分钟学会给Cursor配置代理 文章目录 * AI三分钟第1弹|3分钟学会给Cursor配置代理 * 正文 * 拿去用 * 讲清楚 * 记住它 * 结语 * 引用 * 版权信息 什么是AI三分钟? 《AI三分钟》专栏旨在提供短小精悍的AI工具使用技巧或者知识 在这个时间碎片化、知识碎片化的时代 用最精炼的语言和最生动的故事 3分钟完成一项干货的科普 正文 拿去用 方法一:直接用博主的配置文件(推荐) 1. 打开Cursor,按 Cmd + Shift + P(Mac)或 Ctrl + Shift + P(Windows)打开检索框 2. 重启Cursor使代理设置生效 3. 点击下图中的首选项,选择Cursor首选项配置,进入network(网络管理)页面 将HTTP协议改成HTTP1.1 粘贴博主编辑好的配置(全部覆盖,覆盖前请自行备份之前的用户设置)