1、sorted 排序
sorted_data = sorted(data.items(), key=lambda data: int(data[1]['input'][0]['shape'][0]), reverse=True)
lambda函数也叫匿名函数,即,函数没有具体的名称。
冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。
此时用在排序功能上,可以根据data中的输入shape[0]的值从大到小(reverse=True表示降序,默认False表示升序),对data中的元组进行重新排序。
2、统计文件夹下.jpg数量
[os.path.join(train_images_path, image_name)
for image_name in os.listdir(train_images_path)
if image_name.endswith('.jpg')]
os.path.join将路径与文件名合并一起;其中image_name在后面的for语句中遍历,os.listdir显示路径下所有文件名;最后由if语句判断image_name.endswith后缀是否为.jpg
使用len()即可统计数量
image_count = len([os.path.join(train_images_path, image_name)
for image_name in os.listdir(train_images_path)
if image_name.endswith('.jpg')])
3、按照文件名进行排序
image_dir = "images/"
image_type = 'jpg'
files = []
for image_name in os.listdir(image_dir):
if image_name.endswith('.{}'.format(image_type)) \
and not image_name.startswith('.'):
files.append(os.path.join(image_dir, image_name))
x = sorted(files)
print(x)
4、将前面85%的图片和标签作为训练集,保存成txt文件
name = 'train'
eval_num = int(image_count * 0.15)
images = images[:-eval_num]
labels = labels[:-eval_num]
with open('./{}.txt'.format(name), 'w') as f:
for i in range(len(images)):
f.write('{}\t{}\n'.format(images[i], labels[i]))
[:-eval_num]表示从倒数eval_num位置往前所有;‘{}’.format(x)表示{}为x的格式化表示;\t表示tab跳格;\n表示回车换行;images和labels均为按照文件名排序后得到的结果。
5、读入文件内容,将每行的内容分割,并跳过\t
with open('./train.txt', 'r') as f:
for line in f.readlines():
print(line.strip().split('\t'))
6、断言判断语句assert,如果正确无输出结果,错误则报告错误结果
mode = 'train1'
assert mode in ['train', 'test', 'predict'], \
"mode should be 'train' or 'test' or 'predict', but got {}".format(mode)