Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from __future__ import absolute_import, division, print_function, unicode_literals
- import tensorflow as tf
- from tensorflow.keras.models import Sequential
- from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
- from tensorflow.keras.preprocessing.image import ImageDataGenerator
- import os
- import numpy as np
- import matplotlib.pyplot as plt
- train_dir = os.path.join("./", 'TrainingDataSmall')
- validation_dir = os.path.join("./", 'ValidationData')
- #for x in range(360):
- # os.mkdir("./TrainingData" + str(x))
- total_train = 0
- total_val = 0
- for x in range(1,10):
- numDirectory = os.path.join(train_dir, str(x))
- numInDirectory = len(os.listdir(numDirectory))
- total_train = total_train + numInDirectory
- for x in range(1,10):
- numDirectory = os.path.join(validation_dir, str(x))
- numInDirectory = len(os.listdir(numDirectory))
- total_val = total_val + numInDirectory
- print("Total training " + str(total_train))
- print("Total validation " + str(total_val))
- batch_size = 16
- epochs = 15
- IMG_HEIGHT = 115
- IMG_WIDTH = 115
- train_image_generator = ImageDataGenerator() # Generator for our training data
- validation_image_generator = ImageDataGenerator() # Generator for our validation data
- train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
- directory=train_dir,
- shuffle=True,
- target_size=(IMG_HEIGHT, IMG_WIDTH),
- class_mode='binary')
- val_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size,
- directory=validation_dir,
- target_size=(IMG_HEIGHT, IMG_WIDTH),
- class_mode='binary')
- sample_training_images, _ = next(train_data_gen)
- # This function will plot images in the form of a grid with 1 row and 5 columns where images are placed in each column.
- def plotImages(images_arr):
- fig, axes = plt.subplots(1, 5, figsize=(20,20))
- axes = axes.flatten()
- for img, ax in zip( images_arr, axes):
- ax.imshow(img)
- ax.axis('off')
- plt.tight_layout()
- plt.show()
- #plotImages(sample_training_images[:5])
- #saver = tf.compat.v1.train.Saver
- #with tf.compat.v1.Session() as session:
- #saver.save(session, "FuncaptchaModel.ckpt")
- model = Sequential([
- Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
- MaxPooling2D(),
- Conv2D(32, 3, padding='same', activation='relu'),
- MaxPooling2D(),
- Conv2D(64, 3, padding='same', activation='relu'),
- MaxPooling2D(),
- Flatten(),
- Dense(512, activation='relu'),
- Dense(1, activation='sigmoid')
- ])
- model.compile(optimizer='adam',
- loss='binary_crossentropy',
- metrics=['accuracy'])
- model.summary()
- history = model.fit_generator(
- train_data_gen,
- steps_per_epoch=total_train,
- epochs=epochs,
- validation_data=val_data_gen,
- validation_steps=total_val
- )
- acc = history.history['accuracy']
- val_acc = history.history['val_accuracy']
- loss = history.history['loss']
- val_loss = history.history['val_loss']
- epochs_range = range(epochs)
- plt.figure(figsize=(8, 8))
- plt.subplot(1, 2, 1)
- plt.plot(epochs_range, acc, label='Training Accuracy')
- plt.plot(epochs_range, val_acc, label='Validation Accuracy')
- plt.legend(loc='lower right')
- plt.title('Training and Validation Accuracy')
- plt.subplot(1, 2, 2)
- plt.plot(epochs_range, loss, label='Training Loss')
- plt.plot(epochs_range, val_loss, label='Validation Loss')
- plt.legend(loc='upper right')
- plt.title('Training and Validation Loss')
- plt.show()
- #validation_image_generator = ImageDataGenerator(rescale=1./255) # Generator for our validation data
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement