【问题标题】:How can creat a path to my data for my CNN in jupyter notebook如何在 jupyter notebook 中为我的 CNN 创建数据路径
【发布时间】:2019-04-10 21:37:04
【问题描述】:

介绍和设置

所以我一直在尝试制作一个简单的卷积神经网络。我跟着一个简单的教程,可以在这里找到a link

这是一个简单的猫对狗测试(2 个类别)

我已将 jupyter/tensorflow/keras 设置为 C:\Users\labadmin

我的理解是,我只需要输入来自 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:\Users\labadmin\Miniconda3\envs\tensorflow\lib\site-packages\ipykernel_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:\Users\labadmin\Miniconda3\envs\tensorflow\lib\site-packages\ipykernel_launcher.py:35: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(activation="relu", units=128)`
C:\Users\labadmin\Miniconda3\envs\tensorflow\lib\site-packages\ipykernel_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

~\Miniconda3\envs\tensorflow\lib\site-packages\keras\legacy\interfaces.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

~\Miniconda3\envs\tensorflow\lib\site-packages\keras\engine\training.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

~\Miniconda3\envs\tensorflow\lib\site-packages\keras\engine\training_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__'):

~\Miniconda3\envs\tensorflow\lib\site-packages\keras\utils\data_utils.py in get(self)
    707                     "`use_multiprocessing=False, workers > 1`."
    708                     "For more information see issue #1638.")
--> 709             six.reraise(*sys.exc_info())

~\Miniconda3\envs\tensorflow\lib\site-packages\six.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

~\Miniconda3\envs\tensorflow\lib\site-packages\keras\utils\data_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:

~\Miniconda3\envs\tensorflow\lib\multiprocessing\pool.py in get(self, timeout)
    642             return self._value
    643         else:
--> 644             raise self._value
    645 
    646     def _set(self, i, obj):

~\Miniconda3\envs\tensorflow\lib\multiprocessing\pool.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:

~\Miniconda3\envs\tensorflow\lib\site-packages\keras\utils\data_utils.py in next_sample(uid)
    624         The next value of generator `uid`.
    625     """
--> 626     return six.next(_SHARED_SEQUENCES[uid])
    627 
    628 

~\Miniconda3\envs\tensorflow\lib\site-packages\keras_preprocessing\image\iterator.py in __next__(self, *args, **kwargs)
     98 
     99     def __next__(self, *args, **kwargs):
--> 100         return self.next(*args, **kwargs)
    101 
    102     def next(self):

~\Miniconda3\envs\tensorflow\lib\site-packages\keras_preprocessing\image\iterator.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

~\Miniconda3\envs\tensorflow\lib\site-packages\keras_preprocessing\image\iterator.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

感谢您的宝贵时间。

【问题讨论】:

  • 当您在新单元格中运行 os.listdir("data\\training") 时会返回什么?
  • ERROR:root:File 'os.listdir("data\\\\training").py' not found.
  • 看起来问题出在工作目录与文件夹位置之间。如果你运行 os.listdir(os.getcwd()),并且没有列出“data”文件夹,那就可以解释了。

标签: python-3.x tensorflow keras jupyter-notebook conv-neural-network


【解决方案1】:

您是否填充了data\\trainingdata\\test 目录?从输出:

找到属于 0 个类别的 0 个图像。
找到属于 0 个类别的 0 个图像。
纪元 1/10

您的数据增强生成器似乎没有找到任何图像,并且生成的数据集是空的;因此,当 Keras 尝试运行 fit_generator 时,当它尝试遍历您的空图像集时,您会得到除以 0 的错误。

【讨论】:

  • 填充是什么意思?如果它包含图片,那么是的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2022-08-13
  • 1970-01-01
相关资源
最近更新 更多