{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\nimport tensorflow as tf\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D\nfrom keras.layers import MaxPooling2D\nfrom keras.layers import Flatten\nfrom keras.layers import Dense\nfrom keras import regularizers, optimizers\nfrom keras.models import Model\nfrom keras.layers import Input\nfrom keras.applications import inception_v3\nfrom keras.applications.inception_v3 import InceptionV3\nfrom keras.applications.inception_v3 import preprocess_input as inception_v3_preprocessor\nfrom keras.optimizers import Adam\nfrom keras.layers import GlobalAveragePooling2D\nfrom keras.layers import Dropout\nfrom keras.regularizers import l1,l2\nimport os\nfrom keras.models       import Model\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Reading data\ndef data_reader(data): \n    read_data = pd.read_csv(data)\n    return(read_data)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def Build_model():\n    base_model = InceptionV3(weights = 'imagenet', include_top = False, input_shape=(200, 200, 3))\n    x = base_model.output\n    x = GlobalAveragePooling2D()(x)\n    x = Dense(1024, activation='relu')(x)\n    x = Dropout(0.2)(x)\n    x = Dense(1024, activation='relu')(x)\n    x = Dropout(0.2)(x)\n    x = Dense(2048, activation='relu')(x)\n    predictions = Dense(5, activation='softmax')(x)\n    # The model we will train\n    model = Model(inputs = base_model.input, outputs = predictions)\n    # first: train only the top layers i.e. freeze all convolutional InceptionV3 layers\n    for layer in base_model.layers:\n        layer.trainable = False\n    # Compile model\n    model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])\n    return model\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = data_reader('../input/train.csv')\ntrain_df['diagnosis'] = train_df['diagnosis'].astype('str')\ntrain_df['Image_name'] = train_df['id_code'].astype(str)+'.png'\ntrain_df = train_df.drop(columns = ['id_code'])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nfrom keras.preprocessing.image import ImageDataGenerator\ndatagen=ImageDataGenerator(\n    rescale=1./255,\n    rotation_range = 10,\n    shear_range = 10,\n    zoom_range = 0.2,\n    horizontal_flip = True,\n    vertical_flip = True,\n    validation_split=0.1)\n\n\nbatch_size = 32\n\ntraining_set=datagen.flow_from_dataframe(\n    dataframe=train_df,\n    directory=\"../input/train_images\",\n    x_col=\"Image_name\",\n    y_col=\"diagnosis\",\n    batch_size=batch_size,\n    shuffle=True,\n    class_mode=\"categorical\",\n    target_size=(200,200),\n    subset='training')\n\ntesting_set=datagen.flow_from_dataframe(\n    dataframe=train_df,\n    directory=\"../input/train_images\",\n    x_col=\"Image_name\",\n    y_col=\"diagnosis\",\n    batch_size=batch_size,\n    shuffle=True,\n    class_mode=\"categorical\", \n    target_size=(200,200),\n    subset='validation')\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"classifier = Build_model()\nclassifier.fit_generator(training_set,\n                         steps_per_epoch = 100,\n                         epochs = 50,\n                         validation_data = testing_set,\n                         validation_steps = 10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"classifier.save_weights(\"classifier.h5\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(classifier)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = data_reader('../input/sample_submission.csv')\nsubmission['Images'] = submission['id_code'].astype(str)+'.png'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_datagen=ImageDataGenerator(rescale=1./255)\nsubmission_gen=submission_datagen.flow_from_dataframe(\n    dataframe=submission,\n    directory=\"../input/test_images\",\n    x_col=\"Images\",    \n    batch_size=batch_size,\n    shuffle=False,\n    class_mode=None, \n    target_size=(256,256)\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predictions=classifier.predict_generator(submission_gen, steps = len(submission_gen))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"max_probability = np.argmax(predictions,axis=1) \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(max_probability)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission.drop(columns=['Images'], inplace= True)\nsubmission['diagnosis'] = max_probability\nsubmission.to_csv('submission.csv', index=False)\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}