У меня проблема с загрузкой моего набора данных в Tensorflow (Python 3.7) - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь загрузить набор данных изображений в тензорный поток, но у меня возникла проблема с его правильной загрузкой.На самом деле у меня есть папка с именем PetImages на диске C, которая содержит две папки с именами cat и dog.Каждая папка содержит больше 12450 изображений, таким образом, в общей сложности это 24500 плюс изображения.Я загружаю их со следующим кодом:

import numpy as np
import matplotlib.pyplot as plt
import os
import cv2
DATADIR = "C:\Datasets\PetImages"
CATEGORIES = ["Dog","Cat"]
for the category in CATEGORIES:
path = os.path.join(DATADIR, category)

for img in os.listdir(path):
    img_array = cv2.imread(os.path.join(path,img), cv2.IMREAD_GRAYSCALE)
    plt.imshow(img_array, cmap="gray")
    plt.show()
    break
break

Результат кода выглядит совершенно нормально, и он показывает первое изображение папки.Затем я преобразую форму всего массива в желаемую частоту пикселей с помощью следующего кода:

IMG_SIZE=50
new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
plt.imshow(new_array, cmap = "gray")
plt.show()

Эта часть также хороша, но затем я хочу смешать (перемешать) изображения, чтобы я мог озадачить системуи проверьте точность таким способом, но проблема в том, что он показывает только 12450 изображения, перерисованные после этого кода:

training_data = []
def create_training_data():
for category in CATEGORIES:
    path = os.path.join(DATADIR, category)
    class_num = CATEGORIES.index(category)
for img in os.listdir(path):
    try:
        img_array = cv2.imread(os.path.join(path,img), 
cv2.IMREAD_GRAYSCALE)
        new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
        training_data.append([new_array, class_num])
    except Exception as e:
        pass       
create_training_data()
print(len(training_data)

Тогда при использовании случайного числа я не получаю успех, чтобы перетасовать изображения изобе папки, он показывает только значения одной папки.

import random   
random.shuffle(training_data)
for the sample in training_data[:10]:  
print(sample[1])

Но мой результат - 1 1 1 1 1 вместо случайно сгенерированного как 0 1 0 1 0 0 0 1 1 этот стиль, я имею в виду непредсказуемый, следующий будет 1 или 0 .

Ваша помощь будет ценной для меня.Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Вы можете попытаться перетасовать маску или указатель тренировочных данных

import random
index=[k for k in range(len(training_data))]
shuffIndex=random.shuffle(index)
shuffTrainigData=[training_data[val] for val in shuffIndex]

Надеюсь, это поможет

0 голосов
/ 26 января 2019

Похоже на ошибку отступа. Ваш второй цикл for находится за пределами вашего первого цикла for, что приводит к полному завершению первого цикла и задает для class_num значение 1 до того, как будет введен второй цикл. Вы, вероятно, хотите их вложить. Попробуйте:

def create_training_data():
    for category in CATEGORIES:
        path = os.path.join(DATADIR, category)
        class_num = CATEGORIES.index(category)
        for img in os.listdir(path):
            try:
                img_array = cv2.imread(os.path.join(path,img), cv2.IMREAD_GRAYSCALE)
                new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
                training_data.append([new_array, class_num])
            except Exception as e:
                pass       
create_training_data()
print(len(training_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...