今天出现这个错误后,在谷歌和百度上都查不到,有些人是打成了endwith,或者是startwith。
所以我抱着怀疑的态度,去翻找了一下我自己写的代码,发现我写错成了endswich。
其实正确拼写是endswith啊!!!
# 数据集主目录
DATA_ROOT = 'D:\BaiduNetdiskDownload\pycv-learning\data\spot_data_cls'
# 训练集验证集划分比例,8:2
train_ratio = 0.8
num_epochs = 5
learning_rate = 1e-3
resized_img_shape = (224, 224, 3)
batch_size = 16
# 创建path对象
DATA_ROOT_PATH = Path(DATA_ROOT)
# 获取所有类别图片对应的目录
ClASS_list = [str(p) for p in DATA_ROOT_PATH.iterdir() if p.is_dir()
and not str(p).endswith('Set')
and not str(p).startswith('.')]
dict_num2name = {} # 数据集标签序号to类别名称的转换字典
dict_name2num = {} # 数据集类别名称to标签序号的转换字典
sep_class_paths = {} # 获取数据集下的各个类别的图片路径
train_whole_paths,train_whole_labels,val_whole_paths,val_whole_labels = [],[],[],[]
for i,path in enumerate(ClASS_list):
dict_num2name[i] = Path(path).name # {0: 'copper', 1: 'edge', 2: 'normal', 3: 'overlap', 4: 'splash', 5: 'twist'}
dict_name2num[Path(path).name] = i # {'copper': 0, 'edge': 1, 'normal': 2, 'overlap': 3, 'splash': 4, 'twist': 5}
sep_class_paths[Path(path).name] = list(map(lambda x : str(x), Path(path).iterdir()))
np.random.shuffle(sep_class_paths[Path(path).name])
train_whole_paths.extend(sep_class_paths[Path(path).name][:int(train_ratio*len(sep_class_paths[Path(path).name]))])
val_whole_paths.extend(sep_class_paths[Path(path).name][int(train_ratio*len(sep_class_paths[Path(path).name])):])
# 对全部的训练集、验证集图片路径进行打乱
np.random.shuffle(train_whole_paths)
np.random.shuffle(val_whole_paths)
# 根据图片文件路径的上一级路径的名称来确定label
for path in train_whole_paths:
serial_number = dict_name2num[os.path.basename(os.path.abspath(path + '/../'))]
train_whole_labels.append(serial_number)
for path in val_whole_paths:
serial_number = dict_name2num[os.path.basename(os.path.abspath(path + '/../'))]
val_whole_labels.append(serial_number)