机器学习练手项目
机器学习练手项目
机器学习练手项目-猫狗分类器猫狗分类器是一个深度学习项目,旨在识别图像中的猫和狗。通过训练神经网络模型,该项目可以从输入的图像中准确地识别出是猫还是狗。这个项目可以应用于许多实际场景,如图像分类、动物识别等。1. 准备数据集首先,需要准备一个包含猫和狗图像的数据集。您可以从各种来源收集这些图像数据,例如网络上的图片库或自己的图片文件夹。确保每个类别的图像都放在单独的文件夹中,并将
机器学习练手项目
猫狗分类器是一个深度学习项目,旨在识别图像中的猫和狗。通过训练神经网络模型,该项目可以从输入的图像中准确地识别出是猫还是狗。这个项目可以应用于许多实际场景,如图像分类、动物识别等。
1. 准备数据集
首先,需要准备一个包含猫和狗图像的数据集。您可以从各种来源收集这些图像数据,例如网络上的图片库或自己的图片文件夹。确保每个类别的图像都放在单独的文件夹中,并将它们命名为相应的类别。
2. 数据预处理
在加载图像数据之前,需要进行一些预处理步骤。这包括调整图像大小、将图像转换为张量以及标准化图像数据。通过模块,我们可以方便地实现这些预处理步骤。
import torch
import as transforms
from torchvision.datasets import ImageFolder
from torch.utils.data import DataLoader
. 构建模型
将使用卷积神经网络(C)来构建我们的猫狗分类器。C是一种在图像识别任务中非常流行的深度学习模型。
代码语言:javascript代码运行次数:0运行复制import as nn
import .functional as F
class C(nn.Module):
def __init__(self):
super(C, self).__init__()
# 定义卷积层、池化层和全连接层
= nn.Conv2d(, 16, , padding=1)
= nn.Conv2d(16, 2, , padding=1)
= nn.Conv2d(2, 64, , padding=1)
self.pool = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(64 * 8 * 8, 512)
self.fc2 = nn.Linear(512, 2)
def forward(self, x):
# 前向传播函数
x = self.pool(F.relu((x)))
x = self.pool(F.relu((x)))
x = self.pool(F.relu((x)))
x = x.view(-1, 64 * 8 * 8) # 将特征展平为一维向量
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
4. 训练模型
将使用训练集来训练我们的模型,并使用测试集来评估模型的性能。
代码语言:javascript代码运行次数:0运行复制import as optim
# 实例化模型、定义损失函数和优化器
model = C()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练模型
num_epochs = 10
for epoch in range(num_epochs):
running_loss = 0.0
for i, data in enumerate(train_loader, 0):
inputs, labels = data
optimizer.zero_grad()
try:
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if (i+1) % 100 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Iteration [{i+1}/{len(train_loader)}], Loss: {running_loss/100:.4f}')
running_loss = 0.0
except Exception as e:
print(f"Error processing batch {i}:", str(e))
continue
print('Finished Training')
5. 评估模型
在训练完成后,需要评估模型在测试集上的性能。
代码语言:javascript代码运行次数:0运行复制()
correct = 0
total = 0
with _grad():
for data in test_loader:
images, labels = data
outputs = model(images)
_, predicted = (outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy of the network on the {total} test images: {100 * correct / total}%')
完整代码:
代码语言:javascript代码运行次数:0运行复制import os
import torch
import as transforms
from torchvision.datasets import ImageFolder
from torch.utils.data import DataLoader
import as nn
import as optim
import .functional as F
import matplotlib.pyplot as plt
from PIL import Image
# 设置随机种子
_seed(42)
# 数据预处理,包括调整大小、转换为张量、以及标准化
transform = transforms.Compose([
transforms.Resize((64, 64)), # 将图像调整为 64x64 大小
transforms.ToTensor(), # 将图像转换为张量
(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) # 标准化图像数据
])
# 加载训练数据集,使用ImageFolder自动加载图像数据,并应用上面定义的数据预处理
# root参数指定数据集根目录
train_dataset = ImageFolder(root='D:\\系统默认\\桌面\\python\\PetImages\\', transform=transform)
# 计算训练集的大小
train_size = int(0.8 * len(train_dataset))
test_size = len(train_dataset) - train_size
# 划分训练集和测试集
train_dataset, test_dataset = torch.utils.data.random_split(train_dataset, [train_size, test_size])
# 创建数据加载器,用于加载训练集和测试集的数据
train_loader = DataLoader(train_dataset, batch_size=2, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=4, shuffle=False)
# 定义卷积神经网络模型
class C(nn.Module):
def __init__(self):
super(C, self).__init__()
# 定义卷积层
= nn.Conv2d(, 16, , padding=1)
= nn.Conv2d(16, 2, , padding=1)
= nn.Conv2d(2, 64, , padding=1)
# 定义池化层
self.pool = nn.MaxPool2d(2, 2)
# 定义全连接层
self.fc1 = nn.Linear(64 * 8 * 8, 512)
self.fc2 = nn.Linear(512, 2)
def forward(self, x):
# 前向传播函数,定义网络结构
x = self.pool(F.relu((x)))
x = self.pool(F.relu((x)))
x = self.pool(F.relu((x)))
x = x.view(-1, 64 * 8 * 8) # 将特征展平为一维向量
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
# 实例化模型、定义损失函数和优化器
model = C()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练模型
num_epochs = 10
for epoch in range(num_epochs):
running_loss = 0.0
for i, data in enumerate(train_loader, 0):
inputs, labels = data
optimizer.zero_grad()
try:
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if (i+1) % 100 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Iteration [{i+1}/{len(train_loader)}], Loss: {running_loss/100:.4f}')
running_loss = 0.0
except Exception as e:
print(f"Error processing batch {i}:", str(e))
continue
print('Finished Training')
# 保存模型
torch.save(model.state_dict(), 'cat_dog_model.pth')
# 测试模型
()
correct = 0
total = 0
with _grad():
for data in test_loader:
images, labels = data
outputs = model(images)
_, predicted = (outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy of the network on the {total} test images: {100 * correct / total}%')
- 运行结果样子
想要获取数据集在这个地址里面:GitHub地址
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent 删除数据机器学习self测试模型#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-19 17:39:15
上一篇:接口的幂等性
下一篇:一篇文章学会Matplotlib
推荐阅读
留言与评论(共有 19 条评论) |
本站网友 忽悠岛小游戏 | 8分钟前 发表 |
str(e)) continue print('Finished Training') # 保存模型 torch.save(model.state_dict() | |
本站网友 京城大厦 | 17分钟前 发表 |
{100 * correct / total}%')完整代码:代码语言:javascript代码运行次数:0运行复制import os import torch import as transforms from torchvision.datasets import ImageFolder from torch.utils.data import DataLoader import as nn import as optim import .functional as F import matplotlib.pyplot as plt from PIL import Image # 设置随机种子 _seed(42) # 数据预处理 | |
本站网友 第一理财网 | 29分钟前 发表 |
这个项目可以应用于许多实际场景 | |
本站网友 什么叫绿色软件 | 4分钟前 发表 |
1) total += labels.size(0) correct += (predicted == labels).sum().item() print(f'Accuracy of the network on the {total} test images | |
本站网友 三星st50 | 25分钟前 发表 |
2) # 定义全连接层 self.fc1 = nn.Linear(64 * 8 * 8 | |
本站网友 深圳白癜风医院 | 1分钟前 发表 |
代码语言:javascript代码运行次数:0运行复制() correct = 0 total = 0 with _grad() | |
本站网友 幸福缘 | 28分钟前 发表 |
labels = data outputs = model(images) _ | |
本站网友 北京饭店转让信息 | 14分钟前 发表 |
通过模块 | |
本站网友 秦皇岛租房网 | 29分钟前 发表 |
lr=0.001) # 训练模型 num_epochs = 10 for epoch in range(num_epochs) | |
本站网友 登封在线 | 4分钟前 发表 |
定义损失函数和优化器 model = C() criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters() | |
本站网友 血糖高吃什么 | 24分钟前 发表 |
2) def forward(self | |
本站网友 世界客商大会 | 13分钟前 发表 |
{100 * correct / total}%')运行结果样子 想要获取数据集在这个地址里面:GitHub地址本文参与 腾讯云自媒体同步曝光计划 | |
本站网友 从入门到放弃 | 17分钟前 发表 |
def __init__(self) | |
本站网友 于盈 | 25分钟前 发表 |
transform=transform) # 计算训练集的大小 train_size = int(0.8 * len(train_dataset)) test_size = len(train_dataset) - train_size # 划分训练集和测试集 train_dataset | |
本站网友 余下论坛 | 26分钟前 发表 |
通过训练神经网络模型 | |
本站网友 苹果醋饮料 | 20分钟前 发表 |
16 | |
本站网友 治疗便秘 | 4分钟前 发表 |
代码语言:javascript代码运行次数:0运行复制import as optim # 实例化模型 | |
本站网友 测算排卵期 | 14分钟前 发表 |
def __init__(self) |