Keras ZeroDivisionError:整数除法或以零为模 [英] Keras ZeroDivisionError: integer division or modulo by zero
问题描述
我正在尝试使用Keras和Tensorflow实现卷积神经网络.
I'm trying to implement a Convolutional Neural Network using Keras and Tensorflow.
我有以下代码:
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
model = Sequential()
model.add(Conv2D(32, (2, 2), input_shape=(3, 150, 150), padding='SAME'))
model.add(Activation('relu'))
# model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_first"))
model.add(Conv2D(32, (2, 2), padding='SAME'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_first"))
model.add(Conv2D(64, (2, 2), padding='SAME'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_first"))
print("after declaring models")
model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
print("After creating the model\n")
batch_size = 16
# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1./255)
# this is a generator that will read pictures found in
# subfolers of 'data/train', and indefinitely generate
# batches of augmented image data
train_generator = train_datagen.flow_from_directory(
'../input/train', # this is the target directory
target_size=(150, 150), # all images will be resized to 150x150
batch_size=batch_size,
class_mode='binary') # since we use binary_crossentropy loss, we need binary labels
model.fit_generator(
train_generator,
steps_per_epoch=2000 // batch_size,
epochs=50)
问题是我得到的最后一行:
The problem is that on the last line I get:
Epoch 1/50
17.3s
6
Exception in thread Thread-20:
Traceback (most recent call last):
File "/opt/conda/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/opt/conda/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/opt/conda/lib/python3.6/site-packages/Keras-2.0.5-py3.6.egg/keras/utils/data_utils.py", line 590, in data_generator_task
generator_output = next(self._generator)
File "/opt/conda/lib/python3.6/site-packages/Keras-2.0.5-py3.6.egg/keras/preprocessing/image.py", line 737, in __next__
return self.next(*args, **kwargs)
File "/opt/conda/lib/python3.6/site-packages/Keras-2.0.5-py3.6.egg/keras/preprocessing/image.py", line 1026, in next
index_array, current_index, current_batch_size = next(self.index_generator)
File "/opt/conda/lib/python3.6/site-packages/Keras-2.0.5-py3.6.egg/keras/preprocessing/image.py", line 720, in _flow_index
current_index = (self.batch_index * batch_size) % n
ZeroDivisionError: integer division or modulo by zero
17.3s
7
Traceback (most recent call last):
File "../src/script.py", line 115, in <module>
epochs=50)
File "/opt/conda/lib/python3.6/site-packages/Keras-2.0.5-py3.6.egg/keras/legacy/interfaces.py", line 87, in wrapper
File "/opt/conda/lib/python3.6/site-packages/Keras-2.0.5-py3.6.egg/keras/models.py", line 1117, in fit_generator
File "/opt/conda/lib/python3.6/site-packages/Keras-2.0.5-py3.6.egg/keras/legacy/interfaces.py", line 87, in wrapper
File "/opt/conda/lib/python3.6/site-packages/Keras-2.0.5-py3.6.egg/keras/engine/training.py", line 1809, in fit_generator
StopIteration
如何除以0? 我看不到任何变量都可以为0.
How can there be a division by 0? I don't see how any of the variables can be 0.
推荐答案
被零除的原因是n
等于零. n
是数据集中要循环的样本总数,因此,这意味着图像生成器无法提供任何数据.这很可能是由训练数据的安排方式引起的. Keras希望将图像安排在一个目录中,每个图像类包含一个子目录,例如
Division by zero comes from the fact that n
is equal to zero. n
is the total number of samples in the dataset to loop over, so it means that your image generator fails to provide any data. Most probably this is caused by the way how your training data is arranged. Keras expects images to be arranged in a directory containing one subdirectory per image class, like
input/
train/
class_0/
class_0_0.jpg
class_0_1.jpg
...
class_1/
class_1_0.jpg
class_1_1.jpg
...
...
请注意,这甚至适用于非分类任务.当class_mode
为None
时,flow_from_directory
仍希望包含包含图像子目录的目录.
Note that this applies even for non-classification tasks. flow_from_directory
would still expect a directory that contains a subdirectory with images when class_mode
is None
.
这篇关于Keras ZeroDivisionError:整数除法或以零为模的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!