实验步骤
首先讲数据集上传至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() # 返回标准路径 二者的区别