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

【AIGC】ChatGPT 的 Prompt Hacker 技巧:让简历轻松通过 AI 筛选

【AIGC】ChatGPT 的 Prompt Hacker 技巧:让简历轻松通过 AI 筛选

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]本文专栏: AIGC |ChatGPT 文章目录 * 💯前言 * 💯背景 * 简化简历格式 * 💯简化 Prompt Hacker 的逻辑 * 使用 Prompt Hacker 技巧 * **示例 Prompt:引导 AI 筛选简历** * 如何利用 Prompt 优化简历筛选? * **示例 Prompt** * 💯在简历中注入指令词 * **为什么在简历中注入指令词?** * **具体操作方法** * **示例 Prompt**: * **操作步骤** * 提示与风险 * 💯极端场景验证:测试简历优化策略的有效性 * 验证方法 * 测试场景示例 * 测试结论 * 总结 * 💯实际应用:优化简历的操作步骤 * 操作步骤 * 💯注意事项:关于简历优化的核心思考 * 💯小结 💯前言 随着人工智能技术的迅猛发展,尤其是大语言模型如

AIGC联动PS黑科技:一张原画秒出Spine 2D骨骼动画拆件级PSD

AIGC联动PS黑科技:一张原画秒出Spine 2D骨骼动画拆件级PSD

我们正在冲刺一款二次元风格的横版动作抽卡手游。下周二,发行商要来看最新SSR女角色的“大招动画”实机演示。结果,原定外包团队交上来的拆件PSD文件出了大纰漏——外包不仅把层级合并错了,而且所有被遮挡的身体部位(比如被大剑挡住的胸口、被头发遮住的肩膀)完全没有做“补图”处理!主美咆哮着说:“这怎么绑骨骼?角色一转身或者头发一飘,底下的透明窟窿就全露出来了!周末必须把这套极其复杂的哥特洛丽塔裙装加双马尾角色重新拆件、完美补图,周一早上我要看到她在Spine里生龙活虎地动起来!” 做过2D骨骼动画的兄弟们都懂,立绘拆件和补图,简直就是2D美术管线里的“顶级酷刑”。 如果在传统的2D工作流里,你要处理这么一张高精度的二次元角色,过程能把人逼疯。首先,你得在绘画软件里,拿套索工具把头发分为前发、中发、后发、鬓角,把手臂分为大臂、小臂、手掌,把裙子分为前摆、侧摆、后摆……足足拆出上百个图层;这还不算完,最绝望的是“补图”。当你把前面的手臂单独抠出来后,身后的衣服上就会留下一个巨大的空白窟窿。为了让动画运转时没有死角,你必须纯手工、用画笔去脑补并画完那些原本看不见的衣服褶皱、身体结构和光影。

昇腾赋能海外主流大模型 | Llama-2-7b深度测评与部署方案

昇腾赋能海外主流大模型 | Llama-2-7b深度测评与部署方案

一. 昇腾引领国产AI算力新时代 当生成式人工智能迈入规模化应用的深水区,大模型已从技术探索走向产业落地的关键节点,而算力作为支撑这一进程的核心基础设施,正面临着前所未有的双重挑战:一方面,以Llama、GPT系列为代表的大模型参数规模持续扩大,对算力的峰值性能、内存带宽、能效比提出了指数级增长的需求;另一方面,全球算力供给格局的不确定性,使得核心算力设施的国产化替代成为保障AI产业自主可控发展的战略刚需。 在此背景下,昇腾(神经网络处理器)作为国产高端AI芯片的核心代表,其技术成熟度、生态适配性与性能表现,直接关系到我国在全球AI算力竞争中的核心话语权。 昇腾自诞生以来,便承载着构建国产AI算力底座的战略使命,通过“芯片-框架-模型-应用”全栈式技术布局,打破了海外算力芯片在高端AI领域的垄断局面。从架构设计来看,昇腾采用面向AI计算的专用架构,集成了大量AI计算单元与高效内存管理模块,能够针对性解决大模型训练与推理过程中的数据吞吐瓶颈。 本次测评的核心硬件平台基于昇腾910B 构建,其为大模型的高速推理提供了坚实的硬件基础; 1.什么是昇腾 昇腾 (Ascend)

最新降AIGC大汇总:免费盘点好用的降AI工具与降AI率干货,AIGC率从80%降到10%以下【建议收藏】

最新降AIGC大汇总:免费盘点好用的降AI工具与降AI率干货,AIGC率从80%降到10%以下【建议收藏】

如果上天再给我一次机会,我绝对不会在答辩前一周才开始疯狂补论文,更不会天真地以为用AI辅助创作的的初稿能直接混过AI检测系统。 就在三天前,我看着查重报告上那个刺眼的“AIGC疑似度:88%”,整个人都麻了。导师在群里不仅强调查重率,还特意加了一句:“今年学校运用最新的AIGC检测系统,超过30%的一律二辩处理。” 那一刻,我感觉我的学位证正在离我远去。 为了自救,我开始了疯狂的论文降ai之路。起初我信了网上的那些“手动降AI干货”,也就是大家常说的那几招。 ✍️手动降AI干货真的有用吗 1、同义词替换法:把“因此”改成“所以”,把“重要”改成“关键”。结果改了一晚上,眼睛都花了,第二天一测,降ai率只掉了1%。事实证明,现在的检测算法看的是语序逻辑,不是简单的词汇。 2、加废话扩充法:为了稀释AI浓度,我往文章里注水。结果降低ai的效果是有一点,但论文变得又臭又长,逻辑稀碎,差点被导师骂死。 这时候我才明白,用人力去对抗大模型,效率低到令人发指。为了保住我的头发,