{"cells":[{"metadata":{"id":"e9JaFrY5qvPA","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\ndf = pd.read_csv(\n    '../input/train.csv',\n    dtype={'acoustic_data': np.int16, 'time_to_failure': np.float64})","execution_count":1,"outputs":[]},{"metadata":{"id":"W4QFrMiBq_Ve","colab_type":"text"},"cell_type":"markdown","source":"According to the dataset description, the acoustic data is sampled in blocks of 4k samples. A test data block is 150_000 samples long and doesn't necessarily start / end at a 4k sample threshold."},{"metadata":{"id":"edJTF57frxDJ","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"def fft_analysis(x: np.array, n=None, k=128, order=False) -> np.array:\n    \"\"\"\n    Perform an FFT op on a block of data.\n\n    Returns a tensor with shape (k, 3) where\n      0 - frequency\n      1 - amplitude\n      2 - phase\n    \"\"\"\n    if x.ndim > 1:\n        x = x.reshape(-1)\n    if n is None:\n        n = x.size\n    yf = np.fft.fft(x, n) * 1/n\n    yf = yf[:n//2]\n    if order:\n        sig = np.argsort(np.abs(yf))[-k:][::-1]\n    else:\n        sig = np.argpartition(np.abs(yf), -k)[-k:]\n    Y = np.empty((k, 3))\n    Y[:, 0] = sig # frequencies\n    yf_sig = yf[sig]\n    Y[:, 1] = 2.0 * np.abs(yf_sig) # amplitude\n    Y[:, 2] = np.angle(yf_sig) # phase\n    return Y\n\ndef feature_gen(x: np.array, strides=512, k=128) -> np.array:\n  \"\"\"\n  Given data block of 150_000 values, generate a set of 4k windows over the\n  data and get its FFT data.\n  \"\"\"\n  WINDOW = 4 * 1024\n  data = []\n  for i in range(x.shape[0] // strides):\n    begin = i * strides\n    end = begin + WINDOW\n    data.append(fft_analysis(x[begin:end], k=k))\n  return np.stack(data)","execution_count":2,"outputs":[]},{"metadata":{"id":"8rGOUicStJZ-","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"from tensorflow import keras\n\nclass DataTrainTestSplit(object):\n    def __init__(self, df, sample_size, split=0.1):\n        n_samples = df.shape[0] // sample_size\n        perm = np.random.permutation(n_samples)\n        test_samples = int(np.floor(n_samples * split))\n        self.train_slice = perm[:-test_samples]\n        self.test_slice = perm[-test_samples:]\n    def train(self):\n        return self.train_slice\n    def test(self):\n        return self.test_slice\n        \nclass Generator(keras.utils.Sequence):\n  sample_size = 150_000\n  STRIDES = 2 * 1024\n  NDIMS = 128\n  STEPS = sample_size // STRIDES\n\n  def __init__(self, df, indices, batch_size=32):\n    self.dataframe = df\n    self.indices = indices\n    self.batch_size = batch_size\n\n  def __len__(self):\n    return int((self.indices.shape[0] - 1) / self.batch_size) + 1\n  \n  def __getitem__(self, index: int):\n    s_begin = index * self.batch_size\n    s_end = min(s_begin + self.batch_size, self.indices.shape[0])\n\n    X_list = []\n    y = np.empty((s_end - s_begin))\n    for m in range(s_begin, s_end):\n        begin = self.indices[m] * self.sample_size\n        end = begin + self.sample_size\n        X_list.append(\n            feature_gen(self.dataframe['acoustic_data'].values[begin:end],\n                        strides=Generator.STRIDES, k=Generator.NDIMS)\n        )\n        y[m - s_begin] = self.dataframe['time_to_failure'].iloc[end - 1]\n\n    X = np.stack(X_list)\n    return X, y","execution_count":3,"outputs":[]},{"metadata":{"id":"UwJ8x0yvt0Dm","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"slices = DataTrainTestSplit(df, Generator.sample_size)","execution_count":4,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow import keras\nimport tensorflow.keras.backend as K\n\nclass Decision(keras.layers.Layer):\n    \"\"\"\n    input_shape: (samples, channels)\n    output_shape: (samples, output_dim)\n    \"\"\"\n    def __init__(self, output_dim, **kwargs):\n        self.output_dim = output_dim\n        self.activation = keras.activations.get('relu')\n        super(Decision, self).__init__(**kwargs)\n\n    def build(self, input_shape):\n        self.bias = self.add_weight(\n            shape=(self.output_dim,),\n            name='bias',\n            trainable=True)\n\n        self.u = self.add_weight(\n            shape=(int(input_shape[-1]), self.output_dim,),\n            name='u',\n            trainable=True)\n\n        self.v = self.add_weight(\n            shape=(self.output_dim, self.output_dim,),\n            name='v',\n            trainable=True)\n        super(Decision, self).build(input_shape)  # Be sure to call this at the end\n\n    def call(self, x):\n        m = K.dot(self.activation(K.dot(x, self.u)), self.v)\n        output = K.bias_add(m, self.bias, data_format='channels_last')\n        pos = self.activation(output)\n        neg = output - pos\n        return [neg, pos]\n\n\n    def compute_output_shape(self, input_shape):\n        shape = input_shape\n        shape[-1] = self.output_dim\n        return [shape, shape]\n\n","execution_count":6,"outputs":[]},{"metadata":{"id":"PhbKkCw_uTdY","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"import tensorflow as tf\n\nfrom tensorflow.keras.layers import *\nfrom tensorflow.keras.models import Model, Sequential\n\ndef make_model():\n    inp = Input(shape=(Generator.STEPS, Generator.NDIMS, 3))\n\n    h1_outs = Decision(64)(inp)\n    h2_outs = []\n    for h1 in h1_outs:\n        h2_outs.extend(Decision(16)(h1))\n\n    h2_out = Concatenate(axis=3)(h2_outs)\n\n    h2_mix = Dense(32)(h2_out)\n\n    h3_out = MaxPooling2D((1, Generator.NDIMS))(h2_mix)\n    h3_out = Reshape((Generator.STEPS, 32,))(h3_out)\n\n    common = LSTM(128)(h3_out)\n    outp = Dense(1)(common)\n\n    return Model(inp, outp)\n\nmodel = make_model()\nmodel.compile(optimizer='adam', loss='mse', metrics=['mae'])\nmodel.summary()","execution_count":18,"outputs":[{"output_type":"stream","text":"__________________________________________________________________________________________________\nLayer (type)                    Output Shape         Param #     Connected to                     \n==================================================================================================\ninput_2 (InputLayer)            (None, 73, 128, 3)   0                                            \n__________________________________________________________________________________________________\ndecision_3 (Decision)           [(None, 73, 128, 64) 4352        input_2[0][0]                    \n__________________________________________________________________________________________________\ndecision_4 (Decision)           [(None, 73, 128, 16) 1296        decision_3[0][0]                 \n__________________________________________________________________________________________________\ndecision_5 (Decision)           [(None, 73, 128, 16) 1296        decision_3[0][1]                 \n__________________________________________________________________________________________________\nconcatenate_1 (Concatenate)     (None, 73, 128, 64)  0           decision_4[0][0]                 \n                                                                 decision_4[0][1]                 \n                                                                 decision_5[0][0]                 \n                                                                 decision_5[0][1]                 \n__________________________________________________________________________________________________\ndense_3 (Dense)                 (None, 73, 128, 32)  2080        concatenate_1[0][0]              \n__________________________________________________________________________________________________\nmax_pooling2d_1 (MaxPooling2D)  (None, 73, 1, 32)    0           dense_3[0][0]                    \n__________________________________________________________________________________________________\nreshape_1 (Reshape)             (None, 73, 32)       0           max_pooling2d_1[0][0]            \n__________________________________________________________________________________________________\nlstm_1 (LSTM)                   (None, 128)          82432       reshape_1[0][0]                  \n__________________________________________________________________________________________________\ndense_4 (Dense)                 (None, 1)            129         lstm_1[0][0]                     \n==================================================================================================\nTotal params: 91,585\nTrainable params: 91,585\nNon-trainable params: 0\n__________________________________________________________________________________________________\n","name":"stdout"}]},{"metadata":{"id":"iR2h1erru__q","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"filepath=\"model.ckpt.hdf5\"\ncb_checkpoint = keras.callbacks.ModelCheckpoint(\n    filepath, monitor='val_mean_absolute_error',\n    save_best_only=True, mode='min')\n\ncb_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)\n\nhistory = model.fit_generator(Generator(df, slices.train(), batch_size=64),\n                              validation_data=Generator(df, slices.test()),\n                              callbacks=[cb_stop, cb_checkpoint],\n                              epochs=100)\n\n","execution_count":null,"outputs":[{"output_type":"stream","text":"Epoch 1/100\n14/14 [==============================] - 17s 1s/step - loss: 12.2606 - mean_absolute_error: 2.8533\n59/59 [==============================] - 87s 1s/step - loss: 16.0917 - mean_absolute_error: 3.2381 - val_loss: 12.2606 - val_mean_absolute_error: 2.8533\nEpoch 2/100\n21/59 [=========>....................] - ETA: 31s - loss: 12.8730 - mean_absolute_error: 2.9461","name":"stdout"}]},{"metadata":{"id":"oNN9HpUBwgGY","colab_type":"code","colab":{},"trusted":true},"cell_type":"code","source":"%matplotlib inline\nimport matplotlib.pyplot as plt\n\nplt.figure()\nplt.plot(history.history['loss'], label='loss')\nplt.plot(history.history['val_loss'], label='val_loss')\nplt.legend()\nplt.title('Model loss')\nplt.ylabel('Loss')\nplt.xlabel('Epoch')\nplt.plot()\n\nplt.figure()\nplt.plot(history.history['mean_absolute_error'], label='mae')\nplt.plot(history.history['val_mean_absolute_error'], label='val_mae')\nplt.legend()\nplt.title('Mean Absolute Error')\nplt.ylabel('Error')\nplt.xlabel('Epoch')\nplt.plot()\n\n","execution_count":10,"outputs":[{"output_type":"execute_result","execution_count":10,"data":{"text/plain":"[]"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.load_weights('model.ckpt.hdf5')","execution_count":13,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tqdm import tqdm_notebook\n\nsubmission = pd.read_csv('../input/sample_submission.csv', index_col='seg_id', dtype={'time_to_failure': np.float32})\n\nfor seg_id in tqdm_notebook(submission.index):\n    seg = pd.read_csv('../input/test/' + seg_id + '.csv')\n    X = feature_gen(seg['acoustic_data'].values, strides=Generator.STRIDES, k=Generator.NDIMS)\n    y = model.predict(X[np.newaxis, :])\n    submission.loc[seg_id]['time_to_failure'] = y\nsubmission.to_csv('submission.csv')","execution_count":17,"outputs":[{"output_type":"display_data","data":{"text/plain":"HBox(children=(IntProgress(value=0, max=2624), HTML(value='')))","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"3e4250c8dfd74175b1bf31401e0fc89b"}},"metadata":{}},{"output_type":"stream","text":"\n","name":"stdout"},{"output_type":"error","ename":"KeyboardInterrupt","evalue":"","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)","\u001b[0;32m<ipython-input-17-0c25ea715350>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      6\u001b[0m     \u001b[0mseg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'../input/test/'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mseg_id\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'.csv'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m     \u001b[0mX\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfeature_gen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseg\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'acoustic_data'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstrides\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mGenerator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSTRIDES\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mGenerator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mNDIMS\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m     \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnewaxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      9\u001b[0m     \u001b[0msubmission\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mseg_id\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'time_to_failure'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0msubmission\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'submission.csv'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mpredict\u001b[0;34m(self, x, batch_size, verbose, steps, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m   1111\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1112\u001b[0m       return training_arrays.predict_loop(\n\u001b[0;32m-> 1113\u001b[0;31m           self, x, batch_size=batch_size, verbose=verbose, steps=steps)\n\u001b[0m\u001b[1;32m   1114\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1115\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0mreset_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_arrays.py\u001b[0m in \u001b[0;36mmodel_iteration\u001b[0;34m(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, mode, validation_in_fit, **kwargs)\u001b[0m\n\u001b[1;32m    327\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    328\u001b[0m         \u001b[0;31m# Get outputs.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 329\u001b[0;31m         \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mins_batch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    330\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch_outs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    331\u001b[0m           \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mbatch_outs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/backend.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m   3074\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3075\u001b[0m     fetched = self._callable_fn(*array_vals,\n\u001b[0;32m-> 3076\u001b[0;31m                                 run_metadata=self.run_metadata)\n\u001b[0m\u001b[1;32m   3077\u001b[0m     \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_fetch_callbacks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfetched\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_fetches\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3078\u001b[0m     return nest.pack_sequence_as(self._outputs_structure,\n","\u001b[0;32m/opt/conda/lib/python3.6/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m   1437\u001b[0m           ret = tf_session.TF_SessionRunCallable(\n\u001b[1;32m   1438\u001b[0m               \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstatus\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1439\u001b[0;31m               run_metadata_ptr)\n\u001b[0m\u001b[1;32m   1440\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1441\u001b[0m           \u001b[0mproto_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mKeyboardInterrupt\u001b[0m: "]}]}],"metadata":{"colab":{"name":"LANL.ipynb","version":"0.3.2","provenance":[],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":1}