华为云实验-Alexnet

本文档详细介绍了如何将数据集上传至OBS并进行数据划分,使用脚本split_data.py创建训练集和验证集。接着,通过Python代码进行模型训练,最终保存最优模型Alexnet.pth。此外,还展示了使用该模型对测试图片进行预测的过程,包括月季、玫瑰、向日葵和飞机的分类结果。同时,文章提及了数据集路径的调整以及相关路径知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验步骤

首先讲数据集上传至OBS,在OBS中上传至云端,具体实现如下:

import moxing as mox
dataset_url = “obs://wkkk/flower_data/”
mox.file.copy_parallel(dataset_url,"./)

其中./为当前文件夹,…/为上一级文件夹(两个点)。

在Terminal里输入:

cd work
ls
python train.py

训练结束后得到结果最好的模型Alexnet.pth保存到当前文件夹。
!](https://img-blog.csdnimg.cn/a3c355d3adf44cc18bfb56874438424f.png)
在这里插入图片描述
在这里插入图片描述
在Terminal中输入:

ls
python predict.py

开始对测试图片进行预测:
预测月季的结果:
预测月季的结果
预测玫瑰的结果:
预测玫瑰的结果
预测向日葵的结果:
预测向日葵的结果
预测飞机的结果:
预测飞机的结果

总结

关于实验数据集的划分
采用的脚本-split_data.py。
具体操作:shift+右击,打开powellshell窗口,输入:

python .\split_data.py

import os
from shutil import copy, rmtree
import random


def mk_file(file_path: str):
    if os.path.exists(file_path):
        # 如果文件夹存在,则先删除原文件夹在重新创建
        rmtree(file_path)
    os.makedirs(file_path)


def main():
    # 保证随机可复现
    random.seed(0)

    # 将数据集中10%的数据划分到验证集中
    split_rate = 0.1

    # 指向你解压后的flower_photos文件夹
    cwd = os.getcwd()
    data_root = os.path.join(cwd, "flower_data")
    origin_flower_path = os.path.join(data_root, "flower_photos")
    assert os.path.exists(origin_flower_path), "path '{}' does not exist.".format(origin_flower_path)

    flower_class = [cla for cla in os.listdir(origin_flower_path)
                    if os.path.isdir(os.path.join(origin_flower_path, cla))]

    # 建立保存训练集的文件夹
    train_root = os.path.join(data_root, "train")
    mk_file(train_root)
    for cla in flower_class:
        # 建立每个类别对应的文件夹
        mk_file(os.path.join(train_root, cla))

    # 建立保存验证集的文件夹
    val_root = os.path.join(data_root, "val")
    mk_file(val_root)
    for cla in flower_class:
        # 建立每个类别对应的文件夹
        mk_file(os.path.join(val_root, cla))

    for cla in flower_class:
        cla_path = os.path.join(origin_flower_path, cla)
        images = os.listdir(cla_path)
        num = len(images)
        # 随机采样验证集的索引
        eval_index = random.sample(images, k=int(num*split_rate))
        for index, image in enumerate(images):
            if image in eval_index:
                # 将分配至验证集中的文件复制到相应目录
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(val_root, cla)
                copy(image_path, new_path)
            else:
                # 将分配至训练集中的文件复制到相应目录
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(train_root, cla)
                copy(image_path, new_path)
            print("\r[{}] processing [{}/{}]".format(cla, index+1, num), end="")  # processing bar
        print()

    print("processing done!")


if __name__ == '__main__':
    main()

关于数据集路径的使用:
原代码:

data_root = os.path.abspath(os.path.join(os.getcwd(), "../.."))  # get data root path
image_path = os.path.join(data_root, "data_set", "flower_data")  # flower data set path

修改为:

data_root = os.path.abspath(os.getcwd())  # get data root path
image_path = os.path.join(data_root, "data_set", "flower_data")  # flower data set path

原因:原代码中的数据集data_set存放地方与我不一致。
因此需要进行与当前路径拼接。
补充一些路径知识:

os.getcwd() # 获得当前路径,返回当前目录
os.path.join() # 连接两个或者多个路径 关于该函数的更多理解
os.path.abspath() # 返回绝对路径
os.path.realpath() # 返回标准路径 二者的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值