-
Star
(447)
You must be signed in to star a gist -
Fork
(177)
You must be signed in to fork a gist
-
-
Save fchollet/0830affa1f7f19fd47b06d4cf89ed44d to your computer and use it in GitHub Desktop.
| '''This script goes along the blog post | |
| "Building powerful image classification models using very little data" | |
| from blog.keras.io. | |
| It uses data that can be downloaded at: | |
| https://www.kaggle.com/c/dogs-vs-cats/data | |
| In our setup, we: | |
| - created a data/ folder | |
| - created train/ and validation/ subfolders inside data/ | |
| - created cats/ and dogs/ subfolders inside train/ and validation/ | |
| - put the cat pictures index 0-999 in data/train/cats | |
| - put the cat pictures index 1000-1400 in data/validation/cats | |
| - put the dogs pictures index 12500-13499 in data/train/dogs | |
| - put the dog pictures index 13500-13900 in data/validation/dogs | |
| So that we have 1000 training examples for each class, and 400 validation examples for each class. | |
| In summary, this is our directory structure: | |
| ``` | |
| data/ | |
| train/ | |
| dogs/ | |
| dog001.jpg | |
| dog002.jpg | |
| ... | |
| cats/ | |
| cat001.jpg | |
| cat002.jpg | |
| ... | |
| validation/ | |
| dogs/ | |
| dog001.jpg | |
| dog002.jpg | |
| ... | |
| cats/ | |
| cat001.jpg | |
| cat002.jpg | |
| ... | |
| ``` | |
| ''' | |
| from keras.preprocessing.image import ImageDataGenerator | |
| from keras.models import Sequential | |
| from keras.layers import Conv2D, MaxPooling2D | |
| from keras.layers import Activation, Dropout, Flatten, Dense | |
| from keras import backend as K | |
| # dimensions of our images. | |
| img_width, img_height = 150, 150 | |
| train_data_dir = 'data/train' | |
| validation_data_dir = 'data/validation' | |
| nb_train_samples = 2000 | |
| nb_validation_samples = 800 | |
| epochs = 50 | |
| batch_size = 16 | |
| if K.image_data_format() == 'channels_first': | |
| input_shape = (3, img_width, img_height) | |
| else: | |
| input_shape = (img_width, img_height, 3) | |
| model = Sequential() | |
| model.add(Conv2D(32, (3, 3), input_shape=input_shape)) | |
| model.add(Activation('relu')) | |
| model.add(MaxPooling2D(pool_size=(2, 2))) | |
| model.add(Conv2D(32, (3, 3))) | |
| model.add(Activation('relu')) | |
| model.add(MaxPooling2D(pool_size=(2, 2))) | |
| model.add(Conv2D(64, (3, 3))) | |
| model.add(Activation('relu')) | |
| model.add(MaxPooling2D(pool_size=(2, 2))) | |
| model.add(Flatten()) | |
| 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']) | |
| # 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) | |
| train_generator = train_datagen.flow_from_directory( | |
| train_data_dir, | |
| target_size=(img_width, img_height), | |
| batch_size=batch_size, | |
| class_mode='binary') | |
| validation_generator = test_datagen.flow_from_directory( | |
| validation_data_dir, | |
| target_size=(img_width, img_height), | |
| batch_size=batch_size, | |
| class_mode='binary') | |
| model.fit_generator( | |
| train_generator, | |
| steps_per_epoch=nb_train_samples // batch_size, | |
| epochs=epochs, | |
| validation_data=validation_generator, | |
| validation_steps=nb_validation_samples // batch_size) | |
| model.save_weights('first_try.h5') |
Damn the Getúlio Vargas Foundation for demanding this example in a high-level public tender
page 7
we will never forget it...
I got this error, please give a bit detail how to solve this problem:
Found 0 images belonging to 0 classes.
Found 0 images belonging to 0 classes.
:70: UserWarning: Model.fit_generator is deprecated and will be removed in a future version. Please use Model.fit, which supports generators.
model.fit_generator(
ValueError Traceback (most recent call last)
in <cell line: 70>()
68 class_mode='binary')
69
---> 70 model.fit_generator(
71 train_generator,
72 steps_per_epoch=nb_train_samples // batch_size,
2 frames
/usr/local/lib/python3.9/dist-packages/keras/preprocessing/image.py in getitem(self, idx)
101 def getitem(self, idx):
102 if idx >= len(self):
--> 103 raise ValueError(
104 "Asked to retrieve element {idx}, "
105 "but the Sequence "
ValueError: Asked to retrieve element 0, but the Sequence has length 0
RuntimeError Traceback (most recent call last)
in <cell line: 54>()
52 model = Sequential()
53
---> 54 model.fit(
55 train_generator,
56 steps_per_epoch=2000,
1 frames
/usr/local/lib/python3.9/dist-packages/keras/engine/training.py in _assert_compile_was_called(self)
3683 # (i.e. whether the model is built and its inputs/outputs are set).
3684 if not self._is_compiled:
-> 3685 raise RuntimeError(
3686 "You must compile your model before "
3687 "training/testing. "
RuntimeError: You must compile your model before training/testing. Use model.compile(optimizer, loss).
'''
Showing the directory structure as image is so helpful! including simple examples! tysm this helped me a lot!!