{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import matplotlib.pyplot as plt\nfrom time import time\nimport cv2\nfrom sklearn.utils import shuffle\nfrom sklearn.model_selection import train_test_split\n\nimport tensorflow as tf\n\nfrom tensorflow.keras.applications.resnet50 import ResNet50\nfrom tensorflow.keras.preprocessing import image\nfrom tensorflow.keras.applications.resnet50 import preprocess_input\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Input, Dropout, Flatten\n\nfrom tensorflow.keras import layers\nfrom tensorflow.keras import regularizers\nfrom skimage import io","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(tf.__version__)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_processing = tf.keras.preprocessing.image.ImageDataGenerator(preprocessing_function=tf.keras.applications.resnet50.preprocess_input, validation_split=0.2, horizontal_flip=True, brightness_range=(0.1, 0.9))\n\ntrain_generator = train_processing.flow_from_directory(\n        directory='/kaggle/input/dipfessh/Dataset',\n        color_mode=\"rgb\",\n        target_size=(224, 224),\n        batch_size=128,\n        class_mode=\"categorical\",\n        shuffle=True,\n        subset=\"training\",\n        seed=1)\n\nval_generator = train_processing.flow_from_directory(\n        directory='/kaggle/input/dipfessh/Dataset',\n        color_mode=\"rgb\",\n        batch_size=128,\n        target_size=(224, 224),\n        class_mode=\"categorical\",\n        shuffle=True,\n        subset=\"validation\",\n        seed=1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMAGE_DIMS = (224, 224, 3)\n\nres50 = ResNet50(weights='imagenet', include_top=False, input_shape=IMAGE_DIMS)\nres50.trainable=True\n# -------------------------\n\ninputs = Input(shape=IMAGE_DIMS)\nx = res50(inputs, training=True)\nx = Flatten()(x)\nx = Dense(128, activation='relu')(x)\nx = Dropout(0.5)(x)\noutput = Dense(12, activation=\"softmax\")(x)\n\nmodel = Model(inputs=inputs, outputs=output)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_name = 'ResNet50'\nearly_stopping_callback = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=2)\ncheckpoint_callback = tf.keras.callbacks.ModelCheckpoint(model_name+'.h5', monitor='val_loss', verbose=1, save_best_only=True, mode='min')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=\"Adam\", loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ResNet50Hist = model.fit(train_generator,\n          epochs=20,\n          validation_data=val_generator,\n          callbacks=[early_stopping_callback, checkpoint_callback]);","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save(\"mymodel.h5\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}