{"cells":[{"metadata":{"trusted":true,"_uuid":"501bc5c48766ec5964873f6dc7ebd4007adae413"},"cell_type":"code","source":"%matplotlib inline\nfrom IPython.display import SVG\nfrom keras.utils.vis_utils import model_to_dot","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import os\nimport shutil\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d8bb2129a2d5f5316ddb07c5eda9cd4da84af18e"},"cell_type":"code","source":"ls -la ../input/keras-pretrained-models","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"de51410914c593a4eebf89a5635a09c7f96c0969"},"cell_type":"code","source":"os.makedirs('/tmp/.keras/datasets')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4d7cb1b9173e0653687b633f695ff57c182e8cc4"},"cell_type":"code","source":"shutil.copytree(\"../input/keras-pretrained-models\", \"/tmp/.keras/models\")","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import os.path\nimport itertools\nfrom itertools import chain\n\nimport numpy as np\nimport pandas as pd\nfrom sklearn import datasets\nfrom sklearn import preprocessing\nfrom sklearn.decomposition import PCA\nfrom sklearn import cluster, datasets, mixture\nfrom sklearn.datasets import load_digits\nfrom sklearn.preprocessing import StandardScaler, OneHotEncoder\nfrom sklearn.metrics import f1_score, classification_report, confusion_matrix\nfrom sklearn.model_selection import train_test_split\n\nimport matplotlib.pyplot as plt\nfrom matplotlib.colors import ListedColormap\nimport seaborn as sns\n\nfrom keras.layers import Input, Embedding, LSTM, GRU, Dense, Dropout, Lambda, \\\n    Conv1D, Conv2D, Conv3D, \\\n    Conv2DTranspose, \\\n    AveragePooling1D, AveragePooling2D, \\\n    MaxPooling1D, MaxPooling2D, MaxPooling3D, \\\n    GlobalAveragePooling1D, \\\n    GlobalMaxPooling1D, GlobalMaxPooling2D, GlobalMaxPooling3D, \\\n    LocallyConnected1D, LocallyConnected2D, \\\n    concatenate, Flatten, Average, Activation, \\\n    RepeatVector, Permute, Reshape, Dot, \\\n    multiply, dot, add, \\\n    PReLU, \\\n    Bidirectional, TimeDistributed, \\\n    SpatialDropout1D, \\\n    BatchNormalization\nfrom keras.models import Model, Sequential\nfrom keras import losses\nfrom keras.callbacks import BaseLogger, ProgbarLogger, Callback, History\nfrom keras.wrappers.scikit_learn import KerasClassifier\nfrom keras import regularizers\nfrom keras import initializers\nfrom keras.metrics import categorical_accuracy\nfrom keras.constraints import maxnorm, non_neg\nfrom keras.optimizers import RMSprop\nfrom keras.utils import to_categorical, plot_model\nfrom keras import backend as K","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"50fefbf82ee590bd43c1c0e8cc5034b3796652cc"},"cell_type":"code","source":"from PIL import Image\nfrom zipfile import ZipFile\nimport h5py\nimport cv2\nfrom tqdm import tqdm","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"26885390f9a1d5f8b1be5f30b9933a44ac200dbe"},"cell_type":"code","source":"src_dir = '../input/human-protein-atlas-image-classification'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"256ab9500ecf1492676ac5a56d630b916dce093a"},"cell_type":"code","source":"train_labels = pd.read_csv(os.path.join(src_dir, \"train.csv\"))\nprint(train_labels.shape)\ntrain_labels.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"27681f3b3e0ae9b0fe682270acdf0fe9aa2d8738"},"cell_type":"code","source":"test_labels = pd.read_csv(os.path.join(src_dir, \"sample_submission.csv\"))\nprint(test_labels.shape)\ntest_labels.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"085662b1058aa000cdbe2cf7ab923b46910b0004"},"cell_type":"code","source":"def show_arr(arr, nrows = 1, ncols = 4, figsize=(15, 5)):\n    fig, subs = plt.subplots(nrows=nrows, ncols=ncols, figsize=figsize)\n    for ii in range(ncols):\n        iplt = subs[ii]\n        img_array = arr[:,:,ii]\n        if ii == 0:\n            cp = 'Greens'\n        elif ii == 1:\n            cp = 'Blues'\n        elif ii == 2:\n            cp = 'Reds'\n        else:\n            cp = 'Oranges'\n        iplt.imshow(img_array, cmap=cp)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"66967a6fc0a40138dcf8f7cc80a7f17a5fc3426b"},"cell_type":"code","source":"def get_arr0(Id, test=False):\n    def fn(Id, color, test=False):\n        if test:\n            tgt = 'test'\n        else:\n            tgt = 'train'\n        with open(os.path.join(src_dir, tgt, Id+'_{}.png'.format(color)), 'rb') as fp:\n            img = Image.open(fp)\n            arr = (np.asarray(img) / 255.)\n        return arr\n    res = []\n    for icolor in ['green', 'blue', 'red', 'yellow']:\n        arr0 = fn(Id, icolor, test)\n        res.append(arr0)\n    arr = np.stack(res, axis=-1)\n    return arr","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aaef824e54b9e397a2f8a980337f266a1fe7e413"},"cell_type":"code","source":"arr = get_arr0('00008af0-bad0-11e8-b2b8-ac1f6b6435d0', test=True)\nprint(arr.shape)\nshow_arr(arr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"26e4815ccced55f2d31830e2134c63c52d592db3"},"cell_type":"code","source":"arr = get_arr0('00070df0-bbc3-11e8-b2bc-ac1f6b6435d0')\nprint(arr.shape)\nshow_arr(arr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2906351bbf846b82ea7c2d7d12b83a3443baf984"},"cell_type":"code","source":"SH = (139, 139)\nID_LIST_TRAIN = train_labels.Id.tolist()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"5329a0a9d76443bbc750ba73eb7d38e52b4854f8"},"cell_type":"markdown","source":"### cache train data"},{"metadata":{"trusted":true,"_uuid":"83bb35ce885febdf90224e4edd3243a65750a78d"},"cell_type":"code","source":"# ### CACHE\n# img_cache_train = np.zeros((train_labels.shape[0], 139, 139, 4), dtype=np.float16)\n# ID_LIST_TRAIN = train_labels.Id.tolist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0d2f49fc380e15523d95f45155c3819a3ac4f901"},"cell_type":"code","source":"# for ii, id0 in enumerate(tqdm(ID_LIST_TRAIN)):\n#     arr = get_arr0(id0)\n#     img_cache_train[ii] = cv2.resize(arr[:], SH)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"79a3fdfa371b7af9f893f48dff861ac5ea13ffd0"},"cell_type":"code","source":"# img_cache_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ff55711d62be18d383d22974a5dc55e2d32236f0"},"cell_type":"code","source":"# np.savez_compressed('img_cache_train_resize_139x139', x=img_cache_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aaf420e06304b4224f1a43a59d44b93509c100c6"},"cell_type":"markdown","source":"### load cache"},{"metadata":{"trusted":true,"_uuid":"f7f70e03271295791815ed4dd690415fae586ebf"},"cell_type":"code","source":"img_cache_train = np.load('../input/139x139-resized-numpy-array/img_cache_train_resize_139x139.npz')['x']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4606aacc3940f9d859a19135bc9ebcb87e365387"},"cell_type":"code","source":"img_cache_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2b4540540c5a9a90c94f7076ce6fdf7f082346e6"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7b0eb63dc51ce06412c7be3db185adae129f4d39"},"cell_type":"code","source":"def get_arr(Id, test=False):\n    if test:\n        arr = get_arr0(Id, test=True)\n        arr = cv2.resize(arr, SH).astype('float32')\n    else:\n        ii = ID_LIST_TRAIN.index(Id)\n        arr = img_cache_train[ii]\n        arr = arr.astype('float32')\n    return arr","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"567e3046dd0a4a0fcc641b46e4ac6b1d99da7d04"},"cell_type":"code","source":"arr = get_arr('00070df0-bbc3-11e8-b2bc-ac1f6b6435d0')\narr.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d9f8ab98b4a7dbc8593bdff0a75d11bd80218eb8"},"cell_type":"code","source":"show_arr(arr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8220a9292dc9ba8977d491f55a3d7a5236dd03e8"},"cell_type":"code","source":"arr = get_arr('00008af0-bad0-11e8-b2b8-ac1f6b6435d0', test=True)\nprint(arr.shape)\nshow_arr(arr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6a2dfc516268368e147cc176ba74392f08cd445f"},"cell_type":"code","source":"y_cat_train_dic = {}\nfor icat in range(28):\n    target = str(icat)\n    y_cat_train_5 = np.array([int(target in ee.split()) for ee in train_labels.Target.tolist()])\n    y_cat_train_dic[icat] = y_cat_train_5","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9b22a3224e0683d580593af45fcf81f3a1c8c083"},"cell_type":"code","source":"up_sample = {}\nfor k in y_cat_train_dic:\n    v = y_cat_train_dic[k].sum()\n    up_sample[k] = np.ceil((train_labels.shape[0]/28) / v)\n\nup_sample","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"79abf3891d5990af8297cb75b01afb2bb263ffd5"},"cell_type":"code","source":"up_sample2 = list(zip(*sorted(list(up_sample.items()), key=lambda x: x[0])))[1]\nup_sample2 = np.array(up_sample2)\nup_sample2","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aee7e5a06bfe0ceaf47218f3c3610429a5c1c035"},"cell_type":"code","source":"import random\n\nclass Seq(object):\n    sections = None\n    index = None\n    \n    def __init__(self, df, aug=True, test=False, batch_size=32):\n        self.shaffle = None\n        self.aug = aug\n        self.test = test\n        self.batch_size = batch_size\n        self.df = df\n        \n        # proccess\n        self.ids = self.df.Id.tolist()\n        self.reversed = sorted(range(SH[0]), reverse=True)\n        \n        # estimate self length\n        self.initialize_it()\n        self.len = 1\n        for _ in self.it:\n            self.len += 1\n        \n        self.initialize_it()\n    \n    def initialize_it(self):\n        if self.shaffle:\n            '''not implemented yet'''\n            raise NotImplementedError\n            #random.seed(self.state)\n            #random.shuffle(self.ids)\n        \n        self.it = iter(range(0, len(self.ids), self.batch_size))\n        self.idx_next = self.it.__next__()\n    \n    def __len__(self):\n        return self.len\n    \n    def __iter__(self):\n        return self\n    \n    def __next__(self):\n        idx = self.idx_next\n        self.ids_part = self.ids[idx:((idx+self.batch_size) if idx+self.batch_size<len(self.ids) else len(self.ids))]\n        res = self.getpart(self.ids_part)\n        try:\n            self.idx_next = self.it.__next__()\n        except StopIteration:\n            self.initialize_it()\n        return res\n    \n    def __getitem__(self, id0):\n        arr, tgts = self.get_data(id0)\n        cat = self.convert_tgts(tgts)\n        return arr, cat\n    \n    k_list = list(range(4))\n    def random_transform(self, arr):\n        k = random.choice(self.k_list)\n        arr0 = np.rot90(arr, k=k)\n        if random.randint(0,1):\n            arr0 = arr0[self.reversed,:,:]\n        if random.randint(0,1):\n            arr0 = arr0[:,self.reversed,:]\n        return arr0\n    \n    def convert_tgts(self, tgts):\n        try:\n            cats = to_categorical(tgts, num_classes=28)\n            cat = cats.sum(axis=0)\n        except TypeError:\n            cat = np.zeros((28,))\n        return cat\n    \n    def get_data(self, id0):\n        arr = get_arr(id0, test=self.test)\n        \n        try:\n            y0 = (self.df.Target[self.df.Id == id0]).tolist()[0]\n            y1 = y0.split()\n            y = [int(ee) for ee in y1]\n        except AttributeError:\n            y = None\n        return arr, y\n    \n    def getpart(self, ids):\n        xs = []\n        ys = []\n        for id0 in ids:\n            if self.aug:\n                self.extend_data(id0, xs, ys)\n            else:\n                img, cat = self[id0]\n                xs.append(img.flatten())\n                ys.append(cat)\n        \n        x = np.stack(xs)\n        y = np.stack(ys)\n        x_ret = x\n        y_ret = y\n        return (x_ret, y_ret)\n    \n    def split(self, arr, sections=sections):\n        res0 = np.vsplit(arr, sections)\n        res = [np.hsplit(ee, sections) for ee in res0]\n        res = list(chain.from_iterable(res))\n        return res\n    \n    def extend_data(self, id0, xs, ys):\n        arr0, cat = self[id0]\n        \n        # data augmentation\n        mm = up_sample2[cat==1].max()\n        mm = int(mm)\n        #print(mm)\n        for ii in range(mm):\n            img = self.random_transform(arr0)\n            xs.append(img.flatten())\n            ys.append(cat)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"be795f9f6394a96353fa9d4eebe06625fbebe2a4"},"cell_type":"code","source":"seq = Seq(train_labels, batch_size=32)\nseq","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c57cc18c8b097a0d8c4dbea68534e7ae37916cda"},"cell_type":"code","source":"print(len(seq.ids))\nlen(seq)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8759f9d33fde844a8ad257326be475a914bb4cee"},"cell_type":"code","source":"arr, y = seq.get_data('ad5a4858-bb9d-11e8-b2b9-ac1f6b6435d0')\nprint(arr.shape)\nshow_arr(arr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"53861c7a1b7046cd8c670fffaf185983e67854f6"},"cell_type":"code","source":"x, y = seq['ad5a4858-bb9d-11e8-b2b9-ac1f6b6435d0']\nprint(x.shape)\nshow_arr(x)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"26e5680f30e70031df3e3a5a9164c93a0912859c"},"cell_type":"code","source":"xs, ys = next(seq)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d83d0fc61fcdd757d9a71202ee6add987afee8d6"},"cell_type":"code","source":"xs.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"35721d1542c6ae0c87a32ceb8abc1f59c4211ef2"},"cell_type":"code","source":"show_arr(xs[0].reshape((139,139,4)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"deb33341b7c5089a94c3372adc2a63958b4f9351"},"cell_type":"code","source":"show_arr(xs[1].reshape((139,139,4)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"99cb10719eebf530174cba31787f98f447dcfbfa"},"cell_type":"code","source":"show_arr(xs[2].reshape((139,139,4)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"676223a957c5b88ce91db80976a0a873698e0a21"},"cell_type":"code","source":"show_arr(xs[3].reshape((139,139,4)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2c13f9f7057630dfc451b123041bcccd09f7ef3c"},"cell_type":"code","source":"show_arr(xs[6].reshape((139,139,4)).astype('float32'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8629680a30d7e4f238152421cf6cc978388df695"},"cell_type":"code","source":"show_arr(xs[7].reshape((139,139,4)).astype('float32'))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"7a51b8677a20d1890bd819f1b8e36d79ea9564cb"},"cell_type":"markdown","source":"### test_labels, test=True, aug=False"},{"metadata":{"trusted":true,"_uuid":"55b2a98436a515ddf1086c47f8c9b8623f6a4ece"},"cell_type":"code","source":"seq = Seq(test_labels, test=True, aug=False, batch_size=32)\nseq","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2c2bf8f8f6254f6bef483a9349d60903209198ea"},"cell_type":"code","source":"print(len(seq.ids))\nlen(seq)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5b49eaf2697057d655e279912d4d1c5a973bd178"},"cell_type":"code","source":"xs, ys = next(seq)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"72835acc56c24549adc1e7f6f8b6e4e398b49f69"},"cell_type":"code","source":"xs.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"00cec152c42009bc65953c3142915955ae37306a"},"cell_type":"code","source":"show_arr(xs[0].reshape((139,139,4)).astype('float32'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e9d10406a118893be28220001279b509eb5a7b44"},"cell_type":"code","source":"show_arr(xs[1].reshape((139,139,4)).astype('float32'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"02bee3d38302c1fb7def1e340830173ce66677f7"},"cell_type":"code","source":"show_arr(xs[2].reshape((139,139,4)).astype('float32'))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d98c20522bcf8014f0b9e4d2cee8d269bfcfdfaa"},"cell_type":"markdown","source":"### make model"},{"metadata":{"trusted":true,"_uuid":"2507ab8b28d87ad773a54658226df84e2ef0d79f"},"cell_type":"code","source":"from keras import applications\n# model_resnet = applications.resnet50.ResNet50(\n#     include_top=True,\n#     weights='imagenet',\n#     input_tensor=None,\n#     input_shape=None,\n#     pooling=None,\n#     classes=1000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d3eb6becc64939ef502febeef5f009309b8c9d34"},"cell_type":"code","source":"# from keras import applications\n# model_resnet = applications.inception_resnet_v2.InceptionResNetV2(\n#     include_top=True,\n#     weights='imagenet',\n#     input_tensor=None,\n#     input_shape=None,\n#     pooling=None,\n#     classes=1000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"449c7806ce59060f3acc2496ce3f8c1f17eba5ef"},"cell_type":"code","source":"# model_resnet.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b95b00f5cfdfe93a12974b79ba38023100a7945f"},"cell_type":"code","source":"model_resnet = applications.inception_resnet_v2.InceptionResNetV2(\n    include_top=False,\n    weights='imagenet',\n    input_tensor=None,\n    input_shape=(139,139,3),\n    pooling='avg',\n    classes=None)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1f76a77d9d9608e0aef1db29cd147c40d9f511cd"},"cell_type":"code","source":"# model_resnet.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"00f9d4719b5f00bdc1ce784c6a272788163eef45"},"cell_type":"code","source":"img_shape = (139, 139, 4)\nimg_dim = np.array(img_shape).prod()\nprint(img_dim)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d733ceac4434e09c0c9dcde099e347fb7cfdd46a"},"cell_type":"code","source":"def make_model(model_resnet):\n    '''==============================\n    inputs\n    =============================='''\n    inp = Input(shape=(img_dim,), name='input')\n    oup = Reshape(img_shape)(inp)\n    oup = Conv2D(3, kernel_size=2, strides=1, padding='same')(oup)\n    model_cnvt = Model(inp, oup)\n    \n    oup = model_resnet(oup)\n    oup = Dense(28)(oup)\n    oup = Activation('sigmoid', name='cls')(oup)\n    \n    model = Model(inp, oup, name='model')\n    model.compile(loss='binary_crossentropy',\n                  optimizer='adam',\n                  metrics=['categorical_accuracy', 'binary_accuracy'])\n    \n    return {\n        'model_resnet': model_resnet,\n        'model_cnvt': model_cnvt,\n        'model': model\n    }\n\nmodels = make_model(model_resnet)\nmodels['model'].summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4744ebe44914642dad31b30adc2699afcf18cf6e"},"cell_type":"code","source":"models['model_cnvt'].summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3c48abcccc9f42e8171ece01ac68753b4e330412"},"cell_type":"code","source":"'''aug=False'''\nseq = Seq(train_labels, aug=False, batch_size=32)\nprint(len(seq))\n\nmodels['model'].fit_generator(seq, epochs=1,\n                              steps_per_epoch=len(seq),\n                              callbacks=[])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6896c9dbfbfa55b1568eb272d7ab25bcd2bee1a2"},"cell_type":"markdown","source":"### focal loss"},{"metadata":{"trusted":true,"_uuid":"3906f65c33bd8afd77ec035db8d2c6829cbcb8ae"},"cell_type":"code","source":"'''\nThanks Iafoss.\npretrained ResNet34 with RGBY\nhttps://www.kaggle.com/iafoss/pretrained-resnet34-with-rgby-0-460-public-lb\n'''\ngamma = 2.0\nepsilon = K.epsilon()\ndef focal_loss(y_true, y_pred):\n    pt = y_pred * y_true + (1-y_pred) * (1-y_true)\n    pt = K.clip(pt, epsilon, 1-epsilon)\n    CE = -K.log(pt)\n    FL = K.pow(1-pt, gamma) * CE\n    loss = K.sum(FL, axis=1)\n    return loss","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3d667ac847572575c7304c322d90e214c0b9dec6"},"cell_type":"code","source":"models['model'].compile(loss=focal_loss,\n                        optimizer='adam',\n                        metrics=['categorical_accuracy', 'binary_accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"deace05a782fc05db6c95ca7235f441c5dea4089"},"cell_type":"code","source":"'''aug=False'''\nseq = Seq(train_labels, aug=False, batch_size=32)\nprint(len(seq))\n\nmodels['model'].fit_generator(seq, epochs=1,\n                              steps_per_epoch=len(seq),\n                              callbacks=[])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d53209b773d3d52d170b0d5e4106bdea6296e581"},"cell_type":"code","source":"seq_pred = Seq(train_labels, test=False, aug=False, batch_size=128)\nseq_pred\nxs, ys = next(seq_pred)\nxs.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"531c3ab1361f034b8d430ffcc0fa6bf28fe6c670"},"cell_type":"code","source":"y_pred = models['model'].predict(xs)\ny_pred.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"207adfd3207390ab1cf66e888bef6d4a3bb99776"},"cell_type":"code","source":"y_pred[:3]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"389070814f65911e2ded60021123f2716f37c894"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ee8ac99110a8d08a881db99991da1d60825ca03a"},"cell_type":"code","source":"# seq = Seq(train_labels, aug=True, batch_size=32)\n# print(len(seq))\n\n# models['model'].fit_generator(seq, epochs=10,\n#                               steps_per_epoch=len(seq),\n#                               callbacks=[])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e5382d82e02e36aad43064fb0f46275115c43f59"},"cell_type":"markdown","source":"### predict and submit"},{"metadata":{"trusted":true,"_uuid":"a545b725c69cdc9c0305066b5d0e3456837cab27"},"cell_type":"code","source":"# seq_pred = Seq(train_labels, test=False, aug=False, batch_size=128)\n# seq_pred","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"902ce70dd767b9317fcc50377c84b7ffbb037fa0"},"cell_type":"code","source":"# pred = models['model'].predict_generator(seq_pred, steps=len(seq_pred), verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"beb2ae7253557b2a4a054ffe4bde530b82c13a6f"},"cell_type":"code","source":"# seq_test = Seq(test_labels, test=True, aug=False, batch_size=128)\n# seq_test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a921f7ddefb2099a4d4332047fb8f69ea33e98cf"},"cell_type":"code","source":"# pred_test = models['model'].predict_generator(seq_test, steps=len(seq_test), verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f8bbdce55d142033b6315f6a29f61a9c188ab0b4"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}