机器学习管道实践 ML Pipeline:1. 训练数据准备

机器学习管道实践 ML Pipeline:1. 训练数据准备

我们将通过一系列文章学习机器学习管道(Machine Learning Pipeline)的一个实例。这里我们将先对训练数据做一些梳理,以满足机器学习模型的输入要求。



搭建虚拟环境

首先,我们在Windows的平台下安装Anaconda3。具体的安装步骤此处略过,参见Anaconda的官方文档。

安装完后,新建虚拟环境。使用conda create -n your_env_name python=X.X(2.7、3.6等)命令创建python版本为X.X、名字为your_env_name的虚拟环境。

这里我输入了conda create -n mlAppFlaskMlopsEnv python=3.8

安装完默认的依赖后,我们进入虚拟环境:conda activate mlAppFlaskMlopsEnv。注意,如果需要退出,则输入conda deactivate。另外,如果Terminal没有成功切换到虚拟环境,可以尝试conda init powershell,然后重启terminal。

然后,我们在虚拟环境中下载好相关依赖:pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

所有的训练数据集保存于data文件夹中。文件夹的结构类似如下:

-- data
  -- category1
    -- category10001.jpg
    -- category10002.jpg
    -- category1XXXX.jpg
  ...
  -- categoryX

提取所有训练数据

所以,我们首先将data文件夹下的所有文件名都搜集出来,并且将每一个训练图像数据的路径找到,存放于一个list中,然后一次性导入所有训练样本。

# read the folders in a list
folder = os.listdir('data')

# read all image directories in a list
all_path =[]
for f in folder:
    all_path += glob('./data/{}/*.jpg'.format(f))

# read all image and label
img_all = skimage.io.ImageCollection(all_path)

提取所有标签

从这些样本文件夹的命名中,我们可以提取出每个样本对应的标签值。比如./data/ElephantHead\\0000000097.jpg对应的标签就是Elephant

def extract_label(text):
    try:
        # for folders contain Head suffix, i.e. PigeonHead
        label = re.search(r'./data/(.*?)Head\\',text).group(1)
    except:
        # for folders NOT contain Head suffix, i.e. Natural
        label = re.search(r'./data/(.*?)\\',text).group(1)
    return label.lower()
labels = list(map(extract_label,img_all.files))

打包与保存

最后,我们将所有数据打包进一个dict,保存进data_animals_head_20.pickle文件中。
数据包括所有训练数据(data),每一个训练数据对应的标签(target),以及这个数据集中标签的集合(labels)。

data = dict()
data['description'] ='There are 20 classes and 2057 images are there. All the images are 80 x 80 (rgb)'
data['data'] = img_all_arrs         # img_all 转换成np.array后
data['target'] = labels
data['labels'] = set(labels)        # 会自动除重,只剩下每个unique的label。

pickle.dump(data,open('./pickle_files/data_animals_head_20.pickle','wb'))

观察与结果

当我们完整地运行1_data_prepare.py后,如下为所有标签的名称,以及对应训练数据的数量:

{'cat': 159, 'dog': 132, 'panda': 118, 'pigeon': 115, 'tiger': 113, 'cow': 103, 'deer': 103, 'duck': 103, 'lion': 102, 'bear': 101, 'chicken': 100, 'eagle': 100, 'elephant': 100, 'human': 100, 'monkey': 100, 'mouse': 100, 'rabbit': 100, 'sheep': 100, 'wolf': 100, 'natural': 8}

此图看得更为直观。

在这里插入图片描述

下图为每一个标签类的样张:

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破浪会有时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值