在将照片及其分类预先定义到文件夹的第一步之后,我正在使用keras库对数据进行预处理。我不想手动执行此操作,所以我制作了自己的脚本,但是该脚本无法正常工作,有人可以帮助调试吗?
它并没有给出特定的错误,但是只是没有完成任务而停在照片ISIC_0000006
上。 wah
是照片被归类为癌,yay
是照片被归类为良性癌症。如果数据集不好,则返回1
,如果可以,则返回0
。我还是不知道问题。
This是我正在使用的数据集。
顺便说一下,我还是个孩子,所以请不要指望我对编程了解太多。
数据集中的示例行:
ISIC_0000000 = 0
ISIC_0000001 = 0
ISIC_0000002 = 1
ISIC_0000003 = 0
ISIC_0000004 = 0
ISIC_0000005 = 1
我的代码:
import pandas as pd
import os
dataset = pd.read_csv('ISIC-2017_Training_Part3_GroundTruth.csv')
dataset = dataset.iloc[:, :-1]
x = 0
xb = 0
xm = 0
prevName = 'ISIC_0000000.jpg'
newName = 'yay/benign1'
while(x <= 1500):
x = x + 1
if prevName == dataset.iloc[x-1, 0] + '.jpg':
if x < 10:
prevName = 'ISIC_000000' + str(x-1) + '.jpg'
if prevName == 'ISIC_0000005.jpg': #dataset has random hole so skips over
x = x + 1
prevName = 'ISIC_0000006.jpg'
elif x < 100:
prevName = 'ISIC_00000' + str(x-1) + '.jpg'
elif x < 1000:
prevName = 'ISIC_0000' + str(x-1) + '.jpg'
else:
prevName = 'ISIC_000' + str(x-1) + '.jpg'
if dataset.iloc[x-1, 1] == 1:
xm = xm + 1
newName = 'melanoma' + str(xm)
else:
xb = xb + 1
newName = 'benign' + str(xb)
if newName == 'benign' + str(xb):
newName = 'yay/' + newName + '.jpg'
os.rename(prevName, newName)
else:
newName = 'wah/' + newName + '.jpg'
os.rename(prevName, newName)
prevName = 'ISIC_000000' + str(x+1) + '.jpg'
编辑!!!这是我的新代码,这要归功于Abhineet Gupta,他能够进一步浏览数据集,但奇怪的是在照片34处停止了
import pandas as pd
import os
dataset = pd.read_csv('_ISIC-2017_Training_Part3_GroundTruth.csv')
dataset = dataset.iloc[:, :-1]
x = 0
xb = 0
xm = 0
prevName = 'ISIC_0000000.jpg'
newName = 'yay/benign1'
while(x <= 1500):
x = x + 1
prevName = 'ISIC_' + str(x).zfill(7) + '.jpg'
if prevName == dataset.iloc[x-1, 0] + '.jpg':
if x == '0000005':
x = x + 1
prevName = 'ISIC_000006.jpg'
if dataset.iloc[x-1, 1] == 1:
xm = xm + 1
newName = 'melanoma' + str(xm)
else:
xb = xb + 1
newName = 'benign' + str(xb)
if newName == 'benign' + str(xb):
newName = 'yay/' + newName + '.jpg'
os.rename(prevName, newName)
else:
newName = 'wah/' + newName + '.jpg'
os.rename(prevName, newName)
prevName = 'ISIC_000000' + str(x+1) + '.jpg'
最后编辑:原来不是代码错误,只是.csv文件被弄乱了。感谢Abhineet Gupta和mrk提供的解决方案!!!
答案 0 :(得分:1)
基于上述代码,该错误似乎在以下代码部分中出现-
11: x = x + 1
12: if prevName == dataset.iloc[x-1, 0] + '.jpg':
13: if x < 10:
14: prevName = 'ISIC_000000' + str(x-1) + '.jpg'
15: if prevName == 'ISIC_0000005.jpg':
16: x = x + 1
17: prevName = 'ISIC_0000006.jpg'
...
36: prevName = 'ISIC_000000' + str(x+1) + '.jpg'
因此,如果x == 5
和prevName == 'ISIC_0000005.jpg'
,
第11行分配x -> 6
,
第12行和第13行是true
,
第14行分配prevName -> 'ISIC_0000005.jpg'
第15行是true
,
第16行和第17行分配x -> 7
和prevName -> 'ISIC_0000006.jpg'
然后,在if
语句之外的第36行(最后一行)将分配prevName -> 'ISIC_0000008.jpg'
当循环重新开始时,第11行分配x -> 8
,
第12行为false
,程序继续进行直到x > 1500
,而没有进入if
块。
要修复代码,我建议使用
str(x).zfill(7)
用前导零填充整数,例如对于x = 5
返回'0000005'
,对于x = 95
返回'0000095'
。这样就无需再根据x
中的位数指定前导零,从而简化了代码。
答案 1 :(得分:0)
由于您正在读取csv
作为分隔符的'='
文件,因此必须指定在加载时至少是我在尝试运行代码时遇到的错误。
尝试将行更改为:
dataset = pd.read_csv('ISIC-2017_Training_Part3_GroundTruth.csv', sep = '=')
进行此更改后,代码将通过您提供的整个csv文件为我运行。
注意: here是您肯定会关注图像增强的库。 >