pytorch多层感知机实现假钞识别(完整项目构建)

本文详细介绍了如何构建银行票据识别项目,包括配置超参数、数据预处理、数据集构建、模型设计、训练与评估过程。关键步骤包括划分训练集、验证集和测试集,使用多层感知机模型,并通过TensorBoard监控训练进度。最终在测试集上实现了100%的准确率。

1 项目构建

在这里插入图片描述
构建项目文件夹Banknote,以及子文件夹与py文件。

名称 作用
data目录 存放原始数据与预处理后切分为训练集、验证机、测试集的数据
log目录 训练过程中使用tensorboardX保存的指标数值,如损失、精确度等
model_save目录 存放不同训练阶段的模型,最后找出个最优的用于测试集
config.py 保存超参数
dataset_banknote.py Banknote数据类,用于训练时获取数据
inference.py 挑选模型在测试集上运行
model.py 算法模型
preprocess.py 对原始数据进行预处理,划分为训练集、验证集、测试集
trainer.py 模型训练代码

2 超参数设置 config.py

config.py文件如下:

# banknote clasification config

class Hyperparameter():
    # ###################################################################
    #                               Data
    # ###################################################################
    device='cuda'
    data_dir='./data/'
    data_path='./data/data_banknote_authentication.txt'
    trainset_path='./data/train.txt'
    devset_path='./data/dev.txt'
    testset_path='./data/test.txt'

    in_feature=4 # input feature dim
    out_dim=2 # output feature dim (classes number)
    seed=1234 # random seed

    # ###################################################################
    #                          Model Structure
    # ###################################################################
    layer_list=[in_feature, 64, 128, 64, out_dim]

    # ###################################################################
    #                          Experiment
    # ###################################################################
    batch_size=64
    init_lr=1e-3 # 初始学习率
    epoch=100
    verbose_step = 32 # 日志打印间隔
    save_step = 200 # 模型保存间隔

HP=Hyperparameter()

在其他py文件中导入cofig.HP即可获取到超参数。

from config import HP

3 数据集预处理 preprocess.py

在这里插入图片描述
Banknote数据集约有1300条数据,前四列为四个特征值,最后一个列为标签。
使用process.py文件将原始数据data_banknote_authentication.txt切分为训练集、测试集、训练集(train.txt、dev.txt、test.txt)。

# preprocess original data
# shuffle and split into trainset,devset,testset

import numpy as np
from config import HP
import os

trainset_ratio=0.7
devset_ratio=0.2
testset_ratio=0.1

np.random.seed(1234)
dataset=np.loadtxt(HP.data_path, delimiter=',')
np.random.shuffle(dataset)
n_items=len(dataset)
trainset_num=int(n_items*trainset_ratio)
devset_num=int(n_items*devset_ratio)
#testset_num=int(data_len*trainset_ratio)

trainset= dataset[:trainset_num]
devset= dataset[trainset_num:trainset_num + devset_num]
testset=dataset[trainset_num + devset_num:]

np.savetxt(fname=os.path.join(HP.data_dir,'train.txt'),X=trainset,delimiter=',')
np.savetxt(fname=os.path.join(HP.data_dir,'dev.txt'),X=devset,delimiter=',')
np.savetxt(fname=os.path.join(HP.data_dir,'test.txt'),X=testset,delimiter=',')

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值