diff --git a/lymphoma-cancer-classification/README.md b/lymphoma-cancer-classification/README.md
new file mode 100644
index 0000000..5887b3c
--- /dev/null
+++ b/lymphoma-cancer-classification/README.md
@@ -0,0 +1,27 @@
+# Lymphoma Cancer Classification
+In this implementation, three different Lymphoma subtypes are considered to classify from pathological images:
+- Chronic lymphocytic leukemia (CLL)
+- Follicular lymphoma (FL)
+- Mantle cell lymphoma (MCL).
+
+The following figure shows three different type of cancer cells.
+
+### Dataset Preparation
+The [dataset](http://www.andrewjanowczyk.com/use-case-7-lymphoma-sub-type-classification/) consist of 374 images of size 1388 x 1040. These are further broken down into 113 for the CLL class, 139 for the FL class and 122 for the MCL class. The data has been curated from multiple sources to create a real-world type cohort which contains typical stain and scanning variances.
+Non-overlapping patches of size 256 x 256 are extracted from each image. 15% from the total data is set apart of validation. Data is augmented using Keras' ImageDataGenerator.
+### Inception Recurrent Convolutional Neural Network
+The IRCNN architecture consists of general convolution layers, IRCNN blocks, transaction blocks, and a softmax logistic regression layer.
+
+The IRCNN block, performs recurrent convolution operations on different sized kernels.
+
+As the input and output dimensions do not change, this is simply an accumulation of feature maps with respect to the time step considered. This helps to strengthen the extraction of the target features.
+In the transaction block, three operations (convolution, pooling, and drop-out) are performed depending upon the placement of the block in the network. According to Figure, all of the operations are applied in the very first transaction block and second transaction block. The third transaction block consists of convolution, global-average pooling, and drop-out layer. The GlobalAveragePooling layer is used as an alternative to a fully connected layer.
+The Stochastics Gradient Descent (SGD) optimization method is used with initial learning rate 0.01
+### Usage
+The models folder contains Keras model and it's corresponding tensorflowjs model. Download the .zip file of repository and load the model in caMicrscope.
+### References
+- Advanced Deep Convolutional Neural Network Approaches for Digital Pathology Image Analysis: a comprehensive evaluation with different use cases
+Md Zahangir Alom, Theus Aspiras, Tarek M. Taha, Vijayan K. Asari, TJ Bowen, Dave Billiter, Simon Arkell
+- M. Liang, X. Hu, "Recurrent convolutional neural network for object recognition", CVPR, pp. 3367-3375, 2015.
+- Inception Recurrent Convolutional Neural Network for Object Recognition
+Md Zahangir Alom, Mahmudul Hasan, Chris Yakopcic, Tarek M. Taha
diff --git a/lymphoma-cancer-classification/imgs/arch.png b/lymphoma-cancer-classification/imgs/arch.png
new file mode 100644
index 0000000..1f76db8
Binary files /dev/null and b/lymphoma-cancer-classification/imgs/arch.png differ
diff --git a/lymphoma-cancer-classification/imgs/lymp_samples.png b/lymphoma-cancer-classification/imgs/lymp_samples.png
new file mode 100644
index 0000000..7508123
Binary files /dev/null and b/lymphoma-cancer-classification/imgs/lymp_samples.png differ
diff --git a/lymphoma-cancer-classification/imgs/lymph.jpg b/lymphoma-cancer-classification/imgs/lymph.jpg
new file mode 100644
index 0000000..433e100
Binary files /dev/null and b/lymphoma-cancer-classification/imgs/lymph.jpg differ
diff --git a/lymphoma-cancer-classification/model.ipynb b/lymphoma-cancer-classification/model.ipynb
new file mode 100644
index 0000000..f1fa150
--- /dev/null
+++ b/lymphoma-cancer-classification/model.ipynb
@@ -0,0 +1,527 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Lymphoma_cancer_classification.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": []
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "accelerator": "GPU"
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "pc9UCDPps2SI",
+ "colab_type": "text"
+ },
+ "source": [
+ "## Google Colab Setup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "PL_GqMswqQ4h",
+ "colab_type": "code",
+ "outputId": "4655e3a8-3ff4-4c8b-e9de-c41f4e7c6712",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ }
+ },
+ "source": [
+ "from google.colab import drive\n",
+ "drive.mount('./gdrive')"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Drive already mounted at ./gdrive; to attempt to forcibly remount, call drive.mount(\"./gdrive\", force_remount=True).\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "-vO4fMdxQna6",
+ "colab_type": "code",
+ "outputId": "e77c6255-cd9f-4f73-95b0-16813855f8d8",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ }
+ },
+ "source": [
+ "cd ./gdrive/\"My Drive\"/model3bmi "
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "/content/gdrive/My Drive/model3bmi\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "lJGXIK8AEMzY",
+ "colab_type": "text"
+ },
+ "source": [
+ "### Preparing Dataset"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "Weu7RsyiQ-ia",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "# Credits: ICIAR2018 by ImagingLabs\n",
+ "class PatchExtractor:\n",
+ " def __init__(self, img, patch_size, stride):\n",
+ " '''\n",
+ " :param img: :py:class:`~PIL.Image.Image`\n",
+ " :param patch_size: integer, size of the patch\n",
+ " :param stride: integer, size of the stride\n",
+ " '''\n",
+ " self.img = img\n",
+ " self.size = patch_size\n",
+ " self.stride = stride\n",
+ "\n",
+ " def extract_patches(self):\n",
+ " \"\"\"\n",
+ " extracts all patches from an image\n",
+ " :returns: A list of :py:class:`~PIL.Image.Image` objects.\n",
+ " \"\"\"\n",
+ " wp, hp = self.shape()\n",
+ " return [self.extract_patch((w, h)) for h in range(hp) for w in range(wp)]\n",
+ "\n",
+ " def extract_patch(self, patch):\n",
+ " \"\"\"\n",
+ " extracts a patch from an input image\n",
+ " :param patch: a tuple\n",
+ " :rtype: :py:class:`~PIL.Image.Image`\n",
+ " :returns: An :py:class:`~PIL.Image.Image` object.\n",
+ " \"\"\"\n",
+ " return self.img.crop((\n",
+ " patch[0] * self.stride, # left\n",
+ " patch[1] * self.stride, # up\n",
+ " patch[0] * self.stride + self.size, # right\n",
+ " patch[1] * self.stride + self.size # down\n",
+ " ))\n",
+ "\n",
+ " def shape(self):\n",
+ " wp = int((self.img.width - self.size) / self.stride + 1)\n",
+ " hp = int((self.img.height - self.size) / self.stride + 1)\n",
+ " return wp, hp"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "sOEfGa4OTrm_",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "mkdir new_train/MCL new_train/FL new_train/CLL"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "ccYl8m-rTHKd",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "import glob\n",
+ "from PIL import Image\n",
+ "\n",
+ "LABELS = ['CLL', 'FL', 'MCL']\n",
+ "PATCH_SIZE = 256\n",
+ "STRIDE = 256\n",
+ "\n",
+ "# The folder containing training data\n",
+ "train_folder = './train'\n",
+ "labels = {name: LABELS[index] for index in range(len(LABELS)) for name in glob.glob(train_folder + '/' + LABELS[index] + '/*.tif')}\n",
+ "\n",
+ "for key, value in labels.items():\n",
+ " try:\n",
+ " with Image.open(key) as img:\n",
+ " # the patch-size and stride is according to the paper\n",
+ " extractor = PatchExtractor(img=img, patch_size=PATCH_SIZE, stride=STRIDE)\n",
+ " patches = extractor.extract_patches()\n",
+ " count = 0\n",
+ " for p in patches:\n",
+ " count += 1\n",
+ " p.save('./new_train/' + value + '/' + str(count) + '_' + key.split('/')[-1])\n",
+ " except Exception as error:\n",
+ " print('error with', key, error)\n",
+ "\n"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "y4j-cShYT6Mz"
+ },
+ "source": [
+ "## Inception Recurrent Convolutional Neural Network (IRCNN)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "v7PLwcGm5jHz",
+ "colab_type": "code",
+ "outputId": "ae0d9538-3d52-4a4a-efd2-f66d02554054",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ }
+ },
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "# Sys\n",
+ "import warnings\n",
+ "# Keras Core\n",
+ "from keras.layers.convolutional import MaxPooling2D, Convolution2D, AveragePooling2D\n",
+ "from keras.layers.pooling import GlobalAveragePooling2D\n",
+ "from keras.layers import Input, Dropout, Dense, Flatten, Activation\n",
+ "from keras.layers.normalization import BatchNormalization\n",
+ "from keras.layers.merge import concatenate\n",
+ "from keras.layers import Add\n",
+ "from keras import regularizers\n",
+ "from keras import initializers\n",
+ "from keras.models import Model\n",
+ "\n",
+ "# Backend\n",
+ "from keras import backend as K\n"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Using TensorFlow backend.\n"
+ ],
+ "name": "stderr"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "DdmOO-QX5o3n",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "# Convolution 2D with batch norm\n",
+ "def conv2d_bn(x, nb_filter, num_row, num_col,\n",
+ " padding='same', strides=(1, 1), use_bias=False):\n",
+ " \"\"\"\n",
+ " Utility function to apply conv + BN. \n",
+ " (Slightly modified from https://github.com/fchollet/keras/blob/master/keras/applications/inception_v3.py)\n",
+ " \"\"\"\n",
+ " if K.image_data_format() == 'channels_first':\n",
+ " channel_axis = 1\n",
+ " else:\n",
+ " channel_axis = -1\n",
+ " x = Convolution2D(nb_filter, (num_row, num_col),\n",
+ " strides=strides,\n",
+ " padding=padding,\n",
+ " use_bias=use_bias,\n",
+ " kernel_regularizer=regularizers.l2(0.00004),\n",
+ " kernel_initializer=initializers.VarianceScaling(scale=2.0, mode='fan_in', distribution='normal', seed=None))(x)\n",
+ " x = BatchNormalization(axis=channel_axis, momentum=0.9997, scale=False)(x)\n",
+ " x = Activation('relu')(x)\n",
+ " return x\n",
+ "\n",
+ "# Recurrent convolutional layer\n",
+ "def RCL(input, kernel_size, filedepth):\n",
+ " if K.image_data_format() == 'channels_first':\n",
+ " channel_axis = 1\n",
+ " else:\n",
+ " channel_axis = -1\n",
+ "\n",
+ " conv1 = Convolution2D(filters=filedepth, kernel_size=kernel_size, strides=(1, 1), padding='same',\n",
+ " kernel_regularizer=regularizers.l2(0.00004),\n",
+ " kernel_initializer=initializers.VarianceScaling(scale=2.0, mode='fan_in', distribution='normal', seed=None))(input)\n",
+ "\n",
+ " stack2 = BatchNormalization(axis=channel_axis, momentum=0.9997, scale=False)(conv1)\n",
+ " stack2 = Activation('relu')(stack2)\n",
+ "\n",
+ " RCL = Convolution2D(filters=filedepth, kernel_size=kernel_size, strides=(1, 1), padding='same', \n",
+ " kernel_regularizer=regularizers.l2(0.00004),\n",
+ " kernel_initializer=initializers.VarianceScaling(scale=2.0, mode='fan_in', distribution='normal', seed=None))\n",
+ "\n",
+ " conv2 = RCL(stack2)\n",
+ " stack3 = Add()([conv1, conv2])\n",
+ " stack4 = BatchNormalization(axis=channel_axis, momentum=0.9997, scale=False)(stack3)\n",
+ " stack4 = Activation('relu')(stack4)\n",
+ "\n",
+ "\n",
+ " conv3 = Convolution2D(filters=filedepth, kernel_size=kernel_size, strides=(1, 1), padding='same',\n",
+ " weights=RCL.get_weights(),\n",
+ " kernel_regularizer=regularizers.l2(0.00004),\n",
+ " kernel_initializer=initializers.VarianceScaling(scale=2.0, mode='fan_in', distribution='normal', seed=None))(stack4)\n",
+ " stack5 = Add()([conv1, conv3])\n",
+ " stack6 = BatchNormalization(axis=channel_axis, momentum=0.9997, scale=False)(stack5)\n",
+ " stack6 = Activation('relu')(stack6)\n",
+ "\n",
+ "\n",
+ " conv4 = Convolution2D(filters=filedepth, kernel_size=kernel_size, strides=(1, 1), padding='same',\n",
+ " weights=RCL.get_weights(),\n",
+ " kernel_regularizer=regularizers.l2(0.00004),\n",
+ " kernel_initializer=initializers.VarianceScaling(scale=2.0, mode='fan_in', distribution='normal', seed=None))(stack6)\n",
+ " stack7 = Add()([conv1, conv4])\n",
+ " stack8 = BatchNormalization(axis=channel_axis, momentum=0.9997, scale=False)(stack7)\n",
+ " stack8 = Activation('relu')(stack8)\n",
+ "\n",
+ " return stack8\n",
+ "\n",
+ "\n",
+ "def IRCNN_block(input):\n",
+ " if K.image_data_format() == 'channels_first':\n",
+ " channel_axis = 1\n",
+ " else:\n",
+ " channel_axis = -1\n",
+ "\n",
+ " branch_0 = RCL(input, (1, 1), 64)\n",
+ "\n",
+ " branch_1 = RCL(input, (3, 3), 128)\n",
+ "\n",
+ " branch_2 = AveragePooling2D((3,3), strides=(1,1), padding='same')(input)\n",
+ " branch_2 = RCL(branch_2, (1, 1), 64)\n",
+ "\n",
+ " x = concatenate([branch_0, branch_1, branch_2], axis=channel_axis)\n",
+ " return x\n",
+ "\n",
+ "\n",
+ "def IRCNN_base(input):\n",
+ "\n",
+ " if K.image_data_format() == 'channels_first':\n",
+ "# inputShape = (3, 256, 256)\n",
+ " channel_axis = 1\n",
+ " else:\n",
+ "# inputShape = (256, 256, 3)\n",
+ " channel_axis = -1\n",
+ "\n",
+ " # Input Shape is 3 x 256 x 256\n",
+ " net = Convolution2D(32, (3, 3), strides=(2,2), padding='valid')(input)\n",
+ " net = conv2d_bn(net, 32, 3, 3, padding='valid')\n",
+ " net = conv2d_bn(net, 64, 3, 3)\n",
+ "\n",
+ " net = IRCNN_block(input)\n",
+ " \n",
+ " net = conv2d_bn(net, 32, 3, 3, strides=(2,2), padding='valid')\n",
+ " net = MaxPooling2D((3,3), strides=(2,2), padding='valid')(net)\n",
+ " net = Dropout(0.5)(net)\n",
+ "\n",
+ " net = IRCNN_block(input)\n",
+ " \n",
+ " net = conv2d_bn(net, 32, 3, 3, strides=(2,2), padding='valid')\n",
+ " net = MaxPooling2D((3,3), strides=(2,2), padding='valid')(net)\n",
+ " net = Dropout(0.5)(net)\n",
+ " \n",
+ " net = IRCNN_block(input)\n",
+ " \n",
+ " net = conv2d_bn(net, 32, 3, 3, strides=(2,2), padding='valid')\n",
+ " net = GlobalAveragePooling2D()(net)\n",
+ " net = Dropout(0.5)(net)\n",
+ " \n",
+ " \n",
+ " return net\n",
+ " \n",
+ "\t\t\t"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "jHqGqiMIoGlY",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "if K.image_data_format() == 'channels_first':\n",
+ " inputs = Input(shape = (3, 256, 256))\n",
+ "else:\n",
+ " inputs = Input(shape = (256, 256, 3))\n",
+ "\n",
+ "x = Convolution2D(32, (3, 3), strides=(2,2), padding='valid')(inputs)\n",
+ "x = IRCNN_base(x)\n",
+ "x = Dense(units=3, activation='softmax')(x)\n",
+ "\n",
+ "model = Model(inputs, x, name='IRCNN')\n"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "GYHzanvs8N0V",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ "model.summary()"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab_type": "code",
+ "outputId": "fc655dea-8a77-4df1-de18-14ead9b66048",
+ "id": "nUSWmOqfp4Yn",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 51
+ }
+ },
+ "source": [
+ "from keras_preprocessing.image import ImageDataGenerator\n",
+ "\n",
+ "aug = ImageDataGenerator(rotation_range=45,\n",
+ " fill_mode='wrap',\n",
+ " samplewise_center=True,\n",
+ " samplewise_std_normalization=True,\n",
+ " horizontal_flip=True, \n",
+ " vertical_flip=True, \n",
+ " validation_split=0.15)\n",
+ "bs = 16\n",
+ "train_path = './train'\n",
+ "\n",
+ "train_generator = aug.flow_from_directory(\n",
+ " train_path,\n",
+ " target_size=(256, 256),\n",
+ " batch_size=bs,\n",
+ " subset='training') # set as training data\n",
+ "\n",
+ "validation_generator = aug.flow_from_directory(\n",
+ " train_path, # same directory as training data\n",
+ " target_size=(256, 256),\n",
+ " batch_size=bs,\n",
+ " subset='validation') # set as validation data"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Found 6358 images belonging to 3 classes.\n",
+ "Found 1122 images belonging to 3 classes.\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab_type": "code",
+ "id": "XT2zm3q7p4Yv",
+ "colab": {}
+ },
+ "source": [
+ "train_step=train_generator.n//train_generator.batch_size\n",
+ "valid_step=validation_generator.n//validation_generator.batch_size"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab_type": "code",
+ "id": "T8j-sPf8p4Yx",
+ "colab": {}
+ },
+ "source": [
+ "from keras import optimizers\n",
+ "from keras import callbacks\n",
+ "import math\n",
+ "\n",
+ "# adam = optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999)\n",
+ "sgd = optimizers.SGD(lr=0.01)\n",
+ "\n",
+ "filepath=\"./models/weights-{epoch:02d}-{val_acc:.2f}.hdf5\"\n",
+ "\n",
+ "mcp = callbacks.ModelCheckpoint(filepath=filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')\n",
+ "callbacks_list = [mcp]\n",
+ "\n",
+ "model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=[\"accuracy\"])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab_type": "code",
+ "id": "bu95wKXcp4Y3",
+ "colab": {}
+ },
+ "source": [
+ "model.fit_generator(\n",
+ " train_generator,\n",
+ " steps_per_epoch=train_step,\n",
+ " validation_data=validation_generator,\n",
+ " validation_steps=valid_step,\n",
+ " epochs=20,\n",
+ " callbacks=callbacks_list,\n",
+ " verbose=1)\n",
+ "\n",
+ "# make lr=0.001 after 20 epochs"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "rijstjXinbJM",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/lymphoma-cancer-classification/model/tfjs_model/group1-shard1of1 b/lymphoma-cancer-classification/model/tfjs_model/group1-shard1of1
new file mode 100644
index 0000000..ebd38e1
Binary files /dev/null and b/lymphoma-cancer-classification/model/tfjs_model/group1-shard1of1 differ
diff --git a/lymphoma-cancer-classification/model/tfjs_model/model.json b/lymphoma-cancer-classification/model/tfjs_model/model.json
new file mode 100644
index 0000000..cbb21f1
--- /dev/null
+++ b/lymphoma-cancer-classification/model/tfjs_model/model.json
@@ -0,0 +1 @@
+{"modelTopology": {"keras_version": "2.2.4", "backend": "tensorflow", "model_config": {"class_name": "Model", "config": {"name": "IRCNN", "layers": [{"name": "input_1", "class_name": "InputLayer", "config": {"batch_input_shape": [null, 256, 256, 3], "dtype": "float32", "sparse": false, "name": "input_1"}, "inbound_nodes": []}, {"name": "conv2d_1", "class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "filters": 32, "kernel_size": [3, 3], "strides": [2, 2], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["input_1", 0, 0, {}]]]}, {"name": "average_pooling2d_3", "class_name": "AveragePooling2D", "config": {"name": "average_pooling2d_3", "trainable": true, "pool_size": [3, 3], "padding": "same", "strides": [1, 1], "data_format": "channels_last"}, "inbound_nodes": [[["conv2d_1", 0, 0, {}]]]}, {"name": "conv2d_31", "class_name": "Conv2D", "config": {"name": "conv2d_31", "trainable": true, "filters": 64, "kernel_size": [1, 1], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["conv2d_1", 0, 0, {}]]]}, {"name": "conv2d_35", "class_name": "Conv2D", "config": {"name": "conv2d_35", "trainable": true, "filters": 128, "kernel_size": [3, 3], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["conv2d_1", 0, 0, {}]]]}, {"name": "conv2d_39", "class_name": "Conv2D", "config": {"name": "conv2d_39", "trainable": true, "filters": 64, "kernel_size": [1, 1], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["average_pooling2d_3", 0, 0, {}]]]}, {"name": "batch_normalization_29", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_29", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["conv2d_31", 0, 0, {}]]]}, {"name": "batch_normalization_33", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_33", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["conv2d_35", 0, 0, {}]]]}, {"name": "batch_normalization_37", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_37", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["conv2d_39", 0, 0, {}]]]}, {"name": "activation_29", "class_name": "Activation", "config": {"name": "activation_29", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_29", 0, 0, {}]]]}, {"name": "activation_33", "class_name": "Activation", "config": {"name": "activation_33", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_33", 0, 0, {}]]]}, {"name": "activation_37", "class_name": "Activation", "config": {"name": "activation_37", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_37", 0, 0, {}]]]}, {"name": "conv2d_32", "class_name": "Conv2D", "config": {"name": "conv2d_32", "trainable": true, "filters": 64, "kernel_size": [1, 1], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_29", 0, 0, {}]]]}, {"name": "conv2d_36", "class_name": "Conv2D", "config": {"name": "conv2d_36", "trainable": true, "filters": 128, "kernel_size": [3, 3], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_33", 0, 0, {}]]]}, {"name": "conv2d_40", "class_name": "Conv2D", "config": {"name": "conv2d_40", "trainable": true, "filters": 64, "kernel_size": [1, 1], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_37", 0, 0, {}]]]}, {"name": "add_19", "class_name": "Add", "config": {"name": "add_19", "trainable": true}, "inbound_nodes": [[["conv2d_31", 0, 0, {}], ["conv2d_32", 0, 0, {}]]]}, {"name": "add_22", "class_name": "Add", "config": {"name": "add_22", "trainable": true}, "inbound_nodes": [[["conv2d_35", 0, 0, {}], ["conv2d_36", 0, 0, {}]]]}, {"name": "add_25", "class_name": "Add", "config": {"name": "add_25", "trainable": true}, "inbound_nodes": [[["conv2d_39", 0, 0, {}], ["conv2d_40", 0, 0, {}]]]}, {"name": "batch_normalization_30", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_30", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_19", 0, 0, {}]]]}, {"name": "batch_normalization_34", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_34", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_22", 0, 0, {}]]]}, {"name": "batch_normalization_38", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_38", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_25", 0, 0, {}]]]}, {"name": "activation_30", "class_name": "Activation", "config": {"name": "activation_30", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_30", 0, 0, {}]]]}, {"name": "activation_34", "class_name": "Activation", "config": {"name": "activation_34", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_34", 0, 0, {}]]]}, {"name": "activation_38", "class_name": "Activation", "config": {"name": "activation_38", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_38", 0, 0, {}]]]}, {"name": "conv2d_33", "class_name": "Conv2D", "config": {"name": "conv2d_33", "trainable": true, "filters": 64, "kernel_size": [1, 1], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_30", 0, 0, {}]]]}, {"name": "conv2d_37", "class_name": "Conv2D", "config": {"name": "conv2d_37", "trainable": true, "filters": 128, "kernel_size": [3, 3], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_34", 0, 0, {}]]]}, {"name": "conv2d_41", "class_name": "Conv2D", "config": {"name": "conv2d_41", "trainable": true, "filters": 64, "kernel_size": [1, 1], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_38", 0, 0, {}]]]}, {"name": "add_20", "class_name": "Add", "config": {"name": "add_20", "trainable": true}, "inbound_nodes": [[["conv2d_31", 0, 0, {}], ["conv2d_33", 0, 0, {}]]]}, {"name": "add_23", "class_name": "Add", "config": {"name": "add_23", "trainable": true}, "inbound_nodes": [[["conv2d_35", 0, 0, {}], ["conv2d_37", 0, 0, {}]]]}, {"name": "add_26", "class_name": "Add", "config": {"name": "add_26", "trainable": true}, "inbound_nodes": [[["conv2d_39", 0, 0, {}], ["conv2d_41", 0, 0, {}]]]}, {"name": "batch_normalization_31", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_31", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_20", 0, 0, {}]]]}, {"name": "batch_normalization_35", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_35", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_23", 0, 0, {}]]]}, {"name": "batch_normalization_39", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_39", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_26", 0, 0, {}]]]}, {"name": "activation_31", "class_name": "Activation", "config": {"name": "activation_31", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_31", 0, 0, {}]]]}, {"name": "activation_35", "class_name": "Activation", "config": {"name": "activation_35", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_35", 0, 0, {}]]]}, {"name": "activation_39", "class_name": "Activation", "config": {"name": "activation_39", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_39", 0, 0, {}]]]}, {"name": "conv2d_34", "class_name": "Conv2D", "config": {"name": "conv2d_34", "trainable": true, "filters": 64, "kernel_size": [1, 1], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_31", 0, 0, {}]]]}, {"name": "conv2d_38", "class_name": "Conv2D", "config": {"name": "conv2d_38", "trainable": true, "filters": 128, "kernel_size": [3, 3], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_35", 0, 0, {}]]]}, {"name": "conv2d_42", "class_name": "Conv2D", "config": {"name": "conv2d_42", "trainable": true, "filters": 64, "kernel_size": [1, 1], "strides": [1, 1], "padding": "same", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["activation_39", 0, 0, {}]]]}, {"name": "add_21", "class_name": "Add", "config": {"name": "add_21", "trainable": true}, "inbound_nodes": [[["conv2d_31", 0, 0, {}], ["conv2d_34", 0, 0, {}]]]}, {"name": "add_24", "class_name": "Add", "config": {"name": "add_24", "trainable": true}, "inbound_nodes": [[["conv2d_35", 0, 0, {}], ["conv2d_38", 0, 0, {}]]]}, {"name": "add_27", "class_name": "Add", "config": {"name": "add_27", "trainable": true}, "inbound_nodes": [[["conv2d_39", 0, 0, {}], ["conv2d_42", 0, 0, {}]]]}, {"name": "batch_normalization_32", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_32", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_21", 0, 0, {}]]]}, {"name": "batch_normalization_36", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_36", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_24", 0, 0, {}]]]}, {"name": "batch_normalization_40", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_40", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["add_27", 0, 0, {}]]]}, {"name": "activation_32", "class_name": "Activation", "config": {"name": "activation_32", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_32", 0, 0, {}]]]}, {"name": "activation_36", "class_name": "Activation", "config": {"name": "activation_36", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_36", 0, 0, {}]]]}, {"name": "activation_40", "class_name": "Activation", "config": {"name": "activation_40", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_40", 0, 0, {}]]]}, {"name": "concatenate_3", "class_name": "Concatenate", "config": {"name": "concatenate_3", "trainable": true, "axis": -1}, "inbound_nodes": [[["activation_32", 0, 0, {}], ["activation_36", 0, 0, {}], ["activation_40", 0, 0, {}]]]}, {"name": "conv2d_43", "class_name": "Conv2D", "config": {"name": "conv2d_43", "trainable": true, "filters": 32, "kernel_size": [3, 3], "strides": [2, 2], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "linear", "use_bias": false, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 2.0, "mode": "fan_in", "distribution": "normal", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L1L2", "config": {"l1": 0.0, "l2": 3.9999998989515007e-05}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["concatenate_3", 0, 0, {}]]]}, {"name": "batch_normalization_41", "class_name": "BatchNormalization", "config": {"name": "batch_normalization_41", "trainable": true, "axis": -1, "momentum": 0.9997, "epsilon": 0.001, "center": true, "scale": false, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "inbound_nodes": [[["conv2d_43", 0, 0, {}]]]}, {"name": "activation_41", "class_name": "Activation", "config": {"name": "activation_41", "trainable": true, "activation": "relu"}, "inbound_nodes": [[["batch_normalization_41", 0, 0, {}]]]}, {"name": "global_average_pooling2d_1", "class_name": "GlobalAveragePooling2D", "config": {"name": "global_average_pooling2d_1", "trainable": true, "data_format": "channels_last"}, "inbound_nodes": [[["activation_41", 0, 0, {}]]]}, {"name": "dropout_3", "class_name": "Dropout", "config": {"name": "dropout_3", "trainable": true, "rate": 0.5, "noise_shape": null, "seed": null}, "inbound_nodes": [[["global_average_pooling2d_1", 0, 0, {}]]]}, {"name": "dense_1", "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "units": 3, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "inbound_nodes": [[["dropout_3", 0, 0, {}]]]}], "input_layers": [["input_1", 0, 0]], "output_layers": [["dense_1", 0, 0]]}}, "training_config": {"optimizer_config": {"class_name": "SGD", "config": {"lr": 0.009999999776482582, "momentum": 0.0, "decay": 0.0, "nesterov": false}}, "loss": "categorical_crossentropy", "metrics": ["accuracy"], "sample_weight_mode": null, "loss_weights": null}}, "weightsManifest": [{"paths": ["group1-shard1of1"], "weights": [{"name": "batch_normalization_29/beta", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_29/moving_mean", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_29/moving_variance", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_30/beta", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_30/moving_mean", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_30/moving_variance", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_31/beta", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_31/moving_mean", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_31/moving_variance", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_32/beta", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_32/moving_mean", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_32/moving_variance", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_33/beta", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_33/moving_mean", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_33/moving_variance", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_34/beta", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_34/moving_mean", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_34/moving_variance", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_35/beta", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_35/moving_mean", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_35/moving_variance", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_36/beta", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_36/moving_mean", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_36/moving_variance", "shape": [128], "dtype": "float32"}, {"name": "batch_normalization_37/beta", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_37/moving_mean", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_37/moving_variance", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_38/beta", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_38/moving_mean", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_38/moving_variance", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_39/beta", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_39/moving_mean", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_39/moving_variance", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_40/beta", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_40/moving_mean", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_40/moving_variance", "shape": [64], "dtype": "float32"}, {"name": "batch_normalization_41/beta", "shape": [32], "dtype": "float32"}, {"name": "batch_normalization_41/moving_mean", "shape": [32], "dtype": "float32"}, {"name": "batch_normalization_41/moving_variance", "shape": [32], "dtype": "float32"}, {"name": "conv2d_1/kernel", "shape": [3, 3, 3, 32], "dtype": "float32"}, {"name": "conv2d_1/bias", "shape": [32], "dtype": "float32"}, {"name": "conv2d_31/kernel", "shape": [1, 1, 32, 64], "dtype": "float32"}, {"name": "conv2d_31/bias", "shape": [64], "dtype": "float32"}, {"name": "conv2d_32/kernel", "shape": [1, 1, 64, 64], "dtype": "float32"}, {"name": "conv2d_32/bias", "shape": [64], "dtype": "float32"}, {"name": "conv2d_33/kernel", "shape": [1, 1, 64, 64], "dtype": "float32"}, {"name": "conv2d_33/bias", "shape": [64], "dtype": "float32"}, {"name": "conv2d_34/kernel", "shape": [1, 1, 64, 64], "dtype": "float32"}, {"name": "conv2d_34/bias", "shape": [64], "dtype": "float32"}, {"name": "conv2d_35/kernel", "shape": [3, 3, 32, 128], "dtype": "float32"}, {"name": "conv2d_35/bias", "shape": [128], "dtype": "float32"}, {"name": "conv2d_36/kernel", "shape": [3, 3, 128, 128], "dtype": "float32"}, {"name": "conv2d_36/bias", "shape": [128], "dtype": "float32"}, {"name": "conv2d_37/kernel", "shape": [3, 3, 128, 128], "dtype": "float32"}, {"name": "conv2d_37/bias", "shape": [128], "dtype": "float32"}, {"name": "conv2d_38/kernel", "shape": [3, 3, 128, 128], "dtype": "float32"}, {"name": "conv2d_38/bias", "shape": [128], "dtype": "float32"}, {"name": "conv2d_39/kernel", "shape": [1, 1, 32, 64], "dtype": "float32"}, {"name": "conv2d_39/bias", "shape": [64], "dtype": "float32"}, {"name": "conv2d_40/kernel", "shape": [1, 1, 64, 64], "dtype": "float32"}, {"name": "conv2d_40/bias", "shape": [64], "dtype": "float32"}, {"name": "conv2d_41/kernel", "shape": [1, 1, 64, 64], "dtype": "float32"}, {"name": "conv2d_41/bias", "shape": [64], "dtype": "float32"}, {"name": "conv2d_42/kernel", "shape": [1, 1, 64, 64], "dtype": "float32"}, {"name": "conv2d_42/bias", "shape": [64], "dtype": "float32"}, {"name": "conv2d_43/kernel", "shape": [3, 3, 256, 32], "dtype": "float32"}, {"name": "dense_1/kernel", "shape": [32, 3], "dtype": "float32"}, {"name": "dense_1/bias", "shape": [3], "dtype": "float32"}]}]}
\ No newline at end of file
diff --git a/lymphoma-cancer-classification/model/weights-keras.hdf5 b/lymphoma-cancer-classification/model/weights-keras.hdf5
new file mode 100644
index 0000000..c699111
Binary files /dev/null and b/lymphoma-cancer-classification/model/weights-keras.hdf5 differ