12.04 深度学习-用CNN做图像分类+训练可视化

数据集要找对应功能的数据集 分类找分类 目标检测用目标检测的

使用labelimg 标注工具 要先pip 然后进行标注和保存 图片和 lables 应该在同一个文件夹里面 lables文件是一个txt 记录了分类 中心店坐标 高度宽度 都是归一化的 横坐标/图像宽度

使用labelme 进行图像分割的标注 生成一个json文件 里面有分割的点坐标没有标准化的 和路径等信息

分类 目标检测labelimg 目标分割labelme 不一

import torch

import os

import wandb

from torch import nn

from torch import optim

from torch.utils.data import DataLoader,TensorDataset

from torch.utils.tensorboard import SummaryWriter

from torchvision import transforms

from torchvision.utils import make_grid

from torchvision.models import vgg16

from torchvision.datasets import MNIST,ImageFolder # 训练集和验证集分开下 通过train 设置下载哪一个 并且用transforms.conpose 组合转换器可以有标准化 转tensor

current_path=os.path.dirname(file)

data_path=os.path.join(current_path,"datasets")

rel_path=os.path.relpath(data_path)

print(rel_path)

定义神经网络 卷积 池化 全连接

def demo1():

wandb.init(

# set the wandb project where this run will be logged

project="CNN做图像分类测试", # 工程名

# track hyperparameters and run metadata

config={

"learning_rate": 0.01, # 模型的学习率

"architecture": "CNN", # 模型是CNN

"dataset": "MNIST", # 数据集名称

"epochs": 5,# 轮次

}

)

writer=SummaryWriter()

class MyNet(nn.Module):

def init(self, *args, **kwargs):

super().init(*args, **kwargs)

这里是可以看别人网路的图来指定网络 s代表池化 c代表卷积 layer代表线性

self.hidden1=nn.Sequential(nn.Conv2d(1,6,kernel_size=5),nn.ReLU())

self.hidden2=nn.Sequential(nn.MaxPool2d(kernel_size=2,stride=2))

self.hidden3=nn.Sequential(nn.Conv2d(6,16,kernel_size=5),nn.ReLU())

线性层要拉平算

self.hidden4=nn.Sequential(nn.Linear(16*5*5,120),nn.ReLU())

self.hidden5=nn.Sequential(nn.Linear(120,84),nn.ReLU())

self.out=nn.Sequential(nn.Linear(84,10),nn.Softmax(dim=1))

def forward(self,x):

x=self.hidden1(x)

x=self.hidden2(x)

x=self.hidden3(x)

x=self.hidden2(x)

x=x.view(x.shape[0],-1)

x=self.hidden4(x)

x=self.hidden5(x)

return self.out(x)

定义一个转化器

transforms1=transforms.Compose([transforms.ToTensor(),transforms.Resize((32,32))]) # transforms.Compose()方法为transforms组合转化器 里面传入一个列表 列表里面的元素是 transforms的转化器

数据的获取

data_train=MNIST(root=rel_path,train=True,transform=transforms1)

data_train分批次

dataLoader1=DataLoader(data_train,batch_size=64,shuffle=True)

循环轮次

epochs=50

实例化模型

net1=MyNet()

优化器

optim1=optim.Adam(net1.parameters(),lr=0.01)

损失函数

loss_func=nn.CrossEntropyLoss()

开始训练

for i in range(epochs):

for x_train,y_train in dataLoader1:

前向传播

y_pre=net1(x_train)

损失

loss=loss_func(y_pre,y_train)

清空梯度

optim1.zero_grad()

反向

loss.backward()

梯度更新

optim1.step()

writer.add_scalar("loss", loss)

for x in x_train:

writer.add_image(tag="epoch:{i}",img_tensor=x)

img_grid = make_grid(x)

if i>3:

writer.add_image(f"r_m_{i}_", x,global_step=1)

writer.add_graph(net1,torch.rand(1,1,32,32))

writer.close()

wandb.log({"loss": loss}) # 登记

wandb.watch(net1, log="all", log_graph=True)

wandb.finish()

def demo2():

使用自己其他地方下载的分类数据集 这个文件夹要满足一个结构 文件名

data_train=ImageFolder()# 传入路径根路径 transform is是否是验证集

使用经典的模型 在torchvision.datasets 的model里面

vgg=vgg16()

pass

if name=="main":

demo1()

pass

相关推荐
强哥之神2 小时前
英伟达发布 Llama Nemotron Nano 4B:专为边缘 AI 和科研任务优化的高效开源推理模型
人工智能·深度学习·语言模型·架构·llm·transformer·边缘计算
陈敬雷-充电了么-CEO兼CTO3 小时前
大模型技术原理 - 基于Transformer的预训练语言模型
人工智能·深度学习·语言模型·自然语言处理·chatgpt·aigc·transformer
旷世奇才李先生4 小时前
Pillow 安装使用教程
深度学习·microsoft·pillow
acstdm7 小时前
DAY 48 CBAM注意力
人工智能·深度学习·机器学习
澪-sl7 小时前
基于CNN的人脸关键点检测
人工智能·深度学习·神经网络·计算机视觉·cnn·视觉检测·卷积神经网络
羊小猪~~8 小时前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
视觉语言导航10 小时前
RAL-2025 | 清华大学数字孪生驱动的机器人视觉导航!VR-Robo:面向视觉机器人导航与运动的现实-模拟-现实框架
人工智能·深度学习·机器人·具身智能
羊小猪~~11 小时前
【NLP入门系列五】中文文本分类案例
人工智能·深度学习·考研·机器学习·自然语言处理·分类·数据挖掘
李师兄说大模型11 小时前
KDD 2025 | 地理定位中的群体智能:一个多智能体大型视觉语言模型协同框架
人工智能·深度学习·机器学习·语言模型·自然语言处理·大模型·deepseek
锅挤12 小时前
深度学习5(深层神经网络 + 参数和超参数)
人工智能·深度学习·神经网络