{"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":"markdown","source":"![image.png](attachment:image.png)","metadata":{},"attachments":{"image.png":{"image/png":"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"}}},{"cell_type":"code","source":"!pip install nnAudio\n!pip install efficientnet","metadata":{"execution":{"iopub.status.busy":"2022-01-08T16:46:12.766588Z","iopub.execute_input":"2022-01-08T16:46:12.76703Z","iopub.status.idle":"2022-01-08T16:46:32.822002Z","shell.execute_reply.started":"2022-01-08T16:46:12.766942Z","shell.execute_reply":"2022-01-08T16:46:32.821203Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.utils import Sequence\nfrom tensorflow.keras import Sequential, utils, optimizers, metrics\nimport tensorflow as tf\nimport tensorflow.keras.layers as layers\nimport numpy as np\nfrom matplotlib import pyplot as plt\nfrom sklearn.model_selection import train_test_split\nimport pandas as pd\nfrom random import shuffle\nfrom nnAudio.Spectrogram import CQT1992v2\nimport torch\nfrom scipy import signal, fft\nfrom efficientnet.tfkeras import EfficientNetB0, EfficientNetB1\nimport math\nfrom scipy.interpolate import interp1d\nfrom scipy.signal import butter, lfilter\nfrom functools import lru_cache\nimport logging\ntf.get_logger().setLevel(logging.ERROR)\nTOP_INPUT_DIRECTORY = \"../input/g2net-gravitational-wave-detection\"\nEXAMPLE_IDENTIFIER_1 = \"00000e74ad\"\nEXAMPLE_IDENTIFIER_0 = \"00001f4945\"\nRANDOM_SAMPLE_SIZE = 1\nSAMPLING_FREQUENCY = 2048\nSAMPLES_1 = 4096\nSAMPLES_3 = 3 * SAMPLES_1\nSUBSET_SIZE = 1024\nLEARNING_RATE = 0.001\nTRAIN_TEST_SPLIT = 0.95\n\n\n\n# Utility functions\n\ndef make_array_cyclic(array):\n    \"\"\"Takes as input a 2d ndarray, and returns the same array but with the last\n    array copied to the front (so array [[0], [1], [2]] -> [[2], [0], [1], [2]]\n    This is so convolution layers can identifier features between measurements by\n    sensors 0 and 2.\"\"\"\n    last_array = array[-1, :]\n    reshaped_array = np.reshape(last_array, (1, last_array.shape[0]))\n    # print(reshaped_array.shape)\n    return np.insert(array, 0, reshaped_array, 0)\n\n\ndef get_array(identifier, is_training=True):\n    \"\"\"Eg. Given identifier \"00001f4945\", returns array loaded from\n    input/train/0/0/0/00001f4945.npy. If is_training is False, use test instead\n    of train.\"\"\"\n    char0 = identifier[0]\n    char1 = identifier[1]\n    char2 = identifier[2]\n    if is_training:\n        path = f\"{TOP_INPUT_DIRECTORY}/train/{char0}/{char1}/{char2}/{identifier}.npy\"\n    else:\n        path = f\"{TOP_INPUT_DIRECTORY}/test/{char0}/{char1}/{char2}/{identifier}.npy\"\n    return np.load(path)\n\ndef get_array_n(identifier, is_training=True):\n    \"\"\"Return hstack of signal, each signal normalised before stack.\"\"\"\n    arr = get_array(identifier, is_training)\n    arr0 = arr[0]\n    arr0 = arr0 / np.max(arr0)\n    arr1 = arr[1]\n    arr1 = arr1 / np.max(arr1)\n    arr2 = arr[2]\n    arr2 = arr2 / np.max(arr2)\n    return np.hstack([arr0, arr1, arr2])\n\ndef get_cqt_spectrogram(id, is_train=True):\n    cqt = CQT1992v2(sr=SAMPLING_FREQUENCY, hop_length=64, fmin=20, fmax=1024, bins_per_octave=12, norm=1, window='hann', center=True, pad_mode='reflect', trainable=False, output_format='Magnitude', verbose=False)\n    waveform = np.hstack(get_array(id, is_train))\n    waveform = waveform / np.max(waveform)\n    waveform = torch.from_numpy(waveform).float()\n    cqt_image = cqt(waveform)\n    cqt_image = np.array(cqt_image)\n    cqt_image = np.transpose(cqt_image, (1,2,0))\n    return cqt_image","metadata":{"papermill":{"duration":9.328463,"end_time":"2021-10-10T20:53:05.868593","exception":false,"start_time":"2021-10-10T20:52:56.54013","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-01-08T16:46:32.826089Z","iopub.execute_input":"2022-01-08T16:46:32.826311Z","iopub.status.idle":"2022-01-08T16:46:39.99028Z","shell.execute_reply.started":"2022-01-08T16:46:32.826283Z","shell.execute_reply":"2022-01-08T16:46:39.989626Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# A look and feel of the data.\n\ntargets = pd.read_csv(f\"{TOP_INPUT_DIRECTORY}/training_labels.csv\")\ny = targets[\"target\"].values\n\nall_identifiers = targets[\"id\"].values\nidentifiers_1 = targets[targets[\"target\"] == 1][\"id\"].values\nidentifiers_0 = targets[targets[\"target\"] == 0][\"id\"].values\n\n# Choose a random few samples with signal and no-signal.\nsample_ids_1 = np.random.choice(identifiers_1, RANDOM_SAMPLE_SIZE)\nprint(f\"\\nRandom samples with SIGNAL + NOISE: {sample_ids_1}\")\nsample_ids_0 = np.random.choice(identifiers_0, RANDOM_SAMPLE_SIZE)\nprint(f\"\\nRandom samples with ONLY NOISE: {sample_ids_0}\")\nprint(\"\\n\")\n\n","metadata":{"papermill":{"duration":0.52416,"end_time":"2021-10-10T20:53:06.436249","exception":false,"start_time":"2021-10-10T20:53:05.912089","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-01-08T16:46:39.991506Z","iopub.execute_input":"2022-01-08T16:46:39.991817Z","iopub.status.idle":"2022-01-08T16:46:40.405921Z","shell.execute_reply.started":"2022-01-08T16:46:39.991778Z","shell.execute_reply":"2022-01-08T16:46:40.405162Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# General Dataset generator, to be extended with specific implementations of fetching sample/batch\n\nclass DataSetGenerator(Sequence):\n    \"\"\"Allows batch-loading of the ~50GB training data so we don't exhaust RAM.\"\"\"\n\n    def get_sample(self, id, is_train):\n        \"\"\"Needs to be implemented by child.\"\"\"\n        pass\n    \n    def __init__(self, identifiers, y=None, batch_size=256,\n        shuffle=True, no_channels=1, no_classes=10, name=\"Unknown DataSet\"):\n        \"\"\"Provided custom parameters for DataGenerator. At minimum, input an array\n        of identifiers. If training, input the targets values also.\"\"\"\n        self.shuffle = shuffle\n        self.batch_size = batch_size\n        self.identifiers = identifiers\n        self.y = y\n        self.name = name\n        if y is not None:\n            self.is_training = True\n        else:\n            self.is_training = False\n        self.shape = self.get_sample(self.identifiers[0], self.is_training).shape\n        print(f\"{self.name} - Shape of each sample: {self.shape}\\n\")\n\n\n    def __len__(self):\n        \"\"\"States number of batches per epoch (rounds up).\"\"\"\n        return math.ceil(len(self.identifiers)/self.batch_size)\n    @lru_cache(maxsize=None)\n    def __getitem__(self, index):\n        \"\"\"Return batch of X (and y if training). Can be overidden in child if model input shape requires.\"\"\"\n        batch_ids = self.identifiers[index * self.batch_size:(index + 1) * self.batch_size]\n        if self.y is not None:\n            batch_y = self.y[index * self.batch_size: (index + 1) * self.batch_size]\n        list_x = np.array([self.get_sample(x, self.is_training) for x in batch_ids])\n        batch_X = np.stack(list_x)\n        if self.is_training:\n            return batch_X, np.array(batch_y)\n        else:\n            return batch_X\n\n    def on_epoch_end(self):\n        \"\"\"Shuffle at the end of each epoch.\"\"\"\n        pass\n#         if self.shuffle and self.is_training:\n#             ids_y = list(zip(self.identifiers, self.y))\n#             shuffle(ids_y)\n#             self.identifiers, self.y = list(zip(*ids_y))\n            \n            \n            \nclass TimeSeriesDataSetGenerator(DataSetGenerator):\n    \"\"\"Inherits from DataSetGenerator class, methods to get sample and therefore batch are implemented, simply\n    fetching the raw samples of 3x4096 ndarrays.\"\"\"\n    \n    def get_sample(self, id, is_train):\n        \"\"\"Return 3x4096 ndarray (time-series data).\"\"\"\n        return make_array_cyclic(get_array(id, is_train))\n    \n    \n    \nclass Cqt1992DataSetGenerator(DataSetGenerator):\n    \"\"\"Inherits from DataSetGenerator class, methods to get sample and therefore batch are implemented, fetches\n    CQT1992 spectrogram of the hstack'd arrays.\"\"\"\n    \n    def get_sample(self, id, is_train):\n        \"\"\"Return CQT1992 spectrogram.\"\"\"\n        return get_cqt_spectrogram(id, is_train)\n    \n    def __getitem__(self, index):\n        \"\"\"Return batch of X (and y if training). Can be overidden in child if model input shape requires.\"\"\"\n        batch_ids = self.identifiers[index * self.batch_size:(index + 1) * self.batch_size]\n        if self.y is not None:\n            batch_y = self.y[index * self.batch_size: (index + 1) * self.batch_size]\n\n        list_x = np.array([self.get_sample(x, self.is_training) for x in batch_ids])\n        batch_X = np.stack(list_x)\n\n        if self.is_training:\n            return batch_X, np.array(batch_y)\n        else:\n            return batch_X","metadata":{"papermill":{"duration":0.117316,"end_time":"2021-10-10T20:53:23.175083","exception":false,"start_time":"2021-10-10T20:53:23.057767","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-01-08T16:46:40.407951Z","iopub.execute_input":"2022-01-08T16:46:40.408139Z","iopub.status.idle":"2022-01-08T16:46:40.424642Z","shell.execute_reply.started":"2022-01-08T16:46:40.408116Z","shell.execute_reply":"2022-01-08T16:46:40.423739Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Set up test train split\n\ntargets = pd.read_csv(f\"{TOP_INPUT_DIRECTORY}/training_labels.csv\")\nsample_submission = pd.read_csv(f\"{TOP_INPUT_DIRECTORY}/sample_submission.csv\")\ntest_identifiers = sample_submission[\"id\"].values\nidentifiers = targets[\"id\"].values\ny = targets[\"target\"].values\n\ntrain_x, valid_x, train_y, valid_y = train_test_split(identifiers, y, train_size=TRAIN_TEST_SPLIT,random_state = 1, stratify=y)","metadata":{"papermill":{"duration":0.113155,"end_time":"2021-10-10T20:53:24.079144","exception":false,"start_time":"2021-10-10T20:53:23.965989","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-01-08T16:46:40.426322Z","iopub.execute_input":"2022-01-08T16:46:40.426729Z","iopub.status.idle":"2022-01-08T16:46:41.295737Z","shell.execute_reply.started":"2022-01-08T16:46:40.426695Z","shell.execute_reply":"2022-01-08T16:46:41.294978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Create Data Shards\ntrain_x_shard = [train_x[x:x+len(train_x)//4] for x in range(0, len(train_x), len(train_x)//4)]\ntrain_y_shard = [train_y[x:x+len(train_y)//4] for x in range(0, len(train_y), len(train_y)//4)]\n\nvalid_x_shard = [valid_x[x:x+len(valid_x)//4] for x in range(0, len(valid_x), len(valid_x)//4)]\nvalid_y_shard = [valid_y[x:x+len(valid_y)//4] for x in range(0, len(valid_y), len(valid_y)//4)]\n\nprint(\"train_x_shard=\",len(train_x_shard),\"data size=\",len(train_x_shard[0]))\nprint(\"train_y_shard=\",len(train_y_shard),\"data size=\",len(train_y_shard[0]))\nprint(\"valid_x_shard=\",len(valid_x_shard),\"data size=\",len(valid_x_shard[0]))\nprint(\"valid_y_shard=\",len(valid_y_shard),\"data size=\",len(valid_y_shard[0]))","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2022-01-08T16:46:41.297034Z","iopub.execute_input":"2022-01-08T16:46:41.297272Z","iopub.status.idle":"2022-01-08T16:46:41.309278Z","shell.execute_reply.started":"2022-01-08T16:46:41.29724Z","shell.execute_reply":"2022-01-08T16:46:41.30861Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Initialize data generators\nis2Ddata=True\nx=0\nif is2Ddata:\n    BATCH_SIZE = 64\n    train_dataset = Cqt1992DataSetGenerator(train_x_shard[x], train_y_shard[x], batch_size=BATCH_SIZE, name=\"Training\")\n    valid_dataset = Cqt1992DataSetGenerator(valid_x_shard[x], valid_y_shard[x], batch_size=BATCH_SIZE, name=\"Validation\")\n    test_dataset = Cqt1992DataSetGenerator(test_identifiers, batch_size=BATCH_SIZE, name=\"Test\")\nelse:\n    BATCH_SIZE = 4096\n    train_dataset = TimeSeriesDataSetGenerator(train_x_shard[x], train_y_shard[x], batch_size=BATCH_SIZE, name=\"Training\")\n    valid_dataset = TimeSeriesDataSetGenerator(valid_x_shard[x], valid_y_shard[x], batch_size=BATCH_SIZE, name=\"Validation\")\n    test_dataset = TimeSeriesDataSetGenerator(test_identifiers, batch_size=BATCH_SIZE, name=\"Test\")\ntemp_valid_dataset=valid_dataset","metadata":{"papermill":{"duration":7.42053,"end_time":"2021-10-10T20:53:31.816035","exception":false,"start_time":"2021-10-10T20:53:24.395505","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-01-08T16:46:41.310809Z","iopub.execute_input":"2022-01-08T16:46:41.311343Z","iopub.status.idle":"2022-01-08T16:46:41.53788Z","shell.execute_reply.started":"2022-01-08T16:46:41.311307Z","shell.execute_reply":"2022-01-08T16:46:41.537149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_shape = train_dataset.shape\ndef get_basic_cnn1d_model(shape):\n    \"\"\"Returns compiled model (callbacks, history, fitting etc not done here).\"\"\"\n    model = tf.keras.models.Sequential([\n    tf.keras.layers.Conv1D(64, (5),activation='relu',strides =1,padding=\"same\", input_shape=(4, 4096)),\n    tf.keras.layers.MaxPooling1D(2),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.Conv1D(32, (3),activation='relu',strides =1,padding=\"same\",activity_regularizer=tf.keras.regularizers.L1L2(l1=0.3, l2=0.01)),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.BatchNormalization(),\n    tf.keras.layers.Dropout(0.5),\n    tf.keras.layers.Dense(8, activation='relu'),\n    tf.keras.layers.Dense(1, activation='sigmoid')\n    ])\n    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc',metrics.AUC()])\n    model.summary()\n    return model\n\ndef get_cqt1992_model(shape):\n    \"\"\"Returns compiled model (callbacks, history, fitting etc not done here).\"\"\"\n    # Build model layers.\n    model = Sequential([\n        layers.InputLayer(input_shape=(shape[0],shape[1],1)),\n         layers.Conv2D(3,3,activation='relu',padding='same'),\n        #EfficientNetB0(include_top=False,input_shape=(),weights='imagenet'),\n        EfficientNetB1(include_top=False,input_shape=(),weights='imagenet'),\n        layers.GlobalAveragePooling2D(),\n        tf.keras.layers.Flatten(),\n        layers.Dense(32,activation='relu'),\n        layers.Dense(1, activation='sigmoid')\n    ])\n  \n    model.compile(optimizer='nadam',\n                  loss='binary_crossentropy',\n                  metrics=['acc',metrics.AUC()])\n    model.summary()\n    return model","metadata":{"execution":{"iopub.status.busy":"2022-01-08T16:46:41.539052Z","iopub.execute_input":"2022-01-08T16:46:41.539302Z","iopub.status.idle":"2022-01-08T16:46:41.553428Z","shell.execute_reply.started":"2022-01-08T16:46:41.539265Z","shell.execute_reply":"2022-01-08T16:46:41.552423Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if is2Ddata:\n    model = get_cqt1992_model(sample_shape)\nelse:\n    model = get_basic_cnn1d_model(sample_shape)\n    \nmodel._name='effnet_adam' ","metadata":{"execution":{"iopub.status.busy":"2022-01-08T16:46:41.555118Z","iopub.execute_input":"2022-01-08T16:46:41.555401Z","iopub.status.idle":"2022-01-08T16:46:53.813353Z","shell.execute_reply.started":"2022-01-08T16:46:41.555364Z","shell.execute_reply":"2022-01-08T16:46:53.812645Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"old =0\nclass myCallback(tf.keras.callbacks.Callback):\n        def on_epoch_end(self,epoch,logs={}):\n            global old\n            if(logs.get('val_acc') > old):\n                model.save(str(model.name)+'_'+str(x)+'.h5',overwrite=True)\n                old = logs.get('val_acc')\nsaver =myCallback()\n\nEPOCHS =1 \n#history = model.fit(train_dataset,validation_data=valid_dataset,epochs=EPOCHS,verbose=1,callbacks=[saver])","metadata":{"papermill":{"duration":14503.803326,"end_time":"2021-10-11T00:55:15.727625","exception":false,"start_time":"2021-10-10T20:53:31.924299","status":"completed"},"scrolled":true,"tags":[],"execution":{"iopub.status.busy":"2022-01-08T05:10:42.129649Z","iopub.execute_input":"2022-01-08T05:10:42.130007Z","iopub.status.idle":"2022-01-08T05:10:42.139858Z","shell.execute_reply.started":"2022-01-08T05:10:42.12996Z","shell.execute_reply":"2022-01-08T05:10:42.138783Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras import backend as K\nfor x in range(3,4):\n    old =0\n    class myCallback(tf.keras.callbacks.Callback):\n        def on_epoch_end(self,epoch,logs={}):\n            global old\n            if(logs.get('val_acc') > old):\n                model.save(str(model.name)+'_'+str(x)+'.h5',overwrite=True)\n                old = logs.get('val_acc')\n    saver =myCallback()\n    if is2Ddata:\n        BATCH_SIZE = 64\n        train_dataset = Cqt1992DataSetGenerator(train_x_shard[x], train_y_shard[x], batch_size=BATCH_SIZE, name=\"Training\")\n        valid_dataset = Cqt1992DataSetGenerator(valid_x_shard[x], valid_y_shard[x], batch_size=BATCH_SIZE, name=\"Validation\")\n        model = get_cqt1992_model(sample_shape)\n        \n    else:\n        BATCH_SIZE = 4096\n        train_dataset = TimeSeriesDataSetGenerator(train_x_shard[x], train_y_shard[x], batch_size=BATCH_SIZE, name=\"Training\")\n        valid_dataset = TimeSeriesDataSetGenerator(valid_x_shard[x], valid_y_shard[x], batch_size=BATCH_SIZE, name=\"Validation\")\n        model = get_basic_cnn1d_model(sample_shape)\n   \n    model._name='effnet_adam'\n    EPOCHS = 1\n    print(\"model training client no = \",x+1)\n    history = model.fit(train_dataset,validation_data=valid_dataset,epochs=EPOCHS,verbose=1,callbacks=[saver])\n    K.clear_session()","metadata":{"execution":{"iopub.status.busy":"2022-01-08T16:46:53.815914Z","iopub.execute_input":"2022-01-08T16:46:53.816163Z","iopub.status.idle":"2022-01-08T17:43:32.73876Z","shell.execute_reply.started":"2022-01-08T16:46:53.816129Z","shell.execute_reply":"2022-01-08T17:43:32.737156Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def scale_model_weights(weight, scalar=0.25):#its 0.25 since we got 4 data shards\n    '''function for scaling a models weights'''\n    #print('scalar=',scalar)\n    #scalar = 0.66\n    weight_final = []\n    steps = len(weight)\n    for i in range(steps):\n        weight_final.append(scalar * weight[i])\n    return weight_final\n\ndef sum_scaled_weights(scaled_weight_list):\n    '''Return the sum of the listed scaled weights. The is equivalent to scaled avg of the weights'''\n    avg_grad = list()\n    #get the average grad accross all local model gradients\n    for grad_list_tuple in zip(*scaled_weight_list):\n        layer_mean = tf.math.reduce_sum(grad_list_tuple, axis=0)\n        avg_grad.append(layer_mean)\n        \n    return avg_grad","metadata":{"execution":{"iopub.status.busy":"2022-01-08T17:50:02.018826Z","iopub.execute_input":"2022-01-08T17:50:02.020824Z","iopub.status.idle":"2022-01-08T17:50:02.032539Z","shell.execute_reply.started":"2022-01-08T17:50:02.020763Z","shell.execute_reply":"2022-01-08T17:50:02.031706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#new_model = tf.keras.models.load_model('trained_model0.h5')\nmodel_weight_list=[]\nmodel_list=[]\n\nfor root, dirnames, filenames in os.walk(saved_model_root):\n    #basically look for models in folder and load its weight\n    for filename in fnmatch.filter(filenames, '*.h5'):\n        local_model_path =os.path.join(root, filename)\n        print(local_model_path)\n        local_model = tf.keras.models.load_model(local_model_path)\n        model_list.append(local_model)\n        local_model_weights = local_model.get_weights()\n        model_weight_list.append(local_model_weights)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport random\nfrom   tensorflow.keras.preprocessing.image import img_to_array, load_img\n\n# Let's define a new Model that will take an image as input, and will output\n# intermediate representations for all layers in the previous model after\n# the first.\nsuccessive_outputs = [layer.output for layer in model.layers[1:]]\n\n#visualization_model = Model(img_input, successive_outputs)\nvisualization_model = tf.keras.models.Model(inputs = model.input, outputs = successive_outputs)\n\n# Let's prepare a random input image of a cat or dog from the training set.\n# cat_img_files = [os.path.join(train_cats_dir, f) for f in train_cat_fnames]\n# dog_img_files = [os.path.join(train_dogs_dir, f) for f in train_dog_fnames]\n\n# img_path = random.choice(cat_img_files + dog_img_files)\n#img = load_img(img_path, target_size=(150, 150))  # this is a PIL image\n#img=\n#x   = img_to_array(img) # Numpy array with shape (150, 150, 3)np.load(\"./00000e74ad.npy\")\nx = valid_dataset.get_sample(\"00000e74ad\",is_train=True)\nx = x.reshape((1,) + x.shape)                   # Numpy array with shape (1, 150, 150, 3)\n\n# Rescale by 1/255\n#x /= 255.0\n\n# Let's run our image through our network, thus obtaining all\n# intermediate representations for this image.\nsuccessive_feature_maps = visualization_model.predict(x)\n\n# These are the names of the layers, so can have them as part of our plot\nlayer_names = [layer.name for layer in model.layers]\n\n# -----------------------------------------------------------------------\n# Now let's display our representations\n# -----------------------------------------------------------------------\nfor layer_name, feature_map in zip(layer_names, successive_feature_maps):\n  \n  if len(feature_map.shape) == 4:\n    \n    #-------------------------------------------\n    # Just do this for the conv / maxpool layers, not the fully-connected layers\n    #-------------------------------------------\n    n_features = feature_map.shape[-1]  # number of features in the feature map\n    size       = feature_map.shape[ 1]  # feature map shape (1, size, size, n_features)\n    \n    # We will tile our images in this matrix\n    display_grid = np.zeros((size, size * n_features))\n    #-------------------------------------------------\n    # Postprocess the feature to be visually palatable\n    #-------------------------------------------------\n    for i in range(n_features):\n      x  = feature_map[0, :, :, i]\n      x -= x.mean()\n      x /= x.std ()\n      x *=  64\n      x += 128\n      x  = np.clip(x, 0, 255).astype('uint8')\n      display_grid[:, i * size : (i + 1) * size] = x # Tile each filter into a horizontal grid\n\n    #-----------------\n    # Display the grid\n    #-----------------\n\n    scale = 20. / n_features\n    plt.figure( figsize=(scale * n_features, scale) )\n    plt.title ( layer_name )\n    plt.grid  ( False )\n    plt.imshow( display_grid, aspect='auto', cmap='viridis' ) ","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for x in range(1,4):\n    if is2Ddata:\n        BATCH_SIZE = 64\n        train_dataset = Cqt1992DataSetGenerator(train_x_shard[x], train_y_shard[x], batch_size=BATCH_SIZE, name=\"Training\")\n        valid_dataset = Cqt1992DataSetGenerator(valid_x_shard[x], valid_y_shard[x], batch_size=BATCH_SIZE, name=\"Validation\")\n        model = get_cqt1992_model(sample_shape)\n    else:\n        BATCH_SIZE = 4096\n        train_dataset = TimeSeriesDataSetGenerator(train_x_shard[x], train_y_shard[x], batch_size=BATCH_SIZE, name=\"Training\")\n        valid_dataset = TimeSeriesDataSetGenerator(valid_x_shard[x], valid_y_shard[x], batch_size=BATCH_SIZE, name=\"Validation\")\n        model = get_basic_cnn1d_model(sample_shape)\n   \n\n\n    model._name='effnet_nadam'\n    EPOCHS = 2\n    print(\"model training client no = \",x+1)\n    history = model.fit(train_dataset,validation_data=valid_dataset,epochs=EPOCHS,verbose=1,callbacks=[saver])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#     model=tf.keras.applications.vgg16.VGG16(\n#     include_top=True, weights=None, input_tensor=None,\n#     input_shape=(shape[0],shape[1],1), pooling=None, classes=1\n#         )","metadata":{},"execution_count":null,"outputs":[]}]}