{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "data_root = 'data/blizzard'" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "from os.path import join\n", "from tqdm import tqdm\n", "import numpy as np\n", "import h5py" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "f = h5py.File(join(data_root, 'samples.hdf5'), 'r')\n", "dataset = f['samples']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(dataset[:3*16000])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using Theano backend.\n", "Using gpu device 0: GeForce GT 750M (CNMeM is enabled with initial size: 75.0% of memory, cuDNN 4007)\n" ] } ], "source": [ "from keras.layers import merge, Input\n", "from keras.models import Model\n", "from keras.layers.core import Dense, Activation\n", "from keras.layers.convolutional import Convolution1D\n", "from keras.layers.recurrent import LSTM" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def generate_samples(data, batch_size, sample_length, discretize_input=False):\n", " sample_offset = 0\n", " step_size = sample_length + 1\n", " while True:\n", " if discretize_input:\n", " history = np.zeros((batch_size, sample_length, nb_classes), dtype='float32')\n", " else:\n", " history = np.zeros((batch_size, sample_length, 1), dtype='float32')\n", " predictions = np.zeros((batch_size, nb_classes), dtype='float32')\n", " for i in range(batch_size):\n", " if discretize_input:\n", " for j, k in enumerate(data[sample_offset:sample_offset+sample_length]):\n", " history[i, j, k] = 1\n", " else:\n", " history[i] = data[sample_offset:sample_offset+sample_length].reshape(-1, 1)\n", " prediction = data[sample_offset+sample_length]\n", " predictions[i, prediction] = 1\n", " sample_offset = (sample_offset + step_size) % (data.shape[0] - step_size)\n", " if not discretize_input:\n", " history /= 255\n", " yield (history, predictions)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(3, 2, 256) (3, 256)\n", "[[[ 0. 0. 0. ..., 0. 0. 0.]\n", " [ 0. 0. 0. ..., 0. 0. 0.]]\n", "\n", " [[ 0. 0. 0. ..., 0. 0. 0.]\n", " [ 0. 0. 0. ..., 0. 0. 0.]]\n", "\n", " [[ 0. 0. 0. ..., 0. 0. 0.]\n", " [ 0. 0. 0. ..., 0. 0. 0.]]]\n", "[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0.]]\n" ] } ], "source": [ "# check out an example batch, make sure the generator is sane\n", "itr = generate_samples(dataset,\n", " batch_size=3,\n", " sample_length=2,\n", " discretize_input=discretize_input)\n", "for i in range(10000):\n", " X, y = next(itr)\n", "X, y = next(itr)\n", "print X.shape, y.shape\n", "print X\n", "print y" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "____________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "====================================================================================================\n", "input_1 (InputLayer) (None, 256, 256) 0 \n", "____________________________________________________________________________________________________\n", "lstm_1 (LSTM) (None, 256, 128) 197120 input_1[0][0] \n", "____________________________________________________________________________________________________\n", "activation_1 (Activation) (None, 256, 128) 0 lstm_1[0][0] \n", "____________________________________________________________________________________________________\n", "convolution1d_1 (Convolution1D) (None, 256, 128) 16512 activation_1[0][0] \n", "____________________________________________________________________________________________________\n", "activation_2 (Activation) (None, 256, 128) 0 convolution1d_1[0][0] \n", "____________________________________________________________________________________________________\n", "lstm_2 (LSTM) (None, 256, 128) 131584 activation_2[0][0] \n", "____________________________________________________________________________________________________\n", "activation_3 (Activation) (None, 256, 128) 0 lstm_2[0][0] \n", "____________________________________________________________________________________________________\n", "convolution1d_2 (Convolution1D) (None, 256, 128) 16512 activation_3[0][0] \n", "____________________________________________________________________________________________________\n", "activation_4 (Activation) (None, 256, 128) 0 convolution1d_2[0][0] \n", "____________________________________________________________________________________________________\n", "merge_1 (Merge) (None, 256, 128) 0 activation_2[0][0] \n", " activation_4[0][0] \n", "____________________________________________________________________________________________________\n", "lstm_3 (LSTM) (None, 256, 128) 131584 merge_1[0][0] \n", "____________________________________________________________________________________________________\n", "activation_5 (Activation) (None, 256, 128) 0 lstm_3[0][0] \n", "____________________________________________________________________________________________________\n", "convolution1d_3 (Convolution1D) (None, 256, 128) 16512 activation_5[0][0] \n", "____________________________________________________________________________________________________\n", "activation_6 (Activation) (None, 256, 128) 0 convolution1d_3[0][0] \n", "____________________________________________________________________________________________________\n", "lstm_4 (LSTM) (None, 256, 128) 131584 activation_6[0][0] \n", "____________________________________________________________________________________________________\n", "activation_7 (Activation) (None, 256, 128) 0 lstm_4[0][0] \n", "____________________________________________________________________________________________________\n", "convolution1d_4 (Convolution1D) (None, 256, 128) 16512 activation_7[0][0] \n", "____________________________________________________________________________________________________\n", "activation_8 (Activation) (None, 256, 128) 0 convolution1d_4[0][0] \n", "____________________________________________________________________________________________________\n", "merge_2 (Merge) (None, 256, 128) 0 activation_6[0][0] \n", " activation_8[0][0] \n", "____________________________________________________________________________________________________\n", "lstm_5 (LSTM) (None, 256, 128) 131584 merge_2[0][0] \n", "____________________________________________________________________________________________________\n", "activation_9 (Activation) (None, 256, 128) 0 lstm_5[0][0] \n", "____________________________________________________________________________________________________\n", "convolution1d_5 (Convolution1D) (None, 256, 128) 16512 activation_9[0][0] \n", "____________________________________________________________________________________________________\n", "activation_10 (Activation) (None, 256, 128) 0 convolution1d_5[0][0] \n", "____________________________________________________________________________________________________\n", "lstm_6 (LSTM) (None, 256, 128) 131584 activation_10[0][0] \n", "____________________________________________________________________________________________________\n", "activation_11 (Activation) (None, 256, 128) 0 lstm_6[0][0] \n", "____________________________________________________________________________________________________\n", "convolution1d_6 (Convolution1D) (None, 256, 128) 16512 activation_11[0][0] \n", "____________________________________________________________________________________________________\n", "activation_12 (Activation) (None, 256, 128) 0 convolution1d_6[0][0] \n", "____________________________________________________________________________________________________\n", "merge_3 (Merge) (None, 256, 128) 0 activation_10[0][0] \n", " activation_12[0][0] \n", "____________________________________________________________________________________________________\n", "lstm_7 (LSTM) (None, 256) 394240 merge_3[0][0] \n", "====================================================================================================\n", "Total params: 1348352\n", "____________________________________________________________________________________________________\n" ] } ], "source": [ "discretize_input = True\n", "use_residual = True\n", "use_convolutions = True\n", "lstm_activation = 'relu'\n", "conv_activation = 'linear'\n", "\n", "nb_classes = 256\n", "sample_length = 256\n", "features = 128\n", "hidden_units = 128\n", "layers = 7 # should be odd\n", "\n", "if discretize_input:\n", " inputs = Input(shape=(sample_length, nb_classes))\n", "else:\n", " inputs = Input(shape=(sample_length, 1)) \n", "x = inputs\n", "\n", "for i in range((layers - 1) / 2):\n", " x = LSTM(hidden_units, return_sequences=True)(x)\n", " x = Activation(lstm_activation)(x)\n", " if use_convolutions:\n", " x = Convolution1D(features, 1)(x)\n", " x = Activation(conv_activation)(x)\n", " \n", " y = LSTM(hidden_units, return_sequences=True)(x)\n", " y = Activation(lstm_activation)(y)\n", " if use_convolutions:\n", " y = Convolution1D(features, 1)(y)\n", " y = Activation(conv_activation)(y)\n", " \n", " if use_residual:\n", " x = merge([x, y], mode='sum')\n", " else:\n", " x = y\n", " \n", "prediction = LSTM(nb_classes, activation='softmax', return_sequences=False)(x)\n", "\n", "model = Model(input=inputs, output=prediction)\n", "model.summary()\n", "\n", "model.compile(loss='binary_crossentropy', optimizer='rmsprop')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "batch_size = 32\n", "batches_per_epoch = 100\n", "\n", "total_samples = len(dataset) / (sample_length + 1)\n", "samples_per_epoch = batches_per_epoch * batch_size\n", "epochs_per_real_epoch = total_samples / samples_per_epoch\n", "print total_samples, 'samples in total'\n", "print batch_size, 'batch_size'\n", "print batches_per_epoch, 'batches_per_epoch'\n", "print samples_per_epoch, 'samples_per_epoch'\n", "print epochs_per_real_epoch, 'epochs for a full pass through the data'\n", "\n", "model.fit_generator(generate_samples(dataset, batch_size, sample_length, discretize_input),\n", " samples_per_epoch=samples_per_epoch,\n", " nb_epoch=epochs_per_real_epoch)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n1AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "itr = generate_samples(dataset, 1, sample_length, discretize_input)\n", "X, y = next(itr)\n", "prediction = model.predict(X)\n", "plt.plot(prediction.flat)\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }