首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python AI的数据集预处理

python AI的数据集预处理
EN

Stack Overflow用户
提问于 2019-05-02 17:24:19
回答 2查看 124关注 0票数 1

我正在使用keras库对数据进行预处理,这是在将照片预先定义到带有分类的文件夹的初始步骤之后。我不想手动这么做,所以我自己制作了脚本,但是它不起作用,有人能帮我调试一下吗?它没有给出一个具体的错误,但它只是没有完成工作,并停留在照片ISIC_0000006wah是如果照片被分类为癌变,yay是如果照片被分类为良性癌症。dataset返回一个1 (如果它是坏的)和0 (如果它是好的)。我还是不知道有什么问题。

是我正在使用的数据集。

顺便说一下,我还只是个孩子,所以请不要指望我对编程有太多的了解。

数据集中的示例行:

ISIC_0000000 =0 ISIC_0000001 =0 ISIC_0000002 =1 ISIC_0000003 =0 ISIC_0000004 =0 ISIC_0000005 =1

我的代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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的解决方案!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-02 18:11:21

基于上述代码,错误似乎发生在以下代码部分-

代码语言:javascript
复制
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 == 5prevName == 'ISIC_0000005.jpg'

第11行指定x -> 6

第12行和13行是true

第14行分配prevName -> 'ISIC_0000005.jpg'

第15行是true

第16行和第17行分配x -> 7prevName -> '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
EN

Stack Overflow用户

发布于 2019-05-02 17:53:29

由于使用csv作为分隔符读取'='文件,所以必须在加载时指定这一点,至少这是我在尝试运行代码时遇到的错误。

尝试将您的行更改为:

代码语言:javascript
复制
dataset = pd.read_csv('ISIC-2017_Training_Part3_GroundTruth.csv', sep = '=')

通过此更改,代码将在您提供的整个csv文件中运行。

注释:--一个库,您一定要看一下,因为图像增强是可以找到的https://github.com/mdbloice/Augmentor

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55957439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档