在服务器上用GPU跑,出现了这个问题,下面是错误
用CPU运行之后,出现的错误是这样的
我就通过调试,寻找target41的位置
上网找了很长时间,很多观看数量很多的文章说的是标签错误,经过思考,我明白了标签是什么意思!!!!!!!!!
这就需要了解我实验的背景了,我的数据集是一个分类为0-59,共60个种类的叶片的识别,每个文件夹下有图片,但是有些种类图片太少,所以就把一部分类别的图片移掉了,如图。
举个例子,比如我移掉了20~39这些种类的文件夹,其实我的种类就剩下40种了(但还是存在41,42.....59这些文件夹),但是我没有重新改变文件夹的名字,而我生成标签的时候是根据文件夹的名字生成的,那么数据中就会出现标签为41的图片,但是其实我的总类只有40种,就会报错。
解决方法:
把文件夹的名字重新排序,然后按照文件夹的名字设置标签,就成功了。
下面是我重新排序的代码
import os
# 用于对生成的文件夹再次排序
train_path="../dataset/train"
validation_path="../dataset/validation"
def sort_dir(path,dirname=''):
files = os.listdir(path)
for i, file in enumerate(files):
#### 因为i是从0开始的
NewName = os.path.join(path, str(i)+dirname)
OldName = os.path.join(path, file)
os.rename(OldName, NewName)
def main():
#### 把所有的文件名字后面加一个a,防止出现重名。否则会出现问题“当文件已存在时,无法创建该文件”
sort_dir(train_path,'a')
sort_dir(train_path)
sort_dir(validation_path,'a')
sort_dir(validation_path)
if __name__=='__main__':
main()