当前位置: 代码网 > it编程>前端脚本>Python > Python AI入门学习:从Hello World到线性回归、神经网络、图像分类

Python AI入门学习:从Hello World到线性回归、神经网络、图像分类

2026年03月28日 Python 我要评论
一、python ai的hello world1.1 环境搭建首先,我们需要搭建python ai的开发环境:# 安装pytorchpip install torch torchvision# 安装其

一、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模型。

到此这篇关于python ai入门学习:从hello world到线性回归、神经网络、图像分类的文章就介绍到这了,更多相关python ai学习线性回归、神经网络、图像分类内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com