Creating images from Keras datasets
The Keras machine learning framework has a number of built-in datasets including MNIST digits, MNIST Fashion,
CIFAR-10 and CIFAR-100. These datasets can be fetched using the .load_data() method like this:
- (x_train, y_train), (x_test, y_test) = cifar10.load_data()
This method returns tuples of numpy arrays as required for working with Keras. However, it can useful
at times to convert the datasets into image files, in PNG, JPEG or Bitmap format.
The generate_images.py script which can be found on my Github page
allows users to select one of those datasets, then convert any number of the numpy arrays to images.
Command line arguments
The generate_images.py script has several command line arguments:
Argument | Type | Default | Description |
--dataset or -d | string | mnist | The dataset to be used: cifar10,cifar100,mnist,fashion_mnist |
--subset or -s | string | train | The subset to be used: train or test |
--image_dir or -dir | string | image_dir | Path to folder for saving the images and images list file |
--image_list or -l | string | image_list.txt | Name of images list file |
--image_format or -f | string | png | Image file format - valid choices are png, jpg or bmp |
--max_images or -m | integer | 1000 | Number of images to generate |
Dependencies
- os
- argparse
- openCV
- TensorFlow
Opening the generated images with OpenCV imread
Care should be taken when opening the images using OpenCV's imread function - especially for the MNIST digits and Fashion datasets.
Opening those images with the default version of imread like this:
- image = cv2.imread('./mnist_jpg/image_0.jpg')
..will result in array that has a shape of (28, 28, 3), whereas using the IMREAD_GRAYSCALE flag will result in an array that has
shape (28, 28) which can then be reshaped to [28,28,1] for use in TensorFlow:
- image = cv2.imread('./mnist_jpg/image_0.jpg', cv2.IMREAD_GRAYSCALE)
- image = np.reshape(image, [28, 28, 1])