{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport tensorflow as tf\nimport os\nimport gc\nfrom PIL import Image\n!pip install efficientnet\nfrom efficientnet import tfkeras as efn","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"base = \"../input/jpeg-melanoma-256x256/\"\ndf = pd.read_csv(base + \"train.csv\")\ndf['file_name'] = base + \"train/\" + df['image_name'] + \".jpg\"\ntrain = df[[\"file_name\",\"target\"]]\ndel df\ngc.collect()\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"class Mygenarator(tf.keras.utils.Sequence):\n    \n    def __init__(self,df,x_col,y_col=None,batch_size=8,num_classes=None,size=(256,256,3),shuffle=True):\n        self.df = df\n        self.x_col = x_col\n        self.y_col = y_col\n        self.size = size\n        self.indices = df.index.tolist()\n        self.batch_size = batch_size\n        self.num_classes = num_classes\n        self.shuffle = shuffle\n        self.on_epoch_end()\n        \n    def on_epoch_end(self):\n        self.index = np.arange(len(self.indices))\n        if self.shuffle == True:\n            np.random.shuffle(self.index)\n            \n    def __len__(self):\n     # Denotes the number of batches per epoch\n        return len(self.indices) // self.batch_size\n    \n    \n    def __getitem__(self, index):\n        # Generate one batch of data\n        # Generate indices of the batch\n        index = self.index[index * self.batch_size:(index + 1) * self.batch_size]\n        # Find list of IDs\n        batch = [self.indices[k] for k in index]\n        # Generate data\n        X, y = self.__get_data(batch)\n        return X, y\n    \n    def __get_data(self, batch):\n        # X.shape : (batch_size, *dim)\n        # We can have multiple Xs and can return them as a list\n        X = np.empty((self.batch_size,*self.size))\n        y = np.empty((self.batch_size), dtype=int)\n        # Generate data\n        for i, id in enumerate(batch):\n         # Store sample\n            X[i,] = self.read_img(self.df.loc[id,self.x_col])\n            y[i] = self.df.loc[id,self.y_col]\n            \n        return X, y\n    \n    def read_img(self,file):\n        return np.array(Image.open(file))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data = Mygenarator(df=train,x_col=\"file_name\",y_col=\"target\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = tf.keras.models.Sequential([efn.EfficientNetB6(include_top=False, weights='imagenet',input_shape=(256, 256, 3),pooling='avg'),\n                                    tf.keras.layers.Dense(1,activation=\"sigmoid\")])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(loss=\"binary_crossentropy\",optimizer=\"adam\",metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.fit_generator(generator=data)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}