Как создать путь к моим данным для моего CNN в записной книжке jupyter

#python-3.x #tensorflow #keras #jupyter-notebook #conv-neural-network

#python-3.x #тензорный поток #keras #jupyter-notebook #conv-нейронная сеть

Вопрос:

Введение и настройка

Итак, я уже некоторое время пытаюсь создать простую сверточную нейронную сеть. Я следовал простому руководству, которое можно найти по ссылке!

Это простой тест «кошка против собаки» (2 категории)

Я настроил свой jupyter / tensorflow / keras в C:Userslabadmin

Я понял, что мне просто нужно указать путь из labadmin, чтобы реализовать мои данные для тестирования и обучения.

Поскольку я не уверен, что вызывает ошибку, я вставил весь код и ошибку, я думаю, что речь идет о том, что система не получает данные.

Папка с настройкой данных выглядит следующим образом:

у labadmin есть папка с именем data, в которой есть две папки

  • Обучение
  • тест

Изображения кошек и собак перемешиваются в обеих папках. В каждой папке более 10000 изображений, поэтому их должно быть достаточно,

Это мой код:

 from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense 
classifier = Sequential()
classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))
 
classifier.add(Flatten())
 
classifier.add(Dense(output_dim = 128, activation = 'relu'))
classifier.add(Dense(output_dim = 1, activation = 'sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics=['accuracy'])

import pandas as pd
from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory(
        'data\training',
        target_size=(64, 64),
        batch_size=32,
        class_mode='categorical',
        shuffle=False)

test_set = test_datagen.flow_from_directory(
        'data\test',
        target_size=(64, 64),
        batch_size=32,
        class_mode='categorical',
        shuffle=False)

from IPython.display import display
from PIL import Image

classifier.fit_generator(
        training_set,
        steps_per_epoch=8000,
        epochs=10,
        validation_data = test_set,
        validation_steps = 800)

import numpy as np
from keras_preprocessing import image
test_image = image.load_img('data\random.jpg', target_size=(64, 64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = classifier.predict(test_image)
training_set.class_indices
if result[0][0]>= 0.5:
    prediction = 'dog'
else:
    prediction = 'cat'
print(prediction)
  

Я получаю следующую ошибку:

 C:UserslabadminMiniconda3envstensorflowlibsite-packagesipykernel_launcher.py:26: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), input_shape=(64, 64, 3..., activation="relu")`
C:UserslabadminMiniconda3envstensorflowlibsite-packagesipykernel_launcher.py:35: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(activation="relu", units=128)`
C:UserslabadminMiniconda3envstensorflowlibsite-packagesipykernel_launcher.py:36: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(activation="sigmoid", units=1)`

Found 0 images belonging to 0 classes.
Found 0 images belonging to 0 classes.
Epoch 1/10

---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-5-393aaba195e9> in <module>
     82         epochs=10,
     83         validation_data = test_set,
---> 84         validation_steps = 800)
     85 
     86 # Our image we now send through to test

~Miniconda3envstensorflowlibsite-packageskeraslegacyinterfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `'   object_name   '` call to the '  
     90                               'Keras 2 API: '   signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

~Miniconda3envstensorflowlibsite-packageskerasenginetraining.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
   1416             use_multiprocessing=use_multiprocessing,
   1417             shuffle=shuffle,
-> 1418             initial_epoch=initial_epoch)
   1419 
   1420     @interfaces.legacy_generator_methods_support

~Miniconda3envstensorflowlibsite-packageskerasenginetraining_generator.py in fit_generator(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
    179             batch_index = 0
    180             while steps_done < steps_per_epoch:
--> 181                 generator_output = next(output_generator)
    182 
    183                 if not hasattr(generator_output, '__len__'):

~Miniconda3envstensorflowlibsite-packageskerasutilsdata_utils.py in get(self)
    707                     "`use_multiprocessing=False, workers > 1`."
    708                     "For more information see issue #1638.")
--> 709             six.reraise(*sys.exc_info())

~Miniconda3envstensorflowlibsite-packagessix.py in reraise(tp, value, tb)
    691             if value.__traceback__ is not tb:
    692                 raise value.with_traceback(tb)
--> 693             raise value
    694         finally:
    695             value = None

~Miniconda3envstensorflowlibsite-packageskerasutilsdata_utils.py in get(self)
    683         try:
    684             while self.is_running():
--> 685                 inputs = self.queue.get(block=True).get()
    686                 self.queue.task_done()
    687                 if inputs is not None:

~Miniconda3envstensorflowlibmultiprocessingpool.py in get(self, timeout)
    642             return self._value
    643         else:
--> 644             raise self._value
    645 
    646     def _set(self, i, obj):

~Miniconda3envstensorflowlibmultiprocessingpool.py in worker(inqueue, outqueue, initializer, initargs, maxtasks, wrap_exception)
    117         job, i, func, args, kwds = task
    118         try:
--> 119             result = (True, func(*args, **kwds))
    120         except Exception as e:
    121             if wrap_exception and func is not _helper_reraises_exception:

~Miniconda3envstensorflowlibsite-packageskerasutilsdata_utils.py in next_sample(uid)
    624         The next value of generator `uid`.
    625     """
--> 626     return six.next(_SHARED_SEQUENCES[uid])
    627 
    628 

~Miniconda3envstensorflowlibsite-packageskeras_preprocessingimageiterator.py in __next__(self, *args, **kwargs)
     98 
     99     def __next__(self, *args, **kwargs):
--> 100         return self.next(*args, **kwargs)
    101 
    102     def next(self):

~Miniconda3envstensorflowlibsite-packageskeras_preprocessingimageiterator.py in next(self)
    107         """
    108         with self.lock:
--> 109             index_array = next(self.index_generator)
    110         # The transformation of images is not under thread lock
    111         # so it can be done in parallel

~Miniconda3envstensorflowlibsite-packageskeras_preprocessingimageiterator.py in _flow_index(self)
     83                 self._set_index_array()
     84 
---> 85             current_index = (self.batch_index * self.batch_size) % self.n
     86             if self.n > current_index   self.batch_size:
     87                 self.batch_index  = 1

ZeroDivisionError: integer division or modulo by zero
  

Спасибо за ваше время.

Комментарии:

1. Что возвращается, когда вы в новой ячейке запускаете os.listdir(«data \ training»)?

2. ОШИБКА: root: файл 'os.listdir("data\\training").py' не найден.

3. Похоже, проблема связана с рабочим каталогом против расположение папки. Если вы запустите os.listdir(os.getcwd()), а папка «data» отсутствует в списке, это все объясняет.

Ответ №1:

Вы заполнили свои data\training data\test каталоги и? Из выходных данных:

Найдено 0 изображений, принадлежащих 0 классам.
Найдено 0 изображений, принадлежащих 0 классам.
Эпоха 1/10

похоже, что ваш генератор увеличения данных не нашел никаких изображений, и результирующий набор данных пуст; следовательно, когда Keras пытается запустить fit_generator , вы получаете ошибку деления на 0, поскольку он пытается выполнить итерацию по вашему набору нулевых изображений.

Комментарии:

1. Что вы имеете в виду под заполнением? Если он содержит изображения, то да 🙂