深度学习6---案例:人民币识别实现

本文详细介绍了人民币识别的实现过程,包括图像识别的基本流程、深度学习算法的应用,以及具体的实现步骤,如数据集拆分、主文件编写、数据集读取、网络结构设计、预测和单张图片的预测等。
摘要由CSDN通过智能技术生成

一、图像识别流程

1. 准备数据集
   1)采集图像
   2)拆分数据集
      训练集、测试集  8:2
   3)读图像和分批
   4)图像预处理(缩放、标准化处理)
2. 选择网络结构
    简单任务:lenet、Alexnet
    中等任务:vgg、googlenet
    复杂任务:resnet18、renset50
3. 选择损失函数
   衡量真实值和预测值之间的误差
   分类问题: 交叉熵损失函数
   回归问题:均方误差损失函数
4. 选择优化器(优化器作用:选择一种方法更新参数)
   优化器的一种为:随机梯度下降  w = w - lr*grad
5. 训练算法
for i in range(100):将训练集遍历N遍
   for 每批数据 in 所有训练数据:
       output = model(每批数据)  # 模型预测
       loss_val = loss_fn(output, target)
       根据loss进行反向传播
       利用优化器更新model中参数


# 保存模型
save(model中参数)

# -------------------------------------------------------------------------
数据集拆分
1元:100张
100元:100张
训练集:80张1元 + 80张100元
测试集:20张1元 + 20张100元

二、深度学习算法流程

在这里插入图片描述在这里插入图片描述

三、人民币识别实现

1、数据集拆分

RMB_1数据拆分.py

import os
import random
import shutil

random.seed(1)

"""
数据集拆分
1元:100张
100元:100张
训练集:80张1元 + 80张100元
测试集:20张1元 + 20张100元


拆分后RMB_split
>train
>> 1元 
    80张图像
>> 100元  
    80张图像
>test
>> 1元 
    20张图像
>> 100元  
    20张图像
"""

# 根路径、子路径、文件名
for root, subs, files in os.walk("E:\pycharm\pythonProject\深度学习./RMB_data"):
    for sub in subs:
        sub_path = os.path.join(root, sub)
        # print(sub_path)
        all_images = os.listdir(sub_path)

        random.shuffle(all_images)  # 打乱列表中的元素

        for ind, i in enumerate(all_images):
            org_img_name = os.path.join(sub_path, i)
            print(ind, org_img_name)
            if ind < 80:
                save_img_name = org_img_name.replace("RMB_data", "RMB_split/train")
            else:
                save_img_name = org_img_name.replace("RMB_data", "RMB_split/test")
            # save_path = save_img_name.split("\\")[0]
            save_path = os.path.dirname(save_img_name)
            # print(save_path)
            # 创建目录
            # exist_ok=True 如果文件夹存在,不再次创建,也不报错
            os.makedirs(save_path, exist_ok=True)

            # 源路径、目的路径
            shutil.copy(org_img_name, save_img_name)

在这里插入图片描述

2、主文件

RMB_2主文件.py

from torch.utils.data import DataLoader  # 数据分批
from 深度学习.RMB_3数据集读取 import RMB_Dataset
from torchvision import transforms
import pdb
from 深度学习.RMB_4网络结构 import Lenet
import torch.nn as nn
import torch.optim as optim
import numpy as np
import torch

# 随机种子
torch.manual_seed(1)

# -----------------------超参数--------------------------------
LR = 0.05  # 学习率
max_epoch = 20  # 最大迭代次数
interval = 2  # 每训练两次 测试一次
test_batch_size = 4
best_acc = 0

# ---------------------------1/5 数据模块-------------------------------------------------
train_data_path = "RMB_split/train"
test_data_path = "RMB_split/test"

# 图像处理的均值和标准差
# ImageNet数据集 上图像的均值和标准差如下
norm_mean = [0.485, 0.456, 0.406]
norm_std = [0.229, 0.224, 0.225]
# 数据预处理的一些操作。
train_transform = transforms.Compose([
    transforms.Resize((32, 32)),  # 缩放到统一尺寸
    transforms.RandomCrop(32, padding=4),  # 图像四周补像素
    transforms.ToTensor(),  # 转换为tensor,会被归一化为0-1
    transforms.Normalize(norm_mean, norm_std),  # 数据标准化:减均值 除方法
])

test_transform = transforms.Compose([
    transforms.Resize((32, 32)),  # 缩放到统一尺寸
    transforms.ToTensor
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值