机器学习管道实践 ML Pipeline:1. 训练数据准备
我们将通过一系列文章学习机器学习管道(Machine Learning Pipeline)的一个实例。这里我们将先对训练数据做一些梳理,以满足机器学习模型的输入要求。
机器学习管道实践 ML Pipeline:1. 训练数据准备
我们将通过一系列文章学习机器学习管道(Machine Learning Pipeline)的一个实例。这里我们将先对训练数据做一些梳理,以满足机器学习模型的输入要求。
- Win10
- IDE:VSCode
- Anaconda
- 代码地址
搭建虚拟环境
首先,我们在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}
此图看得更为直观。

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

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)