предварительная обработка набора данных для Python AI - PullRequest
1 голос
/ 02 мая 2019

Я использую библиотеку keras для предварительной обработки моих данных после начального шага, состоящего в том, чтобы предварительно определить фотографии в папке с их классификацией.Я не хотел делать это вручную, поэтому я сделал свой собственный скрипт, но он не работает, может кто-нибудь помочь отладить его?Это не дает конкретной ошибки, но просто не заканчивает работу и останавливается на фотографии ISIC_0000006.wah - если фотография классифицирована как раковая, yay - если фотография классифицирована как доброкачественный рак.Набор данных возвращает 1, если он плохой, и 0, если все в порядке.Я до сих пор не знаю проблемы.
Этот - это набор данных, который я использую.

Кстати, я все еще ребенок, поэтому, пожалуйста, не ждите, что яслишком много знаю о программировании.

Примеры строк из набора данных:

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'

РЕДАКТИРОВАТЬ !!!Это мой новый код, благодаря Абхине Гупте, которая может пройти дальше через набор данных, но странным образом останавливается на фотографии 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 за решения !!!

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Судя по приведенному выше коду, ошибка возникает в следующем разделе кода -

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'

Затем строка 36 (последняя строка), которая находится вне оператора if, назначит prevName -> 'ISIC_0000008.jpg'

Когда цикл перезапускается, строка 11 присваивает x -> 8,

Строка 12 - false, и программа продолжается до x > 1500, не входя в блок if.

Чтобы исправить код, я рекомендую использовать str(x).zfill(7), который дополняет целое число ведущими нулями, например, для x = 5 возвращается '0000005', а для x = 95 возвращается '0000095'. Это избавит от необходимости указывать начальные нули на основе количества цифр в x и упростит ваш код.

0 голосов
/ 02 мая 2019

Поскольку вы читаете файл csv с '=' в качестве разделителя, вы должны указать, что при загрузке, по крайней мере, это была ошибка, с которой я столкнулся при попытке запустить ваш код.

Попробуйте изменить свою строку на:

dataset = pd.read_csv('ISIC-2017_Training_Part3_GroundTruth.csv', sep = '=')

С этим изменением код будет проходить для меня через весь предоставленный вами CSV-файл.

Примечание: Библиотека, на которую вы обязательно должны взглянуть для увеличения изображения, находится здесь здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...