{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Applying Rocket to Raw Audio\n", "\n", "Note: this notebook is extremely messy as a result of me trying to rapidly prototype rocket for raw audio and not following best practices. It also uses the beta version of fastai v2 for removing silence and preprocessing. If you are interested in experimenting yourself and can't make sense of something here, please reach out to [me](https://forums.fast.ai/u/madeupmasters/summary) by PM, or in the [Deep Learning with Audio](https://forums.fast.ai/t/deep-learning-with-audio-thread) or [Time Series](https://forums.fast.ai/t/time-series-sequential-data-study-group) threads\n", "\n", "This notebook will apply the findings of the recent [Rocket Paper](https://arxiv.org/abs/1910.13051) by Angus Dempster, François Petitjean, Geoffrey I. Webb to 1D raw audio signals for the task of voice recognition. Some of this code is also adapted from [Ignacio Oguiza](https://forums.fast.ai/u/oguiza) and his [Time Series Module for FastAI v1](https://github.com/timeseriesAI/timeseriesAI)\n", "\n", "Initially the signals were too long and slow to train at a sample rate of 16000 (was going to take ~30-40 minutes for 1s clips). Training a 3800 audio 10 class dataset (small problem, trains to 99%+ accuracy in 2 minutes using typical audio pipeline of spectrogram + CNN), . To speed things up I added a stride which sped up results without a drop in accuracy, but still only led to 85% accuracy after 4 minutes of training. Removing silence and doubling the amount of time to 2s allowed us to get great results (95% accuracy in 6s, 98.6% in 20 seconds, 99.2% in 1 min 20 sec).\n", "\n", "Unfortunately so far, I have not been able to scale the results to harder problems, such as a 250 speaker dataset. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary of Findings\n", "\n", "In order to spare you having to go through this network, here's a summary of the interesting results\n", "\n", " - 95% accuracy in 6s, 98.6% in 20 seconds, 99.2% in 1 min 20 sec on a 10 class problem using raw audio and no augmentation\n", " - Having a stride of 5-7 seems to be an optimal balance between computational cost and accuracy\n", " - Bigger filter sizes are better only up to 7x7 or 9x9 and then they actually decrease accuracy with increased cost\n", " - A variety of filter sizes (7,9,11) doesnt seem to beat out just individual filter sizes 7,9,11 but more testing is needed with a harder dataset\n", " - Testing tons of individual kernels on random subsets of the data and then selecting the best ones actually results in less accuracy vs the same number of random kernels (this is likely due to increased correlation between the good random kernels, making them worse in an ensemble)\n", " - Small dilations work best (accuracy gradually increases up to dilation of 11 and then starts to decline, this holds for all feature sizes)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from local.torch_basics import *\n", "from local.test import *\n", "from local.basics import *\n", "from local.data.all import *\n", "from local.vision.core import *\n", "from local.notebook.showdoc import show_doc\n", "from local.audio.core import *\n", "from local.audio.augment import *\n", "from local.vision.learner import *\n", "from local.vision.models.xresnet import *\n", "from local.metrics import *\n", "from local.callback.schedule import *\n", "import torchaudio\n", "from fastprogress import progress_bar as pb\n", "import time\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import RidgeClassifierCV\n", "from rocket import generate_kernels, apply_kernel, apply_kernels" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PosixPath('/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/ST-AEDS-20180100_1-OS')" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p10speakers = Config()['data_path'] / 'ST-AEDS-20180100_1-OS'\n", "untar_data(URLs.SPEAKERS10, fname=str(p10speakers)+'.tar', dest=p10speakers)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "get_audio = AudioGetter(\"\", recurse=True, folders=None)\n", "files_10 = get_audio(p10speakers)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(#3842) [/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/f0004_us_f0004_00446.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/m0002_us_m0002_00128.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/f0003_us_f0003_00279.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/f0001_us_f0001_00168.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/f0005_us_f0005_00286.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/m0005_us_m0005_00282.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/f0005_us_f0005_00432.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/f0005_us_f0005_00054.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/m0004_us_m0004_00110.wav,/home/jupyter/.fastai/data/ST-AEDS-20180100_1-OS/m0003_us_m0003_00180.wav...]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "files_10" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "audio_opener = OpenAudio(files_10)\n", "p10_labeler = lambda x: str(x).split('/')[-1][:5] #grab the label from each file" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "CLIP_LENGTH = 2000" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [3842/3842 00:12<00:00]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sigs, labels = [],[]\n", "cropper = CropSignal(CLIP_LENGTH, pad_mode='repeat')\n", "remove_silence = RemoveSilence()\n", "for i in pb(range(len(files_10))):\n", " sigs.append(cropper(remove_silence(audio_opener(i))).sig)\n", " labels.append(p10_labeler(files_10[i]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3842, 3842)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(sigs), len(labels)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "total_size = len(sigs)\n", "train_size = int(total_size*.8)\n", "train_idxs = torch.randperm(total_size)[:train_size]\n", "valid_idxs = [i for i in range(total_size) if i not in train_idxs]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "assert len(train_idxs) + len(valid_idxs) == len(sigs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x_train = [sigs[idx].squeeze(0).numpy() for idx in train_idxs]\n", "y_train = [labels[idx] for idx in train_idxs]\n", "x_valid = [sigs[idx].squeeze(0).numpy() for idx in valid_idxs]\n", "y_valid = [labels[idx] for idx in valid_idxs]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[3073, 3073, 769, 769]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(map(len, (x_train, y_train, x_valid, y_valid)))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((3073, 32000), (769, 32000))" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np_x_train = np.stack(x_train).astype(np.float64)\n", "np_x_valid = np.stack(x_valid).astype(np.float64)\n", "np_x_train.shape, np_x_valid.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "o2i_f = lambda x: 5*(x[0]=='m') + int(x[-1]) - 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np_y_train = np.array(list(map(o2i_f, y_train)))\n", "np_y_valid = np.array(list(map(o2i_f, y_valid)))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 7, 2, ..., 0, 7, 1])" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np_y_train" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((3073, 32000), (3073,), (769, 32000), (769,))" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np_x_train.shape, np_y_train.shape, np_x_valid.shape, np_y_valid.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-4.49039649777175e-05" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np_x_train.mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Normalize the training data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np_x_train = (np_x_train - np_x_train.mean(axis = 1, keepdims = True)) / (np_x_train.std(axis = 1, keepdims = True) + 1e-8)\n", "np_x_valid = (np_x_valid - np_x_valid.mean(axis = 1, keepdims = True)) / (np_x_valid.std(axis = 1, keepdims = True) + 1e-8)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-8.10809639770585e-20, 0.9999995545301024)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np_x_train.mean(), np_x_train.std()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np_x_train.dtype" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Start Here" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def timing_test(runs, candidate_lengths, stride, num_kernels, seq_length, show_progress=True):\n", " times, scores = [],[]\n", " for i in range(runs):\n", " kernels = generate_kernels(seq_length, num_kernels, candidate_lengths, stride)\n", " start = time.time()\n", " x_train_tfm = apply_kernels(np_x_train, kernels)\n", " x_valid_tfm = apply_kernels(np_x_valid, kernels)\n", " classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 7), normalize=True)\n", " classifier.fit(x_train_tfm, np_y_train)\n", " score = classifier.score(x_valid_tfm, np_y_valid)\n", " t = time.time()-start\n", " scores.append(score)\n", " times.append(t)\n", " if(show_progress): print(\"Finished Run\", i+1, \"Score:\", round(score, 3), \"Time:\", round(t,3))\n", " return times, scores" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Initial attempts" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "timing_test(5, np.array((7,9,11)), stride=5, num_kernels=200, seq_length=16000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 7 | .85 | 4:02 |\n", "| {7,9,11} | 5 | .899 | 5:20 |\n", "| {7,9,11} | 3 | .903 | 8:15 |\n", "|{800,1000,1200} | 400 | .46 | 3:43 |\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 10000 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 5 | .979 | 5:08 |\n", "| {7,9,11} | 5 | .976 | 5:10 |\n", "| {7,9,11} | 5 | .980 | 5:26 |\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 2000 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 5 | .972 | 1:10 |\n", "| {7,9,11} | 5 | .979 | 1:03 |\n", "| {7,9,11} | 5 | .976 | 1:01 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 1000 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 5 | .974 | 0:31 |\n", "| {7,9,11} | 5 | .974 | 0:31 |\n", "| {7,9,11} | 5 | .966 | 0:31 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 200 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 5 | .949 | 0:06 |\n", "| {7,9,11} | 5 | .950 | 0:06 |\n", "| {7,9,11} | 5 | .934 | 0:06|" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1s Audio, silence removed, testing strides" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 200 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 1 | .942 | 0:30 |\n", "| {7,9,11} | 1 | .954 | 0:28 |\n", "| {7,9,11} | 1 | .950 | 0:28|" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 200 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 3 | .960 | 0:10 |\n", "| {7,9,11} | 3 | .948 | 0:10 |\n", "| {7,9,11} | 3 | .954 | 0:10 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Up clip length to 2 seconds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 200 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 5 | .987 | 0:15 |\n", "| {7,9,11} | 5 | .980 | 0:13 |\n", "| {7,9,11} | 5 | .986 | 0:13 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 200 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 3 | .986 | 0:20 |\n", "| {7,9,11} | 3 | .986 | 0:20 |\n", "| {7,9,11} | 3 | .990 | 0:20 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Silence removed results 1000 kernels**\n", "\n", "| Kernel Sizes | Strides | Results | Time |\n", "| :--------------: | :-----: | :-----: | :-----:| \n", "| {7,9,11} | 3 | .992 | 1:40 |\n", "| {7,9,11} | 3 | .992 | 1:40 |\n", "| {7,9,11} | 3 | .992 | 1:40 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Check impact of the kernel size options, do we really need to choose from 3?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks2, scores_ks2 = timing_test(10, np.array((2,)), stride=1, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks3, scores_ks3 = timing_test(10, np.array((3,)), stride=1, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks5, scores_ks5 = timing_test(10, np.array((5,)), stride=1, num_kernels=100, seq_length=32000, show_progress=False)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks7, scores_ks7 = timing_test(10, np.array((7,)), stride=1, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks9, scores_ks9 = timing_test(10, np.array((9,)), stride=1, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks11, scores_ks11 = timing_test(10, np.array((11,)), stride=1, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ksorig, scores_ksorig = timing_test(10, np.array((7,9,11,)), stride=1, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def mn(x): return round(sum(x)/len(x), 3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "all_scores = [scores_ks2, scores_ks3, scores_ks5, scores_ks7, scores_ks9, scores_ks11, scores_ksorig,]\n", "all_times = [times_ks2, times_ks3, times_ks5, times_ks7, times_ks9, times_ks11, times_ksorig,]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mean_times = list(map(mn, all_times))\n", "mean_scores = list(map(mn, all_scores))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot([2,3,5,7,9,11], mean_scores[:6])\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot([2,3,5,7,9,11], mean_times[:6])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.924, 0.956, 0.967, 0.968, 0.969, 0.962, 0.967]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_scores" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conclusion: It appears 7,9,11 do well, it's hard to tell if the variety helps without testing a higher number of kernels\n", "\n", "Let's rerun the last experiment, this time with longer strides" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks2, scores_ks2 = timing_test(10, np.array((2,)), stride=7, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks3, scores_ks3 = timing_test(10, np.array((3,)), stride=7, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks5, scores_ks5 = timing_test(10, np.array((5,)), stride=7, num_kernels=100, seq_length=32000, show_progress=False)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks7, scores_ks7 = timing_test(10, np.array((7,)), stride=7, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks9, scores_ks9 = timing_test(10, np.array((9,)), stride=7, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks11, scores_ks11 = timing_test(10, np.array((11,)), stride=7, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ksorig, scores_ksorig = timing_test(10, np.array((7,9,11,)), stride=7, num_kernels=100, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "all_scores_s7 = [scores_ks2, scores_ks3, scores_ks5, scores_ks7, scores_ks9, scores_ks11, scores_ksorig,]\n", "all_times_s7 = [times_ks2, times_ks3, times_ks5, times_ks7, times_ks9, times_ks11, times_ksorig,]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mean_times_s7 = list(map(mn, all_times_s7))\n", "mean_scores_s7 = list(map(mn, all_scores_s7))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.905, 0.937, 0.949, 0.95, 0.958, 0.951, 0.957]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_scores_s7" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot([2,3,5,7,9,11], mean_scores_s7[:6])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot([2,3,5,7,9,11], mean_times_s7[:6])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def mn(x): return round(sum(x)/len(x),3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Test 100 kernels each of larger kernels" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kernel Size 7: Score: 0.952 Time: 5.322s\n", "Kernel Size 11: Score: 0.962 Time: 6.52s\n", "Kernel Size 15: Score: 0.956 Time: 7.862s\n", "Kernel Size 19: Score: 0.965 Time: 8.23s\n", "Kernel Size 23: Score: 0.943 Time: 9.699s\n", "Kernel Size 27: Score: 0.953 Time: 11.522s\n", "Kernel Size 31: Score: 0.941 Time: 12.626s\n", "Kernel Size 35: Score: 0.948 Time: 12.208s\n", "Kernel Size 39: Score: 0.947 Time: 11.937s\n", "Kernel Size 43: Score: 0.931 Time: 12.709s\n", "Kernel Size 47: Score: 0.936 Time: 14.581s\n", "Kernel Size 51: Score: 0.926 Time: 15.842s\n", "Kernel Size 55: Score: 0.932 Time: 17.233s\n", "Kernel Size 59: Score: 0.926 Time: 18.059s\n", "Kernel Size 63: Score: 0.932 Time: 20.527s\n", "Kernel Size 67: Score: 0.925 Time: 20.773s\n", "Kernel Size 71: Score: 0.935 Time: 18.156s\n", "Kernel Size 75: Score: 0.915 Time: 19.595s\n", "Kernel Size 79: Score: 0.912 Time: 21.77s\n", "Kernel Size 83: Score: 0.926 Time: 23.429s\n", "Kernel Size 87: Score: 0.923 Time: 25.025s\n", "Kernel Size 91: Score: 0.923 Time: 26.44s\n", "Kernel Size 95: Score: 0.902 Time: 26.552s\n", "Kernel Size 99: Score: 0.928 Time: 29.478s\n" ] } ], "source": [ "scores_ks, times_ks = [],[]\n", "for kernel_size in range(7,100,4):\n", " times, scores = timing_test(1, np.array((kernel_size,)), stride=7, num_kernels=100, seq_length=32000, show_progress=False)\n", " print(f\"Kernel Size {kernel_size}: Score: {mn(scores)} Time: {mn(times)}s\")\n", " scores_ks.append(mn(scores))\n", " times_ks.append(mn(times))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.xlabel(\"Kernel Size\")\n", "plt.ylabel(\"Accuracy\")\n", "plt.plot(np.arange(7,100,4), scores_ks);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.xlabel(\"Kernel Size\")\n", "plt.ylabel(\"Time for 100 kernels\")\n", "plt.plot(np.arange(7,100,4), times_ks);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3x3 kernel is twice as fast as 9x9, that means we can double the kernels and run in same time, but it still has worse results" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_ks3, scores_ks3 = timing_test(10, np.array((2,)), stride=7, num_kernels=200, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.935" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mn(scores_ks3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Drop down to stride 1 conv, run 2500 kernels for filter size 7,9,11 and {7,9,11} to see if variety helps" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_7, scores_7 = timing_test(1, np.array((7,)), stride=1, num_kernels=2500, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_9, scores_9 = timing_test(1, np.array((9,)), stride=1, num_kernels=2500, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_11, scores_11 = timing_test(1, np.array((11,)), stride=1, num_kernels=2500, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "times_orig, scores_orig = timing_test(1, np.array((7,9,11,)), stride=1, num_kernels=2500, seq_length=32000, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.996, 0.996, 1.0, 0.995)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mn(scores_7), mn(scores_9), mn(scores_11), mn(scores_orig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conclusion: Doesnt appear to help but needs to be retested on a tougher dataset" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([600.959691286087],\n", " [723.5468919277191],\n", " [877.7471699714661],\n", " [831.6202943325043])" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "times_7, times_9, times_11, times_orig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What is the predictive power of a single kernel?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finished Run 1 Score: 0.243 Time: 0.101\n", "Finished Run 2 Score: 0.212 Time: 0.141\n", "Finished Run 3 Score: 0.226 Time: 0.161\n", "Finished Run 4 Score: 0.224 Time: 0.194\n", "Finished Run 5 Score: 0.211 Time: 0.107\n", "Finished Run 6 Score: 0.182 Time: 0.122\n", "Finished Run 7 Score: 0.257 Time: 0.189\n", "Finished Run 8 Score: 0.28 Time: 0.167\n", "Finished Run 9 Score: 0.19 Time: 0.146\n", "Finished Run 10 Score: 0.164 Time: 0.122\n", "Finished Run 11 Score: 0.186 Time: 0.172\n", "Finished Run 12 Score: 0.289 Time: 0.225\n", "Finished Run 13 Score: 0.251 Time: 0.226\n", "Finished Run 14 Score: 0.139 Time: 0.057\n", "Finished Run 15 Score: 0.274 Time: 0.157\n", "Finished Run 16 Score: 0.211 Time: 0.157\n", "Finished Run 17 Score: 0.213 Time: 0.21\n", "Finished Run 18 Score: 0.231 Time: 0.197\n", "Finished Run 19 Score: 0.226 Time: 0.108\n", "Finished Run 20 Score: 0.226 Time: 0.233\n" ] } ], "source": [ "times, scores = timing_test(20, np.array((7,9,11)), stride=5, num_kernels=1, seq_length=32000)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.22178153446033813" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(scores)/len(scores)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Answer: about 22% on a 10-class probelm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Can we apply kernels to a small subset of our data and get enough data to see which ones will be predictive? if so we could generate 100x as many random kernels for a large dataset, select the best 1% and use those on full data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def get_good_kernels(runs, candidate_lengths, stride, num_kernels, seq_length, thresh, subset_size=300, show_progress=True):\n", " good_kernels, scores = [], []\n", " for i in range(runs):\n", " candidate_lengths = np.array((7,))\n", " kernels = generate_kernels(seq_length, num_kernels, candidate_lengths, stride)\n", " idxs = torch.randperm(len(np_x_train))[:subset_size]\n", " #print(idxs)\n", " np_x_train_subset = np_x_train[idxs]\n", " np_y_train_subset = np_y_train[idxs]\n", " x_train_tfm = apply_kernels(np_x_train_subset, kernels)\n", " x_valid_tfm = apply_kernels(np_x_valid, kernels)\n", " classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 7), normalize=True)\n", " classifier.fit(x_train_tfm, np_y_train_subset)\n", " score = classifier.score(x_valid_tfm, np_y_valid)\n", " if score > thresh:\n", " good_kernels.append(kernels)\n", " scores.append(score)\n", " if(show_progress): print(\"Finished Run\", i+1, \"Score:\", round(score, 3))\n", " return good_kernels, scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "k, s = get_good_kernels(2000, np.array((7,)), stride=5, num_kernels=1,seq_length=32000, thresh=0.275, show_progress=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def merge_kernels(k):\n", " num_kernels = len(k)\n", " strides = np.zeros(num_kernels, dtype = np.int32)\n", " weights = np.zeros((num_kernels, 7)) # see note\n", " lengths = np.zeros(num_kernels, dtype = np.int32) # see note\n", " biases = np.zeros(num_kernels)\n", " dilations = np.zeros(num_kernels, dtype = np.int32)\n", " paddings = np.zeros(num_kernels, dtype = np.int32)\n", " for i in range(num_kernels):\n", " #weights, lengths, biases, dilations, paddings, strides\n", " weights[i], lengths[i], biases[i], dilations[i], paddings[i], strides[i] = k[i]\n", " return weights, lengths, biases, dilations, paddings, strides" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "165" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(k)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "kernels = merge_kernels(k)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finished Run 1 Score: 0.974 Time: 9.498\n", "Finished Run 2 Score: 0.978 Time: 9.682\n", "Finished Run 3 Score: 0.974 Time: 10.002\n", "Finished Run 4 Score: 0.979 Time: 9.684\n", "Finished Run 5 Score: 0.98 Time: 9.885\n", "Finished Run 6 Score: 0.979 Time: 9.818\n", "Finished Run 7 Score: 0.979 Time: 9.717\n", "Finished Run 8 Score: 0.978 Time: 9.658\n", "Finished Run 9 Score: 0.977 Time: 9.609\n", "Finished Run 10 Score: 0.978 Time: 9.866\n" ] } ], "source": [ "times, scores = timing_test(10, np.array((7,)), stride=5, num_kernels=168, seq_length=32000, show_progress=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def score_kernels(k):\n", " x_train_tfm = apply_kernels(np_x_train, k)\n", " x_valid_tfm = apply_kernels(np_x_valid, k)\n", " classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 7), normalize=True)\n", " classifier.fit(x_train_tfm, np_y_train)\n", " score = classifier.score(x_valid_tfm, np_y_valid)\n", " return(score)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9687906371911573" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "score_kernels(kernels)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Result is that 168 \"high accuracy\" kernels drawn from 2000 random kernels actually performs worse than just 168 random kernels! The correlation between the high accuracy kernels must be higher than among the random ones, so they are picking out the same features more frequently" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.4967490247074122, 0.5357607282184655, 0.52)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "min(s), max(s), mn(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing dilation to see its effect on audio" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def get_dilation(input_length, filter_size):\n", " return 2 ** np.random.uniform(0, np.log2((input_length - 1) // (filter_size - 1)))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dilations = [get_dilation(32000, 9) for i in range(100000)]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "low = [int(d) for d in dilations if d < 20]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "36299" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(low)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(dilations, bins= 50);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([13271., 6201., 4053., 3075., 1307., 2189., 1945., 1577.,\n", " 1403., 1278.]),\n", " array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. , 11.8, 13.6, 15.4, 17.2, 19. ]),\n", " )" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(low)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@njit\n", "def generate_kernels_dilation(input_length, num_kernels, candidate_lengths=np.array((7, 9, 11)), stride=5, dilation=1):\n", " # initialise kernel parameters\n", " strides = np.ones(num_kernels, dtype = np.int32) * stride\n", " weights = np.zeros((num_kernels, candidate_lengths.max())) # see note\n", " lengths = np.zeros(num_kernels, dtype = np.int32) # see note\n", " biases = np.zeros(num_kernels)\n", " dilations = np.zeros(num_kernels, dtype = np.int32)\n", " paddings = np.zeros(num_kernels, dtype = np.int32)\n", " # note: only the first *lengths[i]* values of *weights[i]* are used\n", " for i in range(num_kernels):\n", " length = np.random.choice(candidate_lengths)\n", " _weights = np.random.normal(0, 1, length)\n", " bias = np.random.uniform(-1, 1)\n", " padding = ((length - 1) * dilation) // 2 if np.random.randint(2) == 1 else 0\n", " weights[i, :length] = _weights - _weights.mean()\n", " lengths[i], biases[i], dilations[i], paddings[i] = length, bias, dilation, padding\n", " return weights, lengths, biases, dilations, paddings, strides" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def timing_test_dilation(runs, candidate_lengths, stride, num_kernels, seq_length, show_progress=True, dilation=1):\n", " times, scores = [],[]\n", " for i in range(runs):\n", " kernels = generate_kernels_dilation(seq_length, num_kernels, candidate_lengths, stride, dilation)\n", " start = time.time()\n", " x_train_tfm = apply_kernels(np_x_train, kernels)\n", " x_valid_tfm = apply_kernels(np_x_valid, kernels)\n", " classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 7), normalize=True)\n", " classifier.fit(x_train_tfm, np_y_train)\n", " score = classifier.score(x_valid_tfm, np_y_valid)\n", " t = time.time()-start\n", " scores.append(score)\n", " times.append(t)\n", " if(show_progress): print(\"Finished Run\", i+1, \"Score:\", round(score, 3), \"Time:\", round(t,3))\n", " return times, scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def mn(x): return round(sum(x)/len(x),3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finished Run 1 Score: 0.882 Time: 6.582\n", "Finished Run 2 Score: 0.866 Time: 6.703\n", "Finished Run 3 Score: 0.876 Time: 6.641\n", "Finished Run 1 Score: 0.884 Time: 6.745\n", "Finished Run 2 Score: 0.879 Time: 6.639\n", "Finished Run 3 Score: 0.891 Time: 6.553\n", "Finished Run 1 Score: 0.935 Time: 6.618\n", "Finished Run 2 Score: 0.927 Time: 6.789\n", "Finished Run 3 Score: 0.934 Time: 6.582\n", "Finished Run 1 Score: 0.966 Time: 6.587\n", "Finished Run 2 Score: 0.965 Time: 6.609\n", "Finished Run 3 Score: 0.973 Time: 6.606\n", "Finished Run 1 Score: 0.958 Time: 6.683\n", "Finished Run 2 Score: 0.966 Time: 6.503\n", "Finished Run 3 Score: 0.96 Time: 6.71\n", "Finished Run 1 Score: 0.944 Time: 6.516\n", "Finished Run 2 Score: 0.935 Time: 6.606\n", "Finished Run 3 Score: 0.935 Time: 6.689\n", "Finished Run 1 Score: 0.896 Time: 6.714\n", "Finished Run 2 Score: 0.895 Time: 6.669\n", "Finished Run 3 Score: 0.921 Time: 6.726\n", "Finished Run 1 Score: 0.856 Time: 6.559\n", "Finished Run 2 Score: 0.84 Time: 6.491\n", "Finished Run 3 Score: 0.839 Time: 6.619\n", "Finished Run 1 Score: 0.688 Time: 6.618\n", "Finished Run 2 Score: 0.7 Time: 6.814\n", "Finished Run 3 Score: 0.73 Time: 6.608\n", "Finished Run 1 Score: 0.559 Time: 6.434\n", "Finished Run 2 Score: 0.572 Time: 6.62\n", "Finished Run 3 Score: 0.551 Time: 6.822\n" ] } ], "source": [ "dilation_times, dilation_scores = [], []\n", "dilation_choices = [1,2,4,8,16,32,64,128,256,512]\n", "for dilation in dilation_choices:\n", " times, scores = timing_test_dilation(3, np.array((9,)), stride=5, num_kernels=100, seq_length=32000, dilation=dilation)\n", " dilation_times.append(mn(times))\n", " dilation_scores.append(mn(scores))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(dilation_choices, dilation_scores)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.xscale('log',basex=2)\n", "plt.plot(dilation_choices, dilation_scores)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Repeat tests with stride 1 to make sure it's not affecting things" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finished Run 1 Score: 0.878 Time: 14.549\n", "Finished Run 2 Score: 0.866 Time: 14.888\n", "Finished Run 3 Score: 0.901 Time: 14.822\n", "Finished Run 1 Score: 0.896 Time: 14.919\n", "Finished Run 2 Score: 0.867 Time: 14.778\n", "Finished Run 3 Score: 0.886 Time: 14.611\n", "Finished Run 1 Score: 0.93 Time: 14.642\n", "Finished Run 2 Score: 0.926 Time: 14.622\n", "Finished Run 3 Score: 0.926 Time: 14.865\n", "Finished Run 1 Score: 0.931 Time: 14.681\n", "Finished Run 2 Score: 0.952 Time: 14.774\n", "Finished Run 3 Score: 0.944 Time: 14.654\n", "Finished Run 1 Score: 0.941 Time: 14.715\n", "Finished Run 2 Score: 0.948 Time: 14.705\n", "Finished Run 3 Score: 0.953 Time: 14.948\n", "Finished Run 1 Score: 0.948 Time: 14.583\n", "Finished Run 2 Score: 0.964 Time: 14.786\n", "Finished Run 3 Score: 0.953 Time: 14.838\n", "Finished Run 1 Score: 0.949 Time: 14.716\n", "Finished Run 2 Score: 0.948 Time: 14.958\n", "Finished Run 3 Score: 0.944 Time: 14.608\n", "Finished Run 1 Score: 0.956 Time: 14.703\n", "Finished Run 2 Score: 0.951 Time: 14.645\n", "Finished Run 3 Score: 0.945 Time: 14.827\n", "Finished Run 1 Score: 0.944 Time: 14.907\n", "Finished Run 2 Score: 0.932 Time: 14.732\n", "Finished Run 3 Score: 0.953 Time: 14.749\n", "Finished Run 1 Score: 0.934 Time: 14.842\n", "Finished Run 2 Score: 0.936 Time: 14.786\n", "Finished Run 3 Score: 0.934 Time: 14.776\n", "Finished Run 1 Score: 0.918 Time: 14.902\n", "Finished Run 2 Score: 0.926 Time: 14.77\n", "Finished Run 3 Score: 0.93 Time: 14.729\n", "Finished Run 1 Score: 0.923 Time: 14.735\n", "Finished Run 2 Score: 0.941 Time: 14.648\n", "Finished Run 3 Score: 0.935 Time: 14.906\n", "Finished Run 1 Score: 0.912 Time: 14.78\n", "Finished Run 2 Score: 0.915 Time: 14.993\n", "Finished Run 3 Score: 0.93 Time: 14.697\n", "Finished Run 1 Score: 0.926 Time: 14.718\n", "Finished Run 2 Score: 0.927 Time: 14.732\n", "Finished Run 3 Score: 0.919 Time: 14.908\n", "Finished Run 1 Score: 0.925 Time: 14.836\n", "Finished Run 2 Score: 0.91 Time: 14.777\n", "Finished Run 3 Score: 0.921 Time: 14.546\n", "Finished Run 1 Score: 0.922 Time: 14.754\n", "Finished Run 2 Score: 0.936 Time: 14.711\n", "Finished Run 3 Score: 0.931 Time: 14.709\n", "Finished Run 1 Score: 0.919 Time: 14.655\n", "Finished Run 2 Score: 0.914 Time: 14.71\n", "Finished Run 3 Score: 0.922 Time: 14.666\n", "Finished Run 1 Score: 0.926 Time: 14.834\n", "Finished Run 2 Score: 0.923 Time: 14.819\n", "Finished Run 3 Score: 0.922 Time: 14.6\n", "Finished Run 1 Score: 0.91 Time: 14.784\n", "Finished Run 2 Score: 0.915 Time: 14.683\n", "Finished Run 3 Score: 0.91 Time: 14.979\n", "Finished Run 1 Score: 0.914 Time: 14.826\n", "Finished Run 2 Score: 0.904 Time: 14.8\n", "Finished Run 3 Score: 0.906 Time: 14.59\n", "Finished Run 1 Score: 0.891 Time: 14.707\n", "Finished Run 2 Score: 0.914 Time: 14.521\n", "Finished Run 3 Score: 0.893 Time: 14.799\n", "Finished Run 1 Score: 0.912 Time: 14.816\n", "Finished Run 2 Score: 0.901 Time: 14.74\n", "Finished Run 3 Score: 0.886 Time: 14.697\n", "Finished Run 1 Score: 0.899 Time: 14.834\n", "Finished Run 2 Score: 0.886 Time: 14.563\n", "Finished Run 3 Score: 0.88 Time: 14.822\n", "Finished Run 1 Score: 0.908 Time: 14.667\n", "Finished Run 2 Score: 0.889 Time: 14.644\n", "Finished Run 3 Score: 0.904 Time: 14.715\n", "Finished Run 1 Score: 0.917 Time: 14.94\n", "Finished Run 2 Score: 0.91 Time: 14.903\n", "Finished Run 3 Score: 0.895 Time: 14.803\n", "Finished Run 1 Score: 0.893 Time: 14.607\n", "Finished Run 2 Score: 0.909 Time: 14.907\n", "Finished Run 3 Score: 0.897 Time: 14.747\n", "Finished Run 1 Score: 0.893 Time: 14.604\n", "Finished Run 2 Score: 0.897 Time: 14.374\n", "Finished Run 3 Score: 0.892 Time: 14.582\n", "Finished Run 1 Score: 0.875 Time: 14.716\n", "Finished Run 2 Score: 0.892 Time: 14.94\n", "Finished Run 3 Score: 0.892 Time: 14.722\n", "Finished Run 1 Score: 0.88 Time: 14.622\n", "Finished Run 2 Score: 0.879 Time: 14.721\n", "Finished Run 3 Score: 0.889 Time: 14.776\n", "Finished Run 1 Score: 0.87 Time: 14.488\n", "Finished Run 2 Score: 0.858 Time: 14.663\n", "Finished Run 3 Score: 0.867 Time: 14.558\n", "Finished Run 1 Score: 0.873 Time: 14.767\n", "Finished Run 2 Score: 0.867 Time: 14.594\n", "Finished Run 3 Score: 0.887 Time: 14.619\n", "Finished Run 1 Score: 0.883 Time: 14.65\n", "Finished Run 2 Score: 0.896 Time: 14.624\n", "Finished Run 3 Score: 0.896 Time: 14.561\n", "Finished Run 1 Score: 0.878 Time: 14.789\n", "Finished Run 2 Score: 0.863 Time: 14.719\n", "Finished Run 3 Score: 0.888 Time: 14.594\n", "Finished Run 1 Score: 0.893 Time: 14.561\n", "Finished Run 2 Score: 0.865 Time: 14.638\n", "Finished Run 3 Score: 0.882 Time: 14.724\n", "Finished Run 1 Score: 0.857 Time: 14.438\n", "Finished Run 2 Score: 0.847 Time: 14.775\n", "Finished Run 3 Score: 0.843 Time: 14.786\n", "Finished Run 1 Score: 0.876 Time: 14.681\n", "Finished Run 2 Score: 0.854 Time: 14.593\n", "Finished Run 3 Score: 0.858 Time: 14.71\n", "Finished Run 1 Score: 0.862 Time: 14.673\n", "Finished Run 2 Score: 0.875 Time: 14.582\n", "Finished Run 3 Score: 0.861 Time: 14.604\n", "Finished Run 1 Score: 0.858 Time: 14.714\n", "Finished Run 2 Score: 0.858 Time: 14.805\n", "Finished Run 3 Score: 0.871 Time: 14.836\n", "Finished Run 1 Score: 0.848 Time: 14.815\n", "Finished Run 2 Score: 0.844 Time: 14.783\n", "Finished Run 3 Score: 0.856 Time: 14.726\n", "Finished Run 1 Score: 0.836 Time: 14.944\n", "Finished Run 2 Score: 0.857 Time: 14.762\n", "Finished Run 3 Score: 0.843 Time: 14.744\n", "Finished Run 1 Score: 0.826 Time: 14.824\n", "Finished Run 2 Score: 0.853 Time: 14.541\n", "Finished Run 3 Score: 0.831 Time: 14.737\n", "Finished Run 1 Score: 0.831 Time: 14.801\n", "Finished Run 2 Score: 0.827 Time: 14.658\n", "Finished Run 3 Score: 0.854 Time: 14.864\n", "Finished Run 1 Score: 0.837 Time: 14.826\n", "Finished Run 2 Score: 0.843 Time: 14.59\n", "Finished Run 3 Score: 0.841 Time: 14.695\n", "Finished Run 1 Score: 0.862 Time: 14.857\n", "Finished Run 2 Score: 0.841 Time: 14.672\n", "Finished Run 3 Score: 0.848 Time: 14.481\n", "Finished Run 1 Score: 0.813 Time: 14.62\n", "Finished Run 2 Score: 0.836 Time: 14.812\n", "Finished Run 3 Score: 0.814 Time: 14.819\n", "Finished Run 1 Score: 0.827 Time: 14.675\n", "Finished Run 2 Score: 0.835 Time: 14.727\n", "Finished Run 3 Score: 0.834 Time: 14.889\n", "Finished Run 1 Score: 0.831 Time: 14.705\n", "Finished Run 2 Score: 0.852 Time: 14.881\n", "Finished Run 3 Score: 0.86 Time: 14.648\n", "Finished Run 1 Score: 0.832 Time: 14.854\n", "Finished Run 2 Score: 0.865 Time: 14.65\n", "Finished Run 3 Score: 0.849 Time: 14.488\n", "Finished Run 1 Score: 0.862 Time: 15.05\n", "Finished Run 2 Score: 0.843 Time: 14.832\n", "Finished Run 3 Score: 0.865 Time: 14.816\n", "Finished Run 1 Score: 0.839 Time: 14.581\n", "Finished Run 2 Score: 0.871 Time: 14.629\n", "Finished Run 3 Score: 0.834 Time: 14.494\n" ] } ], "source": [ "dilation_times_s1, dilation_scores_s1 = [], []\n", "dilation_choices_s1 = list(range(1,100,2))\n", "for dilation in dilation_choices_s1:\n", " times, scores = timing_test_dilation(3, np.array((9,)), stride=1, num_kernels=50, seq_length=32000, dilation=dilation)\n", " dilation_times_s1.append(mn(times))\n", " dilation_scores_s1.append(mn(scores))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(dilation_choices_s1, dilation_scores_s1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lastly return to stride 5 and do a test with varying filter size and dilation to make sure theyre not correlated" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from collections import defaultdict" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finished Run 1 Score: 0.817 Time: 4.494\n", "Finished Run 2 Score: 0.818 Time: 4.557\n", "Finished Run 3 Score: 0.835 Time: 4.681\n", "Finished Run 1 Score: 0.882 Time: 5.53\n", "Finished Run 2 Score: 0.863 Time: 5.522\n", "Finished Run 3 Score: 0.873 Time: 5.477\n", "Finished Run 1 Score: 0.909 Time: 6.643\n", "Finished Run 2 Score: 0.9 Time: 6.353\n", "Finished Run 3 Score: 0.896 Time: 6.341\n", "Finished Run 1 Score: 0.913 Time: 7.454\n", "Finished Run 2 Score: 0.931 Time: 7.347\n", "Finished Run 3 Score: 0.926 Time: 7.466\n", "Finished Run 1 Score: 0.925 Time: 8.48\n", "Finished Run 2 Score: 0.943 Time: 8.527\n", "Finished Run 3 Score: 0.932 Time: 8.416\n", "Finished Run 1 Score: 0.843 Time: 4.627\n", "Finished Run 2 Score: 0.866 Time: 4.468\n", "Finished Run 3 Score: 0.848 Time: 4.485\n", "Finished Run 1 Score: 0.931 Time: 5.467\n", "Finished Run 2 Score: 0.919 Time: 5.331\n", "Finished Run 3 Score: 0.926 Time: 5.596\n", "Finished Run 1 Score: 0.956 Time: 6.512\n", "Finished Run 2 Score: 0.956 Time: 6.47\n", "Finished Run 3 Score: 0.943 Time: 6.544\n", "Finished Run 1 Score: 0.954 Time: 7.438\n", "Finished Run 2 Score: 0.962 Time: 7.26\n", "Finished Run 3 Score: 0.957 Time: 7.515\n", "Finished Run 1 Score: 0.966 Time: 8.479\n", "Finished Run 2 Score: 0.973 Time: 8.575\n", "Finished Run 3 Score: 0.969 Time: 8.443\n", "Finished Run 1 Score: 0.896 Time: 4.541\n", "Finished Run 2 Score: 0.896 Time: 4.728\n", "Finished Run 3 Score: 0.893 Time: 4.649\n", "Finished Run 1 Score: 0.951 Time: 5.598\n", "Finished Run 2 Score: 0.945 Time: 5.607\n", "Finished Run 3 Score: 0.945 Time: 5.402\n", "Finished Run 1 Score: 0.973 Time: 6.426\n", "Finished Run 2 Score: 0.954 Time: 6.408\n", "Finished Run 3 Score: 0.96 Time: 6.38\n", "Finished Run 1 Score: 0.965 Time: 7.573\n", "Finished Run 2 Score: 0.964 Time: 7.515\n", "Finished Run 3 Score: 0.979 Time: 7.618\n", "Finished Run 1 Score: 0.974 Time: 8.507\n", "Finished Run 2 Score: 0.973 Time: 8.445\n", "Finished Run 3 Score: 0.967 Time: 8.396\n", "Finished Run 1 Score: 0.925 Time: 4.644\n", "Finished Run 2 Score: 0.931 Time: 4.628\n", "Finished Run 3 Score: 0.915 Time: 4.509\n", "Finished Run 1 Score: 0.962 Time: 5.551\n", "Finished Run 2 Score: 0.969 Time: 5.549\n", "Finished Run 3 Score: 0.967 Time: 5.536\n", "Finished Run 1 Score: 0.967 Time: 6.526\n", "Finished Run 2 Score: 0.98 Time: 6.507\n", "Finished Run 3 Score: 0.973 Time: 6.601\n", "Finished Run 1 Score: 0.966 Time: 7.463\n", "Finished Run 2 Score: 0.965 Time: 7.491\n", "Finished Run 3 Score: 0.975 Time: 7.447\n", "Finished Run 1 Score: 0.973 Time: 8.469\n", "Finished Run 2 Score: 0.977 Time: 8.521\n", "Finished Run 3 Score: 0.969 Time: 8.459\n", "Finished Run 1 Score: 0.949 Time: 4.567\n", "Finished Run 2 Score: 0.948 Time: 4.631\n", "Finished Run 3 Score: 0.944 Time: 4.5\n", "Finished Run 1 Score: 0.967 Time: 5.534\n", "Finished Run 2 Score: 0.965 Time: 5.42\n", "Finished Run 3 Score: 0.962 Time: 5.598\n", "Finished Run 1 Score: 0.974 Time: 6.47\n", "Finished Run 2 Score: 0.964 Time: 6.559\n", "Finished Run 3 Score: 0.975 Time: 6.488\n", "Finished Run 1 Score: 0.966 Time: 7.595\n", "Finished Run 2 Score: 0.974 Time: 7.46\n", "Finished Run 3 Score: 0.966 Time: 7.594\n", "Finished Run 1 Score: 0.97 Time: 8.581\n", "Finished Run 2 Score: 0.965 Time: 8.631\n", "Finished Run 3 Score: 0.961 Time: 8.423\n" ] } ], "source": [ "dilation_scores_dict = defaultdict(list)\n", "dilation_times_filt = []\n", "dilation_choices_filt = [3,5,7,9,11]\n", "filter_choices = [5,7,9,11,13]\n", "for dilation in dilation_choices_filt:\n", " for filter_size in filter_choices:\n", " times, scores = timing_test_dilation(3, np.array((filter_size,)), stride=5, num_kernels=100, seq_length=32000, dilation=dilation)\n", " dilation_times_s1.append(mn(times))\n", " dilation_scores_dict[filter_size].append((mn(scores)))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "defaultdict(list,\n", " {5: [0.823, 0.852, 0.895, 0.924, 0.947],\n", " 7: [0.873, 0.925, 0.947, 0.966, 0.965],\n", " 9: [0.902, 0.951, 0.962, 0.974, 0.971],\n", " 11: [0.923, 0.958, 0.969, 0.969, 0.969],\n", " 13: [0.933, 0.969, 0.971, 0.973, 0.965]})" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dilation_scores_dict" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEICAYAAABF82P+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOydeXiU1fXHP3dmsm9kZwkhAUIWQAJERAVkl4q4QBUQrFhbbCuCVK36s2rrbqVWKWorbqgIigsiWncWARXCDtmAAEnYsu/LbPf3xzsJSQgwkJnMJLmf55kn8273PZNk7ve95557jpBSolAoFApFc3SuNkChUCgU7okSCIVCoVC0iBIIhUKhULSIEgiFQqFQtIgSCIVCoVC0iBIIhUKhULSIUwVCCDFJCJEphDgohHiwheO9hBDfCyH2CCHWCyGiGh37hxBivxAiXQixWAghnGmrQqFQKJpicFbDQgg98DIwAcgDtgkh1kgp0xqdtgh4R0q5TAgxFngGuFUIcQVwJXCJ7bxNwFXA+rPdLywsTMbExDj8cygUCkVHZvv27YVSyvCWjjlNIIBhwEEpZTaAEGIlcD3QWCCSgIW29+uA1bb3EvAGPAEBeACnznWzmJgYUlNTHWa8QqFQdAaEEEfPdsyZLqYeQG6j7TzbvsbsBqbZ3t8IBAghQqWUP6EJxgnb62spZXrzGwgh5gohUoUQqQUFBQ7/AAqFQtGZcaZAtDRn0Dyvx33AVUKInWgupGOAWQjRF0gEotBEZawQYtQZjUn5mpQyRUqZEh7e4ghJoVAoFBeJM11MeUDPRttRwPHGJ0gpjwNTAYQQ/sA0KWWZEGIu8LOUstJ27H/AcGCjE+1VKBQKRSOcOYLYBsQJIWKFEJ7ADGBN4xOEEGFCiHobHgLetL3PQRtZGIQQHmijizNcTAqFQqFwHk4TCCmlGZgHfI3WuX8opdwvhHhcCHGd7bTRQKYQIguIBJ6y7f8IOATsRZun2C2l/NxZtioUCoXiTERHSfedkpIiVRSTQqFQXBhCiO1SypSWjqmV1AqFQqFoEWdOUisUCoXd1JhryCjOYH/hfqrN1fh5+OFr8MXf0x8/gx++Hr74efg1eRl0qgtzJuq3q1Ao2hyTxURWaRb78veTnp9ORn4WuaXHEBYdBqsHRn0dlV4lSGE9Zzteeq8mQuJrOFNE6l++Hr74e/g3nN/8uJfeC5XRpylKIBQKBQBWixWzyYrZaMVitmI2WjCbrFhMzd63sG0xWTAbrY32WRraMhst1NTVUl1bg7HOhNkkwSLQWw3oZRjhjCSckWfYI3TgG+KBd7AOj2DQBZmRgXWY/Wuo86ugWlZRZbK9zKffF9UWkVuR27Bdba626/Prhb5hlOLv4a+9N7QsNE3O8fA74zxfD190ov178JVAKBRuiMVS3zFrna2lhY7bbLR1zCbr2TtykwWL0dronEYdd327JisWoxWr9eIDVnQGgcFDj8FDBwYrJmGijhqqZCUV1jKMohaLzgx+kgBff0L8uxAaEEpkQAghfsEYPPUYPHUYPHToPXTUVZspK6ihvKCGsoIaivfWYKyxoHVZAUAAfkGeRET4EhjuQ1CYD0HhPgRF+BAY5oO3n0eDbVZppdpU3SAk1aZqKk2VmnjU72/2qjZXU2mspMpcRUFNQZNjFmmx63fiY/BpWUg8TwtKi2LTzLXm5+GHh97j/Dd0AkogFIrzYLFYT3eyRoutkz6zAz5b56t1wGd23M2fuE8LghXZis5ab9A6WYOHDoOnDr2t49a29Xj7ezZsa+fp0ds6Z4OH3nbN6W29Z9Nz69s1eOgpNhWRXpZGWsk+dhfuZ3/RfkrrSgHw1HmSEJJAUmgSw8IGMCBsADGBMeh1+gv+TFJK6qo00SgrqD4tHoU15Owrorrc2OR8L18DQeE+mng0ekWEdcEvxBOhuzhXkpSSOkvdaXExV1FprKTa3LLQ1J9XL0gnq09SVXb6WJ2lzq77eug8Wh7JGPzw9/QnNjCWOQPmXNRnOhdKIBTtBiklVots+WnZaMFsbtSR2zrgxu6OxsdOu0rO/hRev93azrpxh6tv1MF6euvxCWjUWXvqz+i4G6711GEwtNCRG0531npPHQaD7qI7v/NRVlfG/sI97Du1j32F+9hfuJ/8mnztcwo9fbr0YWz0WPqH9mdA2ADiusQ57MlXCIG3vwfe/h5ExgaecdxUZ6G8sMYmIDU2Aakm/0g5h3YUNPkbGjx0BIZrI43G4hEY7kNAqDd6/dldQ0IIvA3eeBu8CfUJbfXnMllNVJuqzxzVmM8tNtWmaspqyzhuPk6VqYpTVaeUQCjch8adtdl4FhdI42ONfdPNfdXGZk/R53gKb82yHX2Tzld7mq7fbuisG3XALT2F6xs9PTccMzR+6m703omdtbOpNlWTVpTG/qL97CvUBCGvMq/heExgDJd2u5QBodrIID4kHh+Dj8vs9fDSE9rDn9Ae/mccs1isVBTVNrirygprKMuvobywhrz0Ysym0xPhQicICPGyCYbvGa4rD68LH/2c026dB0FeQQR5BTm0XUehBEJhN1JKDu8qZPPHB6goqnVIZ93Sk7OnjwHfwEbHDLpzPzk3dNpNn9Abd/L6NuqspcWC8ehRqtPTqUtPpzY9g9rMTKyVlU6/d2uwSitSWrEibe8lBmAQkCwEOgRC6NAJHToh0FKt5aElSoCz5ot2MzyAMNsLtOyhRo9Aqr3DqPEOpcYrlJr8MMqOhHLCOwyzwbfJ9Z7Gcnxqi/CtK8SnthCf2iJ86orwqS3Cw1zVYobStsBnwAB6vfeuw9tVAqGwi/KiGn5cmcWRvUWE9vBn6K9iGnXSto65Wcd9hi+74Ylb1yHCCa21tdRlZWkikJFOXVo6tVlZyJoa7QQPD7z69sV/5Ej0IcGuNdaGlJLSulIKawobXsW1xVil9hTtY/Ah1CeUcJ9wwnzCCPUJdenIwDVYgQKgAKNFT6XJiyqzl/bT5EWlKYxSUw9OWDybXOWhM+NnqMPfow4/j6Y/ffQmnPkv79Gtu1PaVQKhOCcWi5Xd3+Wy7YvDIARXTOvLoLFR6M7hp+2ImEtKqMvIoDYtndqMDGrT0zBmHwar1rHq/P3xTkigy02/xjshEe+kRLx690Z4ep6nZechpSSnIqfBRbS/aD8ZxRnUmDUB8/fwp39of/qHaXMGA0IH0NWva4cQ77bAbLRQVng60qpx1NXxotomUWF6g47AMO8mE+eBYT50ifDV5j0M7vl9UgKhOCsnDpWxfnkGxceriB0Uxsjp/QgI8Xa1WU5FSonp2DFq09OpS8+gNl0TBPOJEw3nGCIj8U5MJGDCBLwTE/FOTMQjKsqlHauUklPVpxqEoP5nhbECAG+9NwkhCUyLm0b/sP70D+1Pr8Be7hmrb7WC1QQ6A1xExFNbYfDUE9rdn9DuZ857WC1WKorrGiKtygpqKMuv1uY9MkswGxvNewjwD/bWhCPidMhuvZB4eruum1YCoTiD2ioTP316iLRNx/EP9uJXfxhI7+SOV5BJmkzUZWdTm5ZOXUZ6w+jAWqF1quh0eMbG4jt0KN6JCXgnJuKVkIAhJMS1hgMltSXayKBIiybaV7iPotoiAAzCQFxwHJNiJjVEFPXp0se901JYTHB4A6R9BhlfQHWR7YCwCYUB9B6aYOg8Gu2z/dTVH6s/z9DsOkPTa/WNjtdf2/y6ltqyyw4DOp2eIL0HQWEGekbUtx8COgNS6KmugvJiM2VFZsqK6igrrKO8sIbsHQXUVpma/Gp8AjxOC0aYD0ERvg0jEJ8AD6c+mLjxf4yirZFSkvXLSTZ/fJDaKjPJE6K5dHKMS59gHIWlspK6zExtviA9jbr0DOoOHECatC+j8PbGK74fgddcYxsVJODVrx86H9f73yuNlaQVpbGvSHMVpRWlcazyGAACQWxQLFf2uLJBDOJD4vHSe7nYajsw18GhdZooZH4BtWXg6Q/9JkFEIlgtYDVrowmrGSzmpttWiyYsVnPTl8WkHTPXNtp3AdeeUfjSsQjAz/bq1viAzgOCDdSFBFJu6UqZpRtl5q6UmSMoPxnO8dwwskyBNM6x6qGrI8i7jG6RNYx64HaH29r+v/kKh1BysooNKzI5lllKZGwg1y2IJywqwNVmXTBSSswFBacjiNLTqc1Ix3Q0p+EcfXAw3omJBP/mVrwTk/BOTMAzJgahd707o9ZcqyWsK9qvjQyK9nGk7AjS1mn18O/BgLABzIifQf+w/iSFJuHn4ediqy8AUw0c/M4mCl+BsQK8giDhGki6HnqPAQ8XuzHrXVx2iYvpPEJlO79B5EznED5tn5fVQrjFRHjDvlywHgaLlqakvMaX8mpfyqoDKKsJoKw2CLPJOf+7SiA6OWaThe1fHWXH10fx8NRz1S3x9B/RvV3E72shpTmae6iRIFiKihrO8ejZE+/ERLrccANeCQl4JyVhiIhwi4lYk9XEodJDTSaRD5YcxCzNAIT7hNM/rD+TYyc3zBsEe7tHNNQFUVcJB77RROHAt2CqAp8Q6H8DJN0AsaPA4LrJ/DPQ6UDnBbjfKMwAhNhebXU/RSclN62YDSsyKSuood+wSK78dRy+gW70RW2Eta7OFlKafnoCOSsLWW1LxFYfUjpq1GkXUUIC+gD3GAVZpZUj5Uca5gv2Fe0jszizIdVCoGcg/UP7c/uA27WootABRPpFutjqVlBbBllfa6Jw8DvN3eMXDoOmayOFXiM0v73CrXHqX0gIMQl4CdADr0spn212vBdaHepwoBiYLaXMsx2LBl4HeqI5Ba+RUh5xpr2dhaqyOjZ/dJAD204RFOHDdQuS6Zno+onXeiylpVooaZrmHqpLT6cu+zBYtCRpDSGl06bhnZCghZT26ePSkNLGmKwmskuzySzJJKM4g4ziDNKL0qk0aYvlfAw+JIYkMj1+ekN4aVSAa6OgHEJ1MWT+D9LXwKEfwGKEgG4w5DZNFKKHu3VUkuJMnCYQQgg98DIwAW3J5TYhxBopZVqj0xYB70gplwkhxgLPALfajr0DPCWl/FYI4Y+2ekXRCqRVsn/TcX769BBmk4VLJ8cwZFIvDB6u+dJqIaXHm0QQ1WakYz7eLKQ0IQH/8eMb1hd49OiB0LlHeGaVqYqskizSi9LJLMkkvSidg6UHMVm1yW9vvTf9gvsxufdkBoQNoH9of3oH9b6ohHVuSVUhZKyFtDVaFJLVDEE9YdhcSLwOoi7VXDaKdokzRxDDgINSymwAIcRK4HqgsUAkAQtt79cBq23nJgEGKeW3AFJK985T0A4ozKtg/fJMTh0up0d8MFfN7Edw17ab3NRCSg83RBDVry+wlpdrJ9SHlA4egvctCXjZ1he4Q0hpPQXVBQ0jgoziDDJLMskpz2mYQA72CiYhJIHZSbNJCE4gISSBXoG9Oo4Y1FNxEtI/10YKRzaBtEJwLFw+D5Kug+5DcOqyYUWb4UyB6AHkNtrOAy5rds5uYBqaG+pGIEAIEQr0A0qFEJ8AscB3wINS2pmIXdGAsdbM1rWH2fNDHt5+BsbfnkS/YZFOdWdYKquoy8ps5CKyhZQatZTMwssLr/h4An/1q9PrC+Li0Pn6nqfltsEqreSU5zQRg4zijIZ1BgBR/lEkhiYypfcUEkMTiQ+OJ8LXPSa/nUJZniYKaWsg5ydAQlg/GHmv5j6KHKBEoQPiTIFo6b+leYDxfcASIcQcYCNwDDDb7BoJDAZygA+AOcAbTW4gxFxgLkB0dLTjLO8gZO8q4McPsqgsqSNpZHcuv6FPk0IqjsBcUNAkgqguPR1jTg71mfz0XbrgnZRI8OzZDZPHnjExCIN7TFDWWeo4WHKQ9OJ0bVRQnElmSWZDOgqDzkDfLn0ZGTWShJAE4oPjiQ+JJ8DTPSa/nUrJEU0Q0tdA3jZtX0R/GP2QJgoRCS41T+F8nPktzUObYK4nCjje+AQp5XFgKoBtnmGalLJMCJEH7GzknloNDKeZQEgpXwNeA0hJSXHu6pZ2RHlRDT9+cIAjewoJ7eHHxN8NoFsfx6QTtlZVUfzue1Rv366FlBYWNhzziIrCOzGRwOuva0hBYYh07mjlQiirKztjVHC47HBDhTB/D3/iQ+KZGjeVhBDNRdQnqI/Lqnm5hKJDkLZaE4YTu7R93QbBuEch8XoI6+ta+xRtijMFYhsQJ4SIRRsZzABuaXyCECIMKJZSWoGH0CKa6q8NFkKESykLgLFAqhNt7RBYLFb2fJ/H1rXZAFw+tQ+DxvU8ZwEUe5FSUvH1N5x69lnMJ0/iFR+P/4gRWgRRQgLeCQnoA88s5OIKpJScqDpBenE6mcWZDT9PVJ2e/I7wjSAhJIGx0WMbxKCHfw/3zE3kbPIztHDU9DVwap+2r0cKTHgCEqdASKxr7VO4DKcJhJTSLISYh5YwXg+8KaXcL4R4HEiVUq4BRgPPCCEkmovpLtu1FiHEfcD3Qnv83A4sdZatHYGT2WWsX55J0bFKYi4JY+T0OAJDHZMmoi77MKeefJKqLVvwSkigxwsv4DtksEPabi0mq4nDZYdPTxwXa6Gl5UZt8lsndMQExpAckczMkJnEh8STEJJAiLf7TH63OVJqQpC2RhOGwkxAaGGok57VRCEoytVWKtwAIVtT9cWNSElJkampnW+QUVtl4ufVh9i/6Tj+XbwYOb0fsYPCHOLWsVZXU/if/1L01lvovLwIX7CA4JkzXDZ/UG2qbrK2IKM4g4MlBzFatclvL70X/YL7NYwIEkISiAuO64T1DFpASji+UxslpH0GxdkgdNDrSm0+IXEKBHR1tZUKFyCE2C6lTGnpmHvMFCouGCklWVtPsfmjA9RWmRk0rifDro11SGI9KSUV337LqWeexXziBEHXX0/E/fdhCAs7/8UOorCmsGFtQb0YNA4p7eLVhYSQBGYlzmoYFfQK7OXeGUvbGqsVjqVqgpC2BspyQOih91Vw5QKInwz+HS9Lr8JxqG9TO6T0VDUbVmSSl1FCREwgU+bHE97TMVE1xiNHOPnkU1Rt2oRXv370eP4f+Ka0+HDhEBpCSksyyCjKaPjZOKS0h38PEkMSubb3tSSGJBIfEk+kr/tMfrsVVgvk/nJaFCqOa1lC+4yF0Q9C/K/AtxO71xQXhBKIdoTZZGHH1zls/+oIBg89V83sR9LIHugckFjPWlND4WuvUfz6GwhPTyL/7yGCb7nFoe6k+pDS5ovNGkJKhYE+XfowoscILaQ0RAspDfR0j8lvt8VihqObbRPNn0NVPui9IG4CJP4N4ieBt2Oi2BSdCyUQ7YTcjGI2vJ9JWX4NcZdGcuWv++IX1Ppsk1JKKn/4gVNPPY3p+HECr5tCxH334RER0ap2y+rKmkQQpRenNwkp9fPwIz44nhv73ng6pLRLHzz17pFPye1pqcCOhy/ETdRWM8dNBK9OsFZD4VSUQLg51eVGNn90gKytpwgM92HK/EFEJ4U6pG1jTg4nn3qKqg0b8YrrS/Q7y/AbNuyC2qgPKW2+vqBJSKlPBAmhCYzpOYaEkAQSQxLpEdBJQ0pbQ4sFdgK0EULS9dBnHHi6x2p0RcdACYSbUp9Y7+fVhzDVWUi5Joahk3ph8Gx9Xh9rbS1FS1+naOlShMFAxAMPEDJ7FsLDvgVhG/M28suJXxrEoD6kVCCICYohOTyZGQkzSAjW3EShPo4RtE6JsRoOfd+0wI53kDbBnHQ99B7t+gI7ig6LEgg3pDCvkvXLM7TEev26cNUt8Q5LrFexbp3mTsrLI3DyZCL+8hc8Iu1zJ5mtZp7f9jzvZ7zfEFI6MWailpguNIG4LnH4eqgn2FbTpMDON2Cq1grsDLhRW83sbgV2FB0WJRBuhLHWzLYvjrD7+1y8fA2Mn5NIv8u6OiRax5iXx6mnnqZy3To8+/Qh+u238RvePHfi2ak0VnL/xvvZdGwTtybdysKhC/HQdaIUFM6mxQI7ETBopjanoArsKFyA+o9zEw7vLmDjSltivSu7cfnUvg5JrGetq6Po9dcpem0p6PVE3H8/IbfOvqDiOnkVedz9w90cKTvCo5c/yk39bmq1XQpOF9hJ+wyy19kK7HSHoXO0WgqqwI7CxSiBcDEVxbX8+EEWh3cXEtLdj6l39Kdb3y4Oabty40ZOPvkUppwcAn41icgHHsCj64Wtlt2Vv4sF6xZgspp4dcKrDO823CG2dVoaCux8Boc32grsRGsFdpKu13IgqQI7CjdBCYSLsFqs7FmXxy+fHwar5PIb+zBovGMS6xnzjnHq2Weo/O57PGNjiX7zDfyuuOKC21mbvZZHNz9KN79uLBm3hNgglbTtoqg4dTrFxdHNWoGdkN5wxd3aSKH7YFVLQXHRVNSaOFlWS1yk48OalUC4gJPZZax/P5OivEp6DQxl1PR+BIa1Pl+Q1Wik+M03KfzPf0EIwu/9M6G33XbBtZqt0soru17hv3v+S0pkCv8a/S+6eDtmVNNpMNdp7qNd72tzCtJiK7BznzanoArsKFqBlJKduaWs3JrD57tP0CfCj7V3j3T4fZRAtCF11SZ+Wp3N/h+P4RfkxaQ7B9A7Odwhk9CVP27i1JNPYjx6lICJE4l88AE8une/4HZqzDX8ddNf+eboN9zY90YeGf5I56qH0FpO7Iady2HvKqgp1uYUrlwAl9wMEYmutk7RzimrNvHpzjxWbM0l81QFvp56rk/uzoxh0UgpHZ5+RglEGyCl5MC2U2z66CC1FUYGjenJsOsck1jPdPw4p559jopvvsGzVy96Ll2K/8gRF9VWQXUB83+Yz/6i/dw79F5u63+byndkD1VFsPdDTRhO7dXSXCRMhuRZ0GeMmmhWtAopJduOlLBiaw5f7j1BndnKJVFBPH3jQK5L7o6/l/O6cSUQTqZJYr1eAUyZN4jw6Nb7CqXRSNHbyyh89VWQkvB77iHkt7eju0B3Uj0ZxRnM+34e5cZyXhzzImOjx7baxg6Nxay5jna9py1gs5q0uYRrFsGAaSohnqLVFFcZ+Xh7Hiu35XCooIoALwM3p/RkxrCe9O/eNrm1lEA4CYvJyo5vjrL9f0fRGwSjZvSj/yjHJNar2rKFk088ifHwYQImjCfywQfx6NHjottbl7OOB358gEDPQJZNWkZiqHKFnJX8DE0Udn+gJcXzC4fL7tRGC5FJrrZO0c6xWiU/ZRexYmsOX+8/ickiGdormOd/3YfJl3TD17Ntu2wlEE4gL6OYDSuyKD1VTd+UCEbcFOeQxHqmkyc1d9JXX+ERHU3P1/6L/6hRF92elJJl+5fxwvYX6B/an8VjFxPuq+oDnEFNKez7GHYth2PbQWeAuKth8CwtKZ6ao1G0kvyKWj7anscH23I5WlRNkI8Hs4f3YuawaPo5ITrJXpRAOJDqciObPz5A1i+nCAzzZsrdg4ju3/o8RNJopPjddyl4+RWwWAibfzehd9yBzuviRcdkMfHkL0/yyYFPmNBrAk+NeEpVXmuM1aJlS925XFu3YK6FiP5w9dMw8GZVaEfRaixWyY8HClixNYfv0/MxWyWXxYbw5wn9uLp/V7w9XD935VSBEEJMAl5Cq0n9upTy2WbHewFvAuFAMTBbSpnX6HggkA58KqWc50xbW4O0StI2H+enTx2fWK/q5581d9KhQ/iPHUvk/z2EZ1Tr6gWX1ZWxcP1Ctp3cxtxL5nJX8l0qs2o9RYe00NTdK6E8D7y7wOBbtdFCt2QVmqpoNSfKavhwWx4fpuZyrLSGUD9P7hgRy/RLe9I73N/V5jXBaQIhhNADLwMTgDxgmxBijZQyrdFpi4B3pJTLhBBjgWeAWxsdfwLY4CwbHUHRsUrWL8/kZHYZ3eO0xHoh3VqfWM906hT5z/2D8i+/xCMqiqhXXyFgzJhWt3uk7AjzfpjH8crjPD3iaab0mdLqNts9dZWQtlobLeRs0Wo19xkLE5+A+GtUtlRFqzFbrKzLLGDl1hzWZeZjlTAyLoz/uyaRCUmReBrc8wHNmSOIYcBBKWU2gBBiJXA90FggkoCFtvfrgNX1B4QQQ4FI4CvAeTUvLxJTnYVtaw+z6/tcvHwMjLstkfjhrU+sJ00mit99j8IlS5BmM2Hz5hH6uzvQebe+k/rlxC8sXK8l2Xvj6jcYHDG41W22W6SEo1u0eYX9q8FUBSF9YNyjWoK8wAtfQ6JQNCe3uJoPU3P5MDWXU+V1RAR48cfRfZieEk10qPtnPnamQPQAchtt5wHN04fuBqahuaFuBAKEEKFACfBPtNHEuLPdQAgxF5gLEB0d7TDDz8eRPYVsXJlFRXEtiVd244ob++Lt3/qJyqpftnLyiccxHjyE31Wj6Prww3g66HN9lPURT/38FL0Ce7Fk3BKiAlrnpmq3lOZq7qNdy6HksFZwZ+A0LQqp52XKhaRoNUazle/ST7Fiaw6bDhYigKv6hfPE9dGMTYjA4IB0Om2FMwWipW+abLZ9H7BECDEH2AgcA8zAn4AvpZS553oil1K+BrwGkJKS0rxth1NZUsuPHxwge1cBwd38uPHeIXSPa30KClN+PvnPL6L888/x6N6dqFdexn/MGIcsUrNYLbyw/QXeSXuHK3tcyfOjnifAs5OVojTVQPpaLTw1ewMgIWYkjH4QEqeAp2NqbSg6N4cLq1i5LYePt+dRWGmke5A3C8bFcXNKT7p3aZ8BIM4UiDygZ6PtKOB44xOklMeBqQBCCH9gmpSyTAhxOTBSCPEnwB/wFEJUSikfdKK9Z6U+sd7Wzw8jrZLhN/QmeXw0+lb6DaXZTMny5RQs/jfSaCTsT38k9Pe/R+fjmH+mKlMVD2x8gA15G5iVOIv7Uu7DoOskgWtSaiGpO9+DfZ9AXZmWNfWqByB5JgTHuNpCRQeg1mTh6/0nWbk1l5+yi9DrBOMSIpg5LJpR/cLRO2DdkytxZm+xDYgTQsSijQxmALc0PkEIEQYUSymtwENoEU1IKWc1OmcOkOIqcTh1uJz172dQmFtJdP9QrprpmMR61ampnHz8CeqysvAbMYKuf30Yz5iY1hts40TlCeb9MI9DpYd4+LKHmZEww2FtuzUVJ2HPB9qEc2EmGHy05HjJs7RRg0qlrXAAB05VsGJrLp/szKO02kTPEB/uvzqem4ZGESwvBxYAACAASURBVBHYcYIazisQQoiP0Tru/9k6cruQUpqFEPOAr9HCXN+UUu4XQjwOpEop1wCjgWeEEBLNxXTXRXwGp1BXbeLnz7LZt/EYfoGeXP37AfQZ0vrEeubCQvKfX0TZZ59h6N6NHv9eTMD48Q7NebSnYA/zf5hPnaWOV8a9whU9LjzVd7vCbISs/2miUJ85tedlMGUx9L8RvANdbaGiA1BjtPDF3hOs3JpD6tESPPSCiUldmTksmiv6hDokS4K7IaQ8t+teCDEeuB0YDqwC3pZSZrSBbRdESkqKTE1NbXU7UkoOpuazadUBaiqMDBwdxWXX9cbTp3WDLWk2U7JiJQUvvYS1ro7Q3/6WsDvnovN1bCTDV4e/4uFNDxPhG8GScUvo06WPQ9t3K07s0Sab93xoy5zaDQbN0EYLYXGutk7RQUg7Xs7KbTl8uvMYFbVmeof5MWNYT6YOiSLMv/UZElyNEGK7lLLFSNHz9npSyu+A74QQQcBM4FshRC6wFHhPSmlyqLUupDS/mo0rs8hNKyaiVwCT77qEiF6tf/qs3rFDcydlZOB3xRVEPvJXvGIdW3xHSsl/9vyHV3a9wpCIIbw45kWCvYMdeg+3oKpIS6W96z04uRf0ntpahcGzofcYVbdZ4RCq6sx8vvs4K7blsju3FE+DjmsGdGXGsGguiw3pNFmO7fo22UJPZ6OFne4ElgMjgNvQ3ETtGovJys5vj5L65VF0BsHI6f0YcFXrE+uZi4rIX/RPyj79FEPXrvR46SUCJk5w+D9XnaWORzY/wv8O/4/r+lzHY5c/hqf+4rK6uiUtZU7tlgy/eh4G/lplTlU4BCkle4+VsWJrDmt2HafKaKFfpD+PXpvE1CE96OLbgb5TdmLPHMQnQALwLjBFSnnCdugDIUTrfTouprywhs//vZvSU9X0GRLByJvj8OvSumGjtFgoWbmSgpcWY62uJvT3vyPsD39A5+f4cMrCmkIWrFvAnoI9LBiygDsG3NFxnm4KMrUopD0fQOUp8A3Tajcn3wJdB7jaOkUHobzWxGc7j7Fiay5pJ8rx9tBx7SXdmTksmiHRXTrO9+kisGcEsURK+UNLB87mt2pP+HXxIijChxE3xdFrQOsT69Xs2sWJxx+nLi0d3+HD6frIX/Hq45x5gKySLOZ9P4+S2hL+NfpfjO813in3aVNqy7TMqTuXw7FUEHrod7U2rxA3EQyd7ylO4XiklOzIKWHF1lzW7jlOrclKUrdAnrhhANcndyfQW2XoBfsEIlEIsUNKWQoghAgGZkopX3GuaW2D3qDj2rsGtbodc3Ex+S+8QNlHH2OIiKDHv14gYNIkpz19bMzbyP0b7sffw5+3f/U2/UP7O+U+bYLVCofXa0ny0j/XMqeGJ8LEJ+GS6eAf4WoLFR2E0mojn+w4xsptOWSdqsTPU8+Ng6OYOawnA3sEderRQkvYIxC/l1K+XL8hpSwRQvwe6BAC0VqkxULpqlXk/+tFrFVVhNzxW8L++Cf0/s5ZnSul5L3091iUuoj44Hj+PfbfRPpFOuVeTqc4WxOFXStsmVODtJHC4FnQfYhKe6FwCFJKfjlczIqtOfxv30mMZiuDenbh2akDmTKoO35OLNnZ3rHnN6MTQghpi4e1ZWlV43ygZu9eTv79cWr37cN32DC6PvoIXn37Ou1+JquJZ355hlVZqxgXPY6nRzyNr4f7J/xqQl0lpH2mhace3QwIW+bUxyF+ssqcqnAYhZV1fGwrwpNdWEWAt4GZl/ZkxrBoEruptTH2YI9AfA18KIT4D1oupT+gZVjttJhLSij414uUrlqFISyM7osWETj5GqcOT8vqyrh3w738cuIX7hhwB/OHzG8/NRykhJyftHmF/Z/aMqf2hrGPaJlTgy6+XKpC0RirVbL5UCErt+byTZpWsvPSmGDuGtOXawZ2w8cBNVo6E/YIxAPAncAf0RLwfQO87kyj3BVptVL60UcU/PMFLJWVhNx2G2Hz7kLv79wiHznlOdz1/V3kVebxxJVPcEPfG5x6P4dRlqe5jxoyp/rDgBsheTZED1cuJIXDyC+vZdX2PFZuyyG3uIZgXw9+c3kMMy7tSZwLS3a2d+xZKGcFXrW9Oi01e/dx8oknqN2zB9+UFCIffQTvfv2cft9tJ7excP1CBIKlE5aS0tXNA8dMNZDxhRaemr0ekNBrBFz1F0i6XmVOVTgMi1WyMauA97fm8ENGPhar5PLeodx/dQJX94/Ey6BGC63FnnUQcWiV3pKABgexlLK3E+1yGyylpeS/+CKlH3yIPjSU7v94jsApU9ok2uHTA5/y+M+P0zOgJy+PfZmegT3Pf5ErkBKO7dAWsu392JY5tacmCoNmQohjV40rOjfHSmv4cFsuq1JzOV5WS5i/J78f2Zvpl/YkNkw9gDgSe1xMbwGPAf8CxqDlZerwvgFptVL26afkL/onlrIygm+dTfjdd6MPcP5w1SqtvLjjRd7a9xaXd7ucRaMXEejphpNqFae0RWy7lkNBBhi8IfE6LQopZpTKnKpwGCaLlR8y8lm5NYf1WQUAjIwL55FrkxiX6L4lO9s79giEj5Tye1sk01Hgb0KIH9FEo0NSm5bGyb8/Ts3u3fgMGULXRx/BOyGhTe5dbarmoR8f4ofcH5geP50Hhj2Ah87NFu0c+A62LYUD32qZU6MuhWtfhAFTtVBVhcJB5BRV80FqDh+m5lFQUUdkoBfzxvTl5pSe9AxpZxF87RB7BKJWCKEDDtjSdx8DOuTKJUt5OQUvvkTJypXog4Pp9uwzBF1/fZstnjlZdZL5P8wnsySTB4c9yC0Jt7jXwh0pYcNzsP4Z8I+EK+Zp6xbC411tmaIDYTRb+SZNK8Kz6WAhOgFj4rUiPKPjw9tVyc72jj0CcQ/gC8wHnkBzM93mTKPaGmm1Urb6M/IXLcJSWkrwzJmEL5iPPrDt3Dr7C/dz9w93U22uZsnYJYyMGtlm97YLixm++DPsWKbNK0xZrNJeKBxKrcnCyq05vLrhEKfK6+jRxYc/T+jHTSlRdAtqnyU72zvnFAjboribpZT3A5Vo8w8dCtOJExy79z5qduzAJzmZrq8vxTspqU1t+ObINzy86WFCvEN491fvEhfsZrUMjNXw8R2Q+SWMvFdbv+BOIxtFu6a5MAyLDeHZaZcwKq79l+xs75xTIKSUFiHE0MYrqTsa+i5dkCYT3Z56iqAbb0C04cSqlJLX977O4p2LGRQ+iJfGvESoT+sTBjqU6mJ4fzrkbYNrFsGw37vaIkUHodZkYcXWHF5df4j8Ck0YXpw+mMv7uNl3oBNjj4tpJ/CZEGIVUFW/U0r5yfkuFEJMAl5CKzn6upTy2WbHe6GVMw0HioHZUso8IUQy2rqLQMACPCWl/MC+j3Rh6Hx8iPnwgzb39RstRv625W98nv0518Rew+NXPo6X3s2qU5UchfemQWkO3LxMW8egULSS5sJwWWwIL81QwuCO2CMQIUARMLbRPgmcUyBs7qmXgQlAHrBNCLFGSpnW6LRFwDtSymVCiLFo6y1uBaqB30gpDwghugPbhRBf12eUdTRtLQ7FtcXcs+4edubvZF7yPOZeMte9JqNBK+e5/CYw18BvVkOvDl7XWuF0ak0W3v9FcyUVVNQxvLcSBnfHnpXUFzvvMAw4KKXMBhBCrASuBxoLRBKw0PZ+HbDads+sRvc/LoTIRxtlOEUg2pJDpYe46/u7KKwp5PmrnmdSzCRXm3Qm2Rtg5SzwDoTffg0Ria62SNGOaUkYFithaBfYs5L6LbQRQxOklL89z6U9gNxG23nAZc3O2Q1MQ3ND3QgECCFCpZRFje4/DC177KEWbJsLzAWIjo4+30dxOZuPbea+DffhpffiravfYmD4QFebdCZ7P4JP/wChfWH2RxAU5WqLFO2UWpOF5b/k8B+bMFzeO5R/zxzM8N5KGNoL9riY1jZ6743WkR+347qWfCbNheY+YIkQYg6wEW2NhbmhASG6oZU6vc2WE6ppY1K+BrwGkJKS4taT6O+nv89z254jrksc/x77b7r5d3O1SWeyZQl88zD0uhJmLAefYFdbpGiHNBeGK/qEsmTmYC5TwtDusMfF9HHjbSHECuA7O9rOAxonD4qimbBIKY8DU23t+gPTpJRltu1A4Avgr1LKn+24n1titpp5butzrMxcyeieo3lu5HPuV8PBaoVvH4GflmipMqYuVXUZFBdMjdHC8l+O8p8N2RRWKmHoCFxMKaU4wB5/zjYgTggRizYymAHc0vgEIUQYUGwbHTyEFtGEEMIT+BRtAnvVRdjoFlQYK7h/w/1sPr6ZOf3ncM+Qe9Dr3CzDpNkIq/8I+z6CYXNh0rPgbjYq3JrmwnBl31BeGTeEYbEhrjZN0UrsmYOooKlr6CRajYhzIqU021JzfI0W5vqmlHK/EOJxIFVKuQYYDTwjhJBoLqa7bJffDIwCQm3uJ4A5Uspddn0qNyC3Ipe7v7+bo+VH+dvlf2Nav2muNulMasvhg9lweAOMewxGLFQL4BR2o4Sh4yM6yvq3lJQUmZqa6mozANhxagf3rLsHi7Twr9H/Yli3Ya426UwqTsJ7v4aCdLhuCSTPdLVFinbCaWE4RGGlkRF9w1gwPo5LY5QwtEeEENullC0WmrFnBHEj8EOjuYEuwGgp5WrHmtkx+PzQ5zy25TG6+3fn5XEv0yuwl6tNOpPCA/DuVKgugpkfQNx4V1ukaAdUG80s/zmH/25UwtBZsGcO4jEp5af1G1LKUiHEY9jWLCg0rNLKkp1LWLp3KcO6DuOF0S8Q5OWGqa9zt8L7N4POAHPWQo8hrrZI4eZUG8289/NR/rshm6IqIyPjwlgwLo4UJQwdHnsEoqXkRBczud1hqTHX8PCmh/n26LdMi5vGw8Mfdr8aDgCZ/4NVt0NAV7j1EwjpFEUBFReJEgaFPR19qhDiBbS0GRK4G9juVKvaEfnV+cz/YT5pRWncl3Ifv0n6jfulzQDYvgzW3gPdBsEtq8A/3NUWKdyUaqOZd386ymsbTwvDPePjGNpLCUNnwx6BuBt4BKhPlvcN8FenWdSOSC9KZ94P86gwVrB47GJG9xztapPOpHGRn77j4aZl4OXvaqsUbogSBkVz7FkoVwU82Aa2tCu+z/meh358iCCvIN791bvEh7hhVbUmRX5ugesWg94NXV8Kl1JVZ+bdnzVhKK4yMqpfOAvGxTG0l1pJ39mxJ4rpW+Cm+kyqQohgYKWU8mpnG+eOSCl5a/9bvLj9RQaEDWDx2MWE+YS52qwzMVbDR7+FrP+pIj+KFlHCoDgf9riYwhqn2ZZSlgghOmRN6vNhsph4/OfHWX1wNVfHXM2TVz6Jt8ENU1JUFcGK6ZCXqor8KM6gqs7MOz8dZemPmjBc1S+cBePjGBKthEHRFHsEwiqEiJZS5kBDkZ+OsbruAiipLWHh+oVsP7WdPwz6A38c9Ed0wg2Lpzcp8vMOJF3naosUbkK9MLy28RAl1SZGx2sjhsFKGBRnwR6BeBjYJITYYNseBdzpPJPcj+yybOZ9P49TVad4duSzTO492dUmtcyJPbD812CuVUV+FA1U1pl556cjLN2YrYRBcUHYM0n9lRBiCDAcLYX3QillodMtcxN+Ov4T966/Fw+9B29c/QbJEcmuNqllVJEfRTOaC8OY+HAWjO9Hcs8urjZN0U6wa8GbTRDWCiH6AH8QQsyQUg5wrmmu58PMD3n6l6eJDYplybgl9PDv4WqTWqa+yE9YHMz6CILc1E5Fm1BZZ2bZliMs/TGbUiUMilZgTxRTN2A6WqruS9DqRnfozG4Wq4VFqYt4L/09RvYYyT9G/QN/TzddO7Dl3/DNX21Fft4HH9UJdFaaC8PYhAjmj4tTwqC4aM4qEEKI36MJQRTwIfA74DMp5d/byDaXUGms5IEfH2Bj3kZmJ87mvpT73K+GAzQt8pN0Pdz4miry00mpqDU1RCXVC8OCcXEMUsKgaCXnGkG8DPwE3CKlTAWw1W3osByrPMa87+dxuOwwjwx/hJvjb3a1SS1jroPVf7IV+bkTJj2jivx0QipqTbYRw2HKakyMs40YlDAoHMW5BKI7cBPwghAiEm0U0WGX4e7K38WCdQswWUy8Ov5VLu9+uatNapnacvhgFhzeCOP/BlfeoxbAdTJaEoYF4+O4JEoJg8KxnFUgbBPTrwKvCiGi0EqG5gsh0oFPpZT/10Y2Op0vs7/kkc2PEOkXyZJJS+gd5KZZThsX+bnxvzBohqstUrQhFbUm3t58hNc3acIwPlEbMShhUDgLe6OY8oBFwCIhRDyaWJwXIcQk4CW0kqOvSymfbXa8F1od6nCgGJhtuxdCiNs4nRTwSSnlMnvueaFkl2Xz4I8PMiRyCC+OfpEu3m76ZWtc5OeWD7TEe4pOQXmtiWXNhGHBuH4MjHLDeiOKDoXTSo4KIfRAFjAByAO2ATOllGmNzlkFrJVSLhNCjAVul1LeKoQIAVKBFLRV29uBoVLKkrPdrzUlRzfmbeTybpfj4a6J7BoX+Zm1CroPdrVFijagvH7E8GM25bVmxidGsmBcnBIGhUNpVcnRVjAMOCilzLYZsRK4HkhrdE4SsND2fh2nq9RdDXwrpSy2XfstMAlY4QxDR0WNckazjiHjSy3pXmA3mP2xKvLTCWguDBOSNGEY0EMJg6JtcaZA9AByG23nAZc1O2c3MA3NDXUjECCECD3LtWes/hJCzAXmAkRHRzvMcLdh+9uwdiF0S4ZbPlRFfjo45bUm3tp0hDc2KWFQuAfnWgdxzmLFUsod52m7pdCa5v6s+4AlQog5wEbgGGC281qklK8Br4HmYjqPPe0HKWH9s7DhWeg7AW56WxX56cCU1WgjhnphmJgUyXwlDAo34FwjiH+e45gExp6n7TygZ6PtKOB4k0akPA5MBRBC+APTpJRlQog8YHSza9ef534dg8ZFfpJnwZSXVJGfDkpZjYm3Nh/mjU2HqVDCoHBDzhXmOqaVbW8D4oQQsWgjgxlo6ToaEEKEAcVSSivwEFpEE8DXwNO24kQAE23HOzZNivzcB2P/qtY4dECaC8PV/TVh6N9dCYPCvbAnF5Mv8GcgWko5VwgRB8RLKdee6zoppVkIMQ+ts9cDb0op9wshHgdSpZRr0EYJz9hWaG8E7rJdWyyEeAJNZAAer5+w7rCoIj8dnrIaE29uOsybm5UwKNoH5w1zFUJ8gBZm+hsp5QAhhA/wk5TSrfJetybM1eWUHIX3pkJpLvz6DUic4mqLFA6kuTBM6t+V+ePiSOoe6GrTFIpWh7n2kVJOF0LMBJBS1gih/B4Oo0mRn8+gl5um+FBcFOsz87n3w90UVRmVMCjaHfYIhNE2apAAtpoQdU61qrOQvR5WzgbvIPjtGohIcLVFCgdhslhZ9HUm/92YTULXAJb9dpiafFa0O+wRiMeAr4CeQojlwJXAHGca1SlQRX46LLnF1cxfuZOdOaXMuiyaR65NwttDZdtVtD/sKTn6rRBiB6dLji7oTCVHnYIq8tNh+WrfCf7y0R6khJdvGcLkS7q52iSF4qKxdyW1N1BiOz9JCIGUcqPzzOqgWK2aMPz8MiTdoGVkVUV+OgS1JgtPf5nOOz8d5ZKoIJbMHEJ0qK+rzVIoWoU9Ya7PoZUc3Q9Ybbvrw1IV9mKug9V/hH0fw2V/gKufAZ3O1VYpHEB2QSXz3t9J2olyfjcilr9MSsDToP62ivaPPSOIG9DWPaiJ6YultgxWzoIjP8L4v8OVC9QCuA7CpzvzePjTfXgadLxxWwrjEiNdbZJC4TDsEYhstEpySiAuhvITWhhrQYYq8tOBqDaaeeyz/azansewmBBemplMtyAfV5ulaAUmk4m8vDxqa2tdbYpT8Pb2JioqCg8P+1P32CMQ1cAuIcT3NBIJKeX8Czexk1GQBe9NsxX5+RD6jnO1RQoHkHGynHnv7+RQQSV3j+3LgnFxGPTKpdTeycvLIyAggJiYGDraUi8pJUVFReTl5REbG2v3dfYIxBrbS3EhNC7yc/sXqshPB0BKyYqtufz98/0EeHvw3h2XcWXfMFebpXAQtbW1HVIcAIQQhIaGUlBQcEHXnVMgbFXhJkgpZ7fGuE5Hxpfw0e0Q2B1mfwIh9iu2wj0przXx0Cd7+WLPCUbGhfHCzcmEB3i52iyFg+mI4lDPxXy2cwqElNIihAgXQnhKKY0XbVlnIvUtLV13t2StPKifesJs7+zJK2Xe+zs5VlrDXybF84dRfdDpOm5HolDUY4/j9AiwWQjxiBDiz/UvJ9vV/pAS1j0Na++BvuNhzlolDu0cKSWv/5jNtFe3YLFKPrxzOH8a3VeJQydCr9eTnJzc8Dpy5AipqanMn69Nwb799tvMmzcPgNWrV5OWlnau5s5LdXU1s2bNYuDAgQwYMIARI0ZQWVkJwBVXXNG6D3MR2DMHcdz20gEBzjWnnWIxwxcLYcc7kDwbpryoivy0c0qqjNy3ajffZ+QzISmS5399CV18PV1tlqKN8fHxYdeuXU32xcTEkJJyZvLT1atXc+2115KUlGR3+2azGYPhdDf80ksvERkZyd69ewHIzMxsiDrasmXLxXyEVmFPqo2/Awgh/KSUVc43qZ1hrNbmG7K+UkV+OghbDxezYOVOiiqN/G1KErdd0TEnLhUXx/r161m0aBFr154uibNlyxbWrFnDhg0bePLJJ/n4448BuOuuuygoKMDX15elS5eSkJDAnDlzCAkJYefOnQwZMoR//vN08c4TJ07Qq1evhu34+PiG9/7+/lRWVvLoo4+yZo0WN1RQUMDEiRN56623eO+991i8eDFGo5HLLruMV155Bb2+lTnApJTnfAGXA2lAjm17EPDK+a5r69fQoUNlm1NZKOXScVI+FiTl1qVtf3+FQzFbrHLxd1ky9sG18qp//CD35pW62iRFG5KWlnbGPp1OJwcNGiQHDRokb7jhBimllOvWrZOTJ0+WUkr51ltvybvuuktKKeVtt90mV61a1XDt2LFjZVZWlpRSyp9//lmOGTOm4bzJkydLs9l8xv127twpw8PD5fDhw+XDDz/ccL2UUvr5+TU5t7S0VA4cOFCmpqbKtLQ0ee2110qj0SillPKPf/yjXLZsmV2fEa2AW4v9qj0upheBq7GFukopdwshRrVOljoA9UV+yvJg+ruqyE87J7+iloUf7GLzwSKuG9Sdp24cQIC3chN2dlpyMdlDZWUlW7Zs4aabbmrYV1d3eq3xTTfd1OLTfXJyMtnZ2XzzzTd89913XHrppfz0008kJiY2OU9KyaxZs1i4cCFDhw5lyZIlbN++nUsvvRSAmpoaIiIiLtju5tiVrE9KmdtsiG2x5zohxCTgJbSSo69LKZ9tdjwaWAZ0sZ3zoJTySyGEB/A6MMRm4ztSymfsuWebcGI3LL9Jy6/0m88gerirLVK0gh8PFLDwg11U1pl5btpAbk7pqVxKilZhtVrp0qXLWcXFz8/vrNf6+/szdepUpk6dik6n48svvzxDIP72t78RFRXF7bffDmiCcdttt/HMM47tJu2JYsoVQlwBSCGEpxDiPiD9fBfZ1lC8DPwKSAJmCiGaz978FfhQSjkYmAG8Ytt/E+AlpRwIDAXuFELE2GGr8zm0Dt6aDDoP+O3XShzaMWaLlX98lcFv3txKsK8na+aNYPql0UocFBdFQEAAFRUVAAQGBhIbG8uqVasArQPfvXv3edvYvHkzJSUlABiNRtLS0prMSQCsXbuWb7/9lsWLFzfsGzduHB999BH5+fkAFBcXc/To0VZ/JnsE4g/AXUAPIA9IBv5kx3XDgINSymypraFYCVzf7BwJ1NdfDEKLlqrf7yeEMAA+gBEot+OezmXPKm3k0CUafvetqgDXjjlWWsP0137mlfWHmJ7SkzXzRtAvUgXpKS6eGTNm8PzzzzN48GAOHTrE8uXLeeONNxg0aBD9+/fns88+O28bhw4d4qqrrmLgwIEMHjyYlJQUpk2b1uScf/7znxw/fpxhw4aRnJzMo48+SlJSEk8++SQTJ07kkksuYcKECZw4caLVn0locxQtHBAiSkqZd5ZjU6SUn5+zYSF+DUySUv7Otn0rcJmUcl6jc7oB3wDBgB8wXkq53eZiehcYB/gCC6WUr7Vwj7nAXIDo6OihjlDMs9JQ5GcEzFiuivy0Y75NO8V9q3Zjtlh5eupArk9W1fwUkJ6efoYrp6PR0mcUQmyXUp4Zt8u5RxDft+TWEULcjjZxfT5aGqc3V6OZwNtSyijgGuBdIYQObfRhAboDscC9QojeZzQm5WtSyhQpZUp4eLgdJl0EVit89X+aOCTdALM/VuLQTqkzW/j75/v5/Tup9Azx4Yv5I5U4KBTn4FyT1AuBb4UQ10gpDwAIIR4CbgGusqPtPKBno+0oTruQ6rkDmAQgpfxJCOENhNnu8ZWU0gTkCyE2AyloqcfbDlXkp8NwpLCKeSt2sO9YOXOuiOGhaxLwMqg60QrFuTirQNiiieqA/wkhbgB+B1wKjJJSltjR9jYgTggRCxxDm4S+pdk5OWhupLeFEIlopU0LbPvHCiHeQ3MxDce+UYvjaFzkZ8LjcMV8tQCunbJm93H+75O96HWC/946lKv7d3W1SQpFu+B8yfq+F0LMAdYDW4BxUkq7qmlIKc1CiHnA12ghrG9KKfcLIR5HW5ixBrgXWCqEWIjmfpojpZRCiJeBt4B9aK6qt6SUey7qE14MTYr8vAaDprfZrRWOo8aouZRWbstlaK9gFs8cTI8uqqiPQmEvZxUIIUQFWqctAC+0J/18ocUASill4NmurUdK+SXwZbN9jzZ6nwZc2cJ1lWihrm1PQaZW5KemRBX5acccOFXBXe/vIOtUJX8a3YeFE/rhoYr6KBQXxLlcTJ0v5i/nF1gxXSvyM+cL6J7saosUF4iUklWpeTy6Zh/+Xgbe+e0wRvVzUgCD3PhqkQAAFpNJREFUQtHBsWsldadAFflp91TWmXn40718tus4V/QJ5cXpyUQEervaLIWiVcTExBAQEIBer8dgMJCamtpm91YCAaeL/HQfrLmVVB2Hdse+Y2XMe38HOcXV3DuhH38a0xe9qtug6CCsW7eOsLC275eUQBRkaeLQdzzc9DZ4nj1HisL9kFKybMsRnv4ygxA/T1b8fjiX9Q51tVmKDsbfP99P2nHHJnNI6h7IY1P6O7RNR3NegRBCRKKl2ZDAcSnlKadb1ZaE94NbV0OvK1SRn3ZGWbWJ+z/azTdppxibEMGimwYR4qeK+ig6FkIIJk6ciBCCO++8k7lz57bZvc8VxZQM/ActR9Ix2+4oIUQp8Ccp5Y42sK9t6G3Puj+FO7H9aAnzV+wkv6KWv05O5I4RsSrJnsJpuPJJf/PmzXTv3p38/HwmTJhAQkICo0a1TcWFc40g3gbulFL+0ninEGI42hqFQf/f3p1HV1Wfaxz/PgwaQAUBg0KYtBSQMBqRaoVapaKgEEAUOiFcbe+qY7VOVK/SouJVS1SWLVobRxBbXHIVEIigXieIEJQ5SBWiDCEgaLiCkPf+sXc0hMMhgZwhyftZi5Vz9t5n/94EyHP2Pnv/3hjW5VxEJSXG395az4Nz19CySQov/fZserT2qU9czdWyZUsAUlNTyczMZNGiRXELiGgXhjcqHw4AZvY+wcR6zsXVtq/3MDp7MRPnrGZAl5N57bpzPRxcjVZcXPzdFOLFxcXMnTuX9PT0uI0f7QhitqTXgGeAjeGy1sCvgDmxLsy5st5dt43rX8xj1/99y4TMdEb19r4NrubbsmULmZmZAOzbt49Ro0YxYMCAuI0f7Ua56yRdRNDDoRXBHdUFwOTwDmnnYm7f/hIeycnn0QXrOLV5I54d25tOJx/2Jn7naoRTTz21Qo2GYuVwczHNBmbHqRbnDrB55zdcN20pi/69neFnpDF+cBcaHuNXZjsXL9GuYmoM3E5wBFHa/Xor8Apwv5l9GfvyXG31xuot3DR9GXv2lfDwiO4M7ZWW6JKcq3WifUg9HdgBnGdmzcysGXAe8CXwUjyKc7XP3n0lTHhtJWOyczm5cQP+59ofezg4lyDRjtfbmdnEsgvMbDNwf9hVzrkqtXH7bq6ZupRlG7/kl33aMm5gZ1Lqe1Mf5xIlWkB8JukW4OnSu6fDu6pH8/1VTc5ViVkfb+LWfwUtPx7/eS8u6npKgityzkULiMuB24A3JZV+BrEFmAmMiHVhrnb45tv9/Pm1lTz3/gZ6tG7CoyN70rppw0SX5Zwj+mWuO4Bbwz/OVbl1W7/mmheWsHrzV/ym76ncfGFHb+rjXBlr1qzh8su/72i5fv16xo8fzw033BCX8Y/omkFJV5rZPyqw3QAgi6Dl6JNmdn+59W2Ap4Em4Ta3ld5jIakb8DfgBKAEOLOi7U5d8vvXhwXc+cpyUurX5R9Xnsl5HVMP/yLnapmOHTuSl5cHwP79+2nVqtV3N87Fw5FeVH4PwXxMhySpLjAZ6E9wg91iSTPDNqOl/ghMN7PHJZ1O0J60naR6wHPAL81smaRmwLdHWKtLIsV79nHnK8uZseRzzmrflKwrenJyY2/q45Lc7Ntg88dVu8+Tu8JF9x9+u1BOTg6nnXYabdu2rdo6ooh2H8RHh1oFtKjAvnsD68xsfbi/aQT3VJQNCCM4QoBg1tgvwsc/Az4ys2UAZlZUgfFcklu1aRe/e2EJ/95WzPXnd+C68zt4Ux/nKmjatGmMHDkyrmNGO4JoAVxIcC9EWQLercC+W3Hg1U4FwFnltrkbmCvpWoIJAC8Il/8QMEmvAycB08zsgfIDSLoauBqgTZs2FSjJJYKZ8fwHGxj/6kqaNKjP8/9xFmef5l37XDVSiXf6sbB3715mzpzJfffdF9dxowXEq8BxZpZXfoWkhRXYd6S3hlbu+Ugg28wekvQj4FlJ6WFdPwbOBHYDOZI+NLOcA3ZmNgWYApCRkVF+3y4J7Py/b7l9xkfM+ngz/X54Eg+N6E7z445NdFnOVSuzZ8+mV69etGhRkZM3VSfaVUxjo6wbVYF9FxDM/loqje9PIZUaCwwI9/mepBSgefjaN81sG4CkWUAvIAdXbeRt/JJrXljC5p3fcPtFnbjq3FOp46eUnKu0qVOnxv30EkSfauNoLQY6SGov6RjgCoJ7KMraAJwPIKkzkAIUAq8D3SQ1DD+w7seBn124JFZSYjzx1nqGP/4uZjD9tz/iN/1O83Bw7gjs3r2befPmMXTo0LiPHbOpMc1sn6RrCH7Z1wWeMrMVksYDuWY2E7gJeELSjQSnn0abmQE7JD1MEDIGzDKz12JVq6s624v3cvNLy3hj9VYu7NKCB4Z1p3FD7/Xt3JFq2LAhRUWJuU4npnMnh/c0zCq37K4yj1cC5xzitc8RXOrqqokP1hdx/bQ8thfvZfzgLvyyT1tv6uNcNeaT67ujtr/EmLxgHZPmr6Vts0bM+PXZpLdqnOiynHNHyQPCHZWtu77hhhfzePeTIob0aMmfM7ty3LH+z8q5msD/J7sj9ubaQn7/Yh679+7ngeHduOyMND+l5FwN4gHhKu3b/SU8PG8tjy/8hI4tjmfyz3vyg9TjE12Wc66KeUC4CjMz3vukiIlzVrOsYCejzmrDXYNO96Y+ztVQPreyOywz491127j8b+8z6skP2LJrD4+N6sm9mV09HJyLsaysLNLT0+nSpQuTJk2K69h+BOEOycx495MiJs1fy+JPd3DyCSmMH9yFERmtPRici4Ply5fzxBNPsGjRIo455hgGDBjAwIED6dChQ1zG94BwBzEz3llXRFbO98Hwp8FduMyDwdVSExdNZPX21VW6z05NO3Fr7+j92FatWkWfPn1o2DDostivXz9efvllbrnlliqt5VA8INx3SoNh0vy15H72fTCMOLM1x9bzYHAu3tLT0xk3bhxFRUU0aNCAWbNmkZGREbfxPSAcZsb/rtvGpPn5fPjZDk5pnMKfhqQzIiPNg8E5OOw7/Vjp3Lkzt956K/379+e4446je/fu1KsXv1/bHhC1WPlgaOnB4FzSGTt2LGPHBpNr33HHHaSlpcVtbA+IWsjMeDt/G5Pmr2XJhi9p2TiFPw9J5zIPBueSztatW0lNTWXDhg3MmDGD9957L25je0DUIpGCYUJmOsPP8GBwLlkNGzaMoqIi6tevz+TJkznxxBPjNrYHRC1gZrwVBsNSDwbnqpW33347YWN7QNRg5YOhVZMG3JvZleFnpHFMPb9H0jkXnQdEDWRmvLm2kEnz88nb6MHgnDsyHhA1SKRguG9oV4b18mBwzlVeTANC0gAgi6Dl6JNmdn+59W2Ap4Em4Ta3hV3oyq5fCdxtZg/GstbqzMxYGAbDMg8G51wViVlASKoLTAb6AwXAYkkzwzajpf4ITDezxyWdTtCetF2Z9X8BZseqxurOzFi4ppBJ89eyrGAnaSc24P6hXRnqweCcqwKxPILoDawzs/UAkqYBgwmOCEoZcEL4uDHwRekKSUOA9UBxDGusliIFw8RhQTDUr+vB4JyrGrH8bdIK2FjmeUG4rKy7gV9IKiA4ergWQFIj4FbgnhjWV+2YGW+s3sLgye9wZfZiior3MnFYVxbc/BMuP7ONh4NzNcyYMWNITU0lPT39u2UvvfQSXbp0oU6dOuTm5sZ0/Fj+RonUe9LKPR8JZJtZGnAx8KykOgTB8Bcz+zrqANLVknIl5RYWFlZJ0cmobDCMyc5lx+69PDCsmweDczXc6NGjmTNnzgHL0tPTmTFjBn379o35+LE8xVQAtC7zPI0yp5BCY4EBAGb2nqQUoDlwFjBc0gMEH2CXSPrGzB4r+2IzmwJMAcjIyCgfPtVeEAxbycrJ56OCnbRu2oAHhnUjs1crDwXn4mjzvfeyZ1XVTvd9bOdOnHzHHVG36du3L59++ukByzp37lyldUQTy4BYDHSQ1B74HLgCGFVumw3A+UC2pM5AClBoZueWbiDpbuDr8uFQk5UGw6T5+Xz8+U7aNG3IA8O7kdnTg8E5Fz8xCwgz2yfpGuB1gktYnzKzFZLGA7lmNhO4CXhC0o0Ep59Gm1mNOxKoKDMjZ1VwxODB4FzyONw7/ZoqpvdBhPc0zCq37K4yj1cC5xxmH3fHpLgkUhoMk3LWsvzzXbRp2pD/Ht6NIR4MzrkE8jupE8jMmL9qK1lhMLRt5sHgnEseHhAJUBoMk+avZcUXQTA8eFl3hvRoST0PBudcaOTIkSxcuJBt27aRlpbGPffcQ9OmTbn22mspLCxk4MCB9OjRg9dffz0m43tAxJGZMW/lFrJy8lnxxS7aNWvIQ5d1Z7AHg3MugqlTp0ZcnpmZGZfxPSDiwMyYu3ILWfPzWbnJg8E5Vz14QMRQ+WBo37wRD4/ozqXdPRicc8nPAyIGSkrCYMjJZ5UHg3OumvKAqEKRguEvl3fnkm4eDM656scDogoEwbCZSfPzWb35K071YHDO1QAeEEchUjBMurwHl3RvSd06keYqdM656sMD4giUlBivr9hMVk4YDCd5MDjnqt6YMWN49dVXSU1NZfny5QDceeedvPLKK9SpU4fU1FSys7Np2bJlTMb38x+VUFJizP54Exc/8jb/+fwS9u4vIeuKHsy7sR9DerbycHDOValI033/4Q9/4KOPPiIvL49BgwYxfvz4mI3vRxAVUFJizFmxmaz5+azZ8hWnndSIrCt6MKibHzE4Vxu8PX0t2zZGbU9Tac1bH8e5I34YdZtI032fcMIJ3z0uLi5Git3vIA+IKEpKjNnLN/NIjgeDcy55jBs3jmeeeYbGjRuzYMGCmI3jARFBaTBk5axl7Zav+UHqcTwysicDu57iweBcLXS4d/rxNmHCBCZMmMB9993HY489xj33xKY7swdEGSUlxqzlm3gkJ9+DwTmX9EaNGsXAgQM9IGIpUjA8OrInF3swOOeSTH5+Ph06dABg5syZdOrUKWZj1fqA2Lh9N2OyF5O/9Ws6eDA455JIpOm+Z82axZo1a6hTpw5t27blr3/9a8zGr/UBcXLjFFo3bcj1F3Tg4vRTqOPB4JxLEpGm+x47dmzcxo/pfRCSBkhaI2mdpNsirG8jaYGkpZI+knRxuLy/pA8lfRx+/Wmsaqxftw5PjT6TQd1aejg451wZMTuCkFQXmAz0BwqAxZJmhn2oS/0RmG5mj0s6naB/dTtgG3CJmX0hKR14HWgVq1qdc84dLJZHEL2BdWa23sz2AtOAweW2MaD0ro/GwBcAZrbUzL4Il68AUiQdG8NanXMOM0t0CTFzJN9bLAOiFbCxzPMCDj4KuBv4haQCgqOHayPsZxiw1Mz2lF8h6WpJuZJyCwsLq6Zq51ytlJKSQlFRUY0MCTOjqKiIlJSUSr0ulh9SRzqhX/4nPxLINrOHJP0IeFZSupmVAEjqAkwEfhZpADObAkwByMjIqHl/q865uElLS6OgoICa+mYzJSWFtLS0Sr0mlgFRALQu8zyN8BRSGWOBAQBm9p6kFKA5sFVSGvAy8Csz+ySGdTrnHPXr16d9+/aJLiOpxPIU02Kgg6T2ko4BrgBmlttmA3A+gKTOQApQKKkJ8Bpwu5m9E8ManXPOHULMAsLM9gHXEFyBtIrgaqUVksZLujTc7CbgKknLgKnAaAtOAF4D/AC4U1Je+Cc1VrU655w7mGrKBzIZGRmWm5ub6DKcc65akfShmWVEXFdTAkJSIfDZUeyiOcH9F8nG66ocr6tyvK7KqYl1tTWzkyKtqDEBcbQk5R4qRRPJ66ocr6tyvK7KqW11ectR55xzEXlAOOeci8gD4ntTEl3AIXhdleN1VY7XVTm1qi7/DMI551xEfgThnHMuIg8I55xzEdXqgJCUImmRpGWSVkiKTefvIySpbthM6dVE11JK0qdhI6c8SUlzZ6KkJpL+KWm1pFXh5I+JrqljmZkA8iTtknRDousCkHRj+G9+uaSp4TxoCSfp+rCmFYn+WUl6StJWScvLLGsqaZ6k/PDriUlS12Xhz6xEUpVd7lqrAwLYA/zUzLoDPYABkvokuKayrieYpiTZnGdmPZLsevAsYI6ZdQK6kwQ/NzNbE/6cegBnALsJJqBMKEmtgOuADDNLB+oSzJWWUGFzsKsIesl0BwZJ6pDAkrIJJxMt4zYgx8w6ADnh83jL5uC6lgNDgbeqcqBaHRAW+Dp8Wj/8kxSf2oez2Q4Enkx0LclO0glAX+DvAGa218y+TGxVBzkf+MTMjuZu/6pUD2ggqR7QkINnWk6EzsD7ZrY7nMvtTSAzUcWY2VvA9nKLBwNPh4+fBobEtSgi12Vmq8xsTVWPVasDAr47jZMHbAXmmdkHia4pNAm4BShJdCHlGDA37BV+daKLCZ0KFAL/CE/JPSmpUaKLKucKggkpE87MPgceJJhNeROw08zmJrYqIHgX3FdSM0kNgYs5sGVAMmhhZpsAwq81ehLRWh8QZrY/PAWQBvQOD3MTStIgYKuZfZjoWiI4x8x6ARcBv5PUN9EFEbwb7gU8bmY9gWISc+gfUTjd/aXAS4muBSA8bz4YaA+0BBpJ+kViqwreBRM0CJsHzAGWAfsSWlQtV+sDolR4SmIhB5/bS4RzgEslfUrQy/unkp5LbEmB0l7hZraV4Hx678RWBATNqQrKHP39kyAwksVFwBIz25LoQkIXAP82s0Iz+xaYAZyd4JoAMLO/m1kvM+tLcBolP9E1lbNF0ikA4detCa4npmp1QEg6KWxOhKQGBP9xVie2KjCz280szczaEZyaeMPMEv4OT1IjSceXPiZoBbs8+qtiz8w2AxsldQwXnQ+sTGBJ5Y0kSU4vhTYAfSQ1lCSCn1fCP9QHKO37IqkNwYeuyfRzg6Dp2a/Dx78GXklgLTEXy5aj1cEpwNOS6hKE5XQzS5pLSpNQC+Dl4HcK9YAXzGxOYkv6zrXA8+HpnPXAlQmuB4DwXHp/4DeJrqWUmX0g6Z/AEoJTOEtJnikk/iWpGfAt8Dsz25GoQiRNBX4CNJdUAPwXcD8wXdJYgqC9LEnq2g48CpwEvCYpz8wuPOqxfKoN55xzkdTqU0zOOecOzQPCOedcRB4QzjnnIvKAcM45F5EHhHPOuYg8IJyrBEl3S7pZ0nhJF4TLFh5uBk1JN4SXvJY+n1V6D45zycoDwrkjYGZ3mdn8SrzkBoJJ8Upff3ESTijo3AE8IJw7DEnjJK2RNB/oGC7LljQ8wraPS8ot219E0nUEcx4tkLQgXPappObh49+HPRCWl/ZAkNQu7GvxRLivueHd/s7FjQeEc1FIOoNgupOeBFM/nHmYl4wL+2R0A/pJ6mZmjxBMp32emZ0XYf9XAmcBfYCrJPUMV3cAJptZF+BLYFgVfVvOVYgHhHPRnQu8HPYo2EUwF080IyQtIZi+ogtw+mG2/3G4/+KwN8mMcEwIJtTLCx9/CLQ7km/AuSNV2+dicq4iKjQfjaT2wM3AmWa2Q1I2cLhWnoqybk+Zx/sBP8Xk4sqPIJyL7i0gU1KDcCbbS6JsewJBL4qdkloQTPNd6ivg+EPsf0g4s2ojgg5qb1dN6c4dHT+CcC4KM1si6UUgD/iMKL+8zWyZpKXACoIZZd8ps3oKMFvSprKfQ4T7zwYWhYueNLOlktpV6Tfi3BHw2Vydc85F5KeYnHPOReQB4ZxzLiIPCOeccxF5QDjnnIvIA8I551xEHhDOOeci8oBwzjkX0f8DeyLbW+Th8GQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for i, v in enumerate(dilation_scores_dict.values()):\n", " plt.plot(dilation_choices_filt, v, label=filter_choices[i])\n", " plt.legend(title=\"Filter Size\")\n", " plt.title(\"\")\n", " plt.xlabel(\"dilation\")\n", " plt.ylabel(\"100 Kernel Accuracy\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finished Run 1 Score: 0.988 Time: 32.032\n" ] } ], "source": [ "times, scores = timing_test_dilation(1, np.array((9,)), stride=5, num_kernels=500, seq_length=32000, dilation=8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Hypothesis: Different dilations are extracting data about different frequency ranges, the most important frequencies will yield the highest accuracy, but ensembling those will plateau because it needs data about other frequencies as well (even though in isolation they are less predictive)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from scipy.stats import skewnorm" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a=6\n", "data= skewnorm.rvs(a, size=1000)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 31., 192., 252., 178., 135., 110., 48., 34., 14., 6.]),\n", " array([-0.40513973, -0.06437618, 0.27638737, 0.61715092, 0.95791447,\n", " 1.29867802, 1.63944157, 1.98020512, 2.32096867, 2.66173222,\n", " 3.00249577]),\n", " )" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAPW0lEQVR4nO3db4xcV33G8e/TJA1Vg5oEOyF1XBaQqzag1qSrNCVVlTaoBEfCQS1V8gIMSmVQEwkk3hiQgFaKGqoCEmqbyjQRRqKBlD+N24S2waRCSE3CJjWJjUnjgEuMrXiBNn+ElDbm1xdzTYfNrGe8s7sze/h+pNHcOffcub89Xj9758ydO6kqJElt+alJFyBJWn6GuyQ1yHCXpAYZ7pLUIMNdkhp0+qQLAFi3bl3NzMxMugxJWlMeeOCB71bV+kHrpiLcZ2ZmmJubm3QZkrSmJPnPxdY5LSNJDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoOGhnuSjUnuSXIgyf4k7+jaP5DkO0n2drctfdu8O8nBJI8kee1K/gCSpOcb5UNMzwHvqqoHk7wQeCDJ3d26j1TVn/d3TnIRcA3wCuDngS8m+cWqOr6chUuSFjc03KvqKHC0W346yQFgw0k22Qp8qqqeBb6V5CBwCfBvy1CvgJkdd05s34duumpi+5Y0ulOac08yA7wKuK9ruiHJQ0luTXJO17YBeLxvs8MM+GOQZHuSuSRz8/Pzp1y4JGlxI4d7krOAzwLvrKqngJuBlwOb6R3Zf+hE1wGbP++7/KpqZ1XNVtXs+vUDr3sjSVqikcI9yRn0gv2TVfU5gKp6oqqOV9UPgY/Rm3qB3pH6xr7NLwSOLF/JkqRhRjlbJsAtwIGq+nBf+wV93d4A7OuWdwPXJDkzyUuBTcD9y1eyJGmYUc6WuQx4E/Bwkr1d23uAa5Nspjflcgh4G0BV7U9yO/B1emfaXO+ZMpK0ukY5W+YrDJ5Hv+sk29wI3DhGXZKkMfgJVUlqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDhoZ7ko1J7klyIMn+JO/o2s9NcneSR7v7c7r2JPlokoNJHkpy8Ur/EJKkHzfKkftzwLuq6peBS4Hrk1wE7AD2VNUmYE/3GOB1wKbuth24edmrliSd1NBwr6qjVfVgt/w0cADYAGwFdnXddgFXd8tbgU9Uz73A2UkuWPbKJUmLOqU59yQzwKuA+4Dzq+oo9P4AAOd13TYAj/dtdrhrW/hc25PMJZmbn58/9colSYsaOdyTnAV8FnhnVT11sq4D2up5DVU7q2q2qmbXr18/ahmSpBGMFO5JzqAX7J+sqs91zU+cmG7p7o917YeBjX2bXwgcWZ5yJUmjGOVsmQC3AAeq6sN9q3YD27rlbcAdfe1v7s6auRR48sT0jSRpdZw+Qp/LgDcBDyfZ27W9B7gJuD3JdcC3gTd26+4CtgAHgR8Ab13WiiVJQw0N96r6CoPn0QGuGNC/gOvHrEuSNAY/oSpJDRplWkaLmNlx56RLkKSBPHKXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIa5LVldEomdT2dQzddNZH9SmuVR+6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkho0NNyT3JrkWJJ9fW0fSPKdJHu725a+de9OcjDJI0leu1KFS5IWN8qR+8eBKwe0f6SqNne3uwCSXARcA7yi2+avkpy2XMVKkkYzNNyr6svA90d8vq3Ap6rq2ar6FnAQuGSM+iRJSzDOnPsNSR7qpm3O6do2AI/39TnctUmSVtFSw/1m4OXAZuAo8KGuPQP61qAnSLI9yVySufn5+SWWIUkaZEnhXlVPVNXxqvoh8DH+f+rlMLCxr+uFwJFFnmNnVc1W1ez69euXUoYkaRFLCvckF/Q9fANw4kya3cA1Sc5M8lJgE3D/eCVKkk7V6cM6JLkNuBxYl+Qw8H7g8iSb6U25HALeBlBV+5PcDnwdeA64vqqOr0zpkqTFDA33qrp2QPMtJ+l/I3DjOEVJksbjJ1QlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWrQ0PPcpWkws+POie370E1XTWzf0lJ55C5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yO9QlYaY1Pe3+t2tGodH7pLUIMNdkhpkuEtSgwx3SWrQ0HBPcmuSY0n29bWdm+TuJI929+d07Uny0SQHkzyU5OKVLF6SNNgoR+4fB65c0LYD2FNVm4A93WOA1wGbutt24OblKVOSdCqGhntVfRn4/oLmrcCubnkXcHVf+yeq517g7CQXLFexkqTRLHXO/fyqOgrQ3Z/XtW8AHu/rd7hrkyStouV+QzUD2mpgx2R7krkkc/Pz88tchiT9ZFtquD9xYrqluz/WtR8GNvb1uxA4MugJqmpnVc1W1ez69euXWIYkaZClhvtuYFu3vA24o6/9zd1ZM5cCT56YvpEkrZ6h15ZJchtwObAuyWHg/cBNwO1JrgO+Dbyx634XsAU4CPwAeOsK1CxJGmJouFfVtYusumJA3wKuH7coSdJ4/ISqJDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ16PRxNk5yCHgaOA48V1WzSc4FPg3MAIeAP6iq/xqvTEnSqViOI/ffrqrNVTXbPd4B7KmqTcCe7rEkaRWtxLTMVmBXt7wLuHoF9iFJOolxw72Af0nyQJLtXdv5VXUUoLs/b9CGSbYnmUsyNz8/P2YZkqR+Y825A5dV1ZEk5wF3J/nGqBtW1U5gJ8Ds7GyNWYfUnJkdd05kv4duumoi+9XyGuvIvaqOdPfHgM8DlwBPJLkAoLs/Nm6RkqRTs+RwT/KzSV54Yhn4XWAfsBvY1nXbBtwxbpGSpFMzzrTM+cDnk5x4nr+tqn9K8lXg9iTXAd8G3jh+mZKkU7HkcK+qbwK/OqD9e8AV4xQlSRqPn1CVpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalB415bRlJjJnVNG/C6NsvJI3dJatCaP3Kf5FGGJE0rj9wlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIatOavCimpHZO6ymuL15H3yF2SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yFMhJf3Em9QpmLByp2F65C5JDVqxcE9yZZJHkhxMsmOl9iNJer4VCfckpwF/CbwOuAi4NslFK7EvSdLzrdSR+yXAwar6ZlX9D/ApYOsK7UuStMBKvaG6AXi87/Fh4Nf7OyTZDmzvHj6T5JFFnmsd8N1lr3BlrbWa11q9YM2rYa3VC2uw5nxwrJpfstiKlQr3DGirH3tQtRPYOfSJkrmqml2uwlbDWqt5rdUL1rwa1lq9YM39Vmpa5jCwse/xhcCRFdqXJGmBlQr3rwKbkrw0yU8D1wC7V2hfkqQFVmRapqqeS3ID8M/AacCtVbV/iU83dOpmCq21mtdavWDNq2Gt1QvW/COpquG9JElrip9QlaQGGe6S1KCpC/ck5ya5O8mj3f05i/Q7nmRvd1v1N2uHXV4hyZlJPt2tvy/JzGrXOKCmYTW/Jcl837j+4STq7Kvn1iTHkuxbZH2SfLT7eR5KcvFq1zigpmE1X57kyb4xft9q17igno1J7klyIMn+JO8Y0GeqxnnEmqdmnJO8IMn9Sb7W1fvHA/osf15U1VTdgD8DdnTLO4APLtLvmQnWeBrwGPAy4KeBrwEXLejzR8Bfd8vXAJ+e8LiOUvNbgL+Y9O9AXz2/BVwM7Ftk/RbgC/Q+V3EpcN8aqPly4B8nXWdfPRcAF3fLLwT+Y8DvxVSN84g1T804d+N2Vrd8BnAfcOmCPsueF1N35E7vMgW7uuVdwNUTrGUxo1xeof/n+AxwRZJBH+5aLWvukhBV9WXg+yfpshX4RPXcC5yd5ILVqW6wEWqeKlV1tKoe7JafBg7Q+4R5v6ka5xFrnhrduD3TPTyjuy08k2XZ82Iaw/38qjoKvX9E4LxF+r0gyVySe5Os9h+AQZdXWPjL9aM+VfUc8CTwolWpbrBRagb4ve6l92eSbBywfpqM+jNNm9/oXqJ/IckrJl3MCd1UwKvoHVn2m9pxPknNMEXjnOS0JHuBY8DdVbXoGC9XXkzkyzqSfBF48YBV7z2Fp/mFqjqS5GXAl5I8XFWPLU+FQw29vMKIfVbTKPX8A3BbVT2b5O30jiR+Z8UrW7ppG+NRPAi8pKqeSbIF+Htg04RrIslZwGeBd1bVUwtXD9hk4uM8pOapGueqOg5sTnI28Pkkr6yq/vdlln2MJ3LkXlWvqapXDrjdATxx4iVfd39skec40t1/E/hXen+9V8sol1f4UZ8kpwM/x2Rfrg+tuaq+V1XPdg8/BvzaKtW2VGvuMhdV9dSJl+hVdRdwRpJ1k6wpyRn0QvKTVfW5AV2mbpyH1TyN49zV8t/08urKBauWPS+mcVpmN7CtW94G3LGwQ5JzkpzZLa8DLgO+vmoVjnZ5hf6f4/eBL1X3bsmEDK15wTzq6+nNZU6z3cCbu7M5LgWePDGlN62SvPjEXGqSS+j9H/zeBOsJcAtwoKo+vEi3qRrnUWqepnFOsr47YifJzwCvAb6xoNvy58Wk30ke8M7yi4A9wKPd/bld+yzwN93yq4GH6Z3x8TBw3QTq3ELvXfrHgPd2bX8CvL5bfgHwd8BB4H7gZVMwtsNq/lNgfzeu9wC/NOF6bwOOAv9L78jmOuDtwNu79aH3pTCPdb8Hs1MwxsNqvqFvjO8FXj3hen+T3sv/h4C93W3LNI/ziDVPzTgDvwL8e1fvPuB9XfuK5oWXH5CkBk3jtIwkaUyGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWrQ/wEbxy29oDKDngAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(data)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from scipy.stats import skewnorm\n", "#dilation = 2 ** np.random.uniform(0, np.log2((input_length - 1) // (length - 1)))\n", "def dilation_strategy(num_kernels, input_length, max_length):\n", " max_exponent= np.log10((input_length - 1) // (max_length - 1))\n", " dist = skewnorm.rvs(10, size=num_kernels)\n", " clean_dist = [d for d in dist if d >= 0 and d < max_exponent]\n", " dilations = [int(10**d) for d in clean_dist]\n", " #rint(dilations)\n", " return np.array(dilations[:num_kernels], np.int32)\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dilations = dilation_strategy(10000,32000, 9)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 2 2 3 ... 4 1 96]\n" ] } ], "source": [ "print(dilations)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from collections import Counter" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "c = Counter(dilations)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "873" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c[3]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1,\n", " 2,\n", " 3,\n", " 4,\n", " 5,\n", " 6,\n", " 7,\n", " 8,\n", " 9,\n", " 10,\n", " 12,\n", " 11,\n", " 13,\n", " 14,\n", " 15,\n", " 18,\n", " 17,\n", " 16,\n", " 20,\n", " 19,\n", " 21,\n", " 24,\n", " 22,\n", " 28,\n", " 25,\n", " 26,\n", " 23,\n", " 37,\n", " 30,\n", " 32,\n", " 33,\n", " 34,\n", " 27,\n", " 31,\n", " 35,\n", " 29,\n", " 44,\n", " 39,\n", " 49,\n", " 42,\n", " 54,\n", " 47,\n", " 36,\n", " 41,\n", " 40,\n", " 53,\n", " 43,\n", " 70,\n", " 51,\n", " 52]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted(c, key=lambda x: c[x], reverse=True)[:50]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3995" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dilations.max()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dilations[1]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEACAYAAABfxaZOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAT7klEQVR4nO3dcayd9X3f8fenuKQN22JDLwjZlqCKlYRMCqFXQBtp6uLUGDLFaAubo2p4yJrXiXXtNGmDaZI1CBJI00iRFjoveJioC3FZMryGlVlOUFVpEExgNECRb0mK78zwbWzoWtRUZt/9cX9ODubee86xr4+xf++XdHSe5/v8nvP8np+OPs9zn/Occ1NVSJL68BNnugOSpMkx9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOjJS6Cf5Z0leSPLdJF9J8lNJLk/yVJIDSb6a5PzW9n1tfqYtv2zgdW5v9ZeTXHd6dkmStJihoZ9kNfBPgemq+uvAecBm4B7g3qpaBxwFtrZVtgJHq+qDwL2tHUmuaOt9FNgIfDHJecu7O5KkpYx6eWcF8NNJVgDvB14DPgk80pbvAm5s05vaPG35+iRp9Yer6odV9T1gBrj61HdBkjSqoaFfVf8b+LfAq8yH/ZvAM8AbVXWsNZsFVrfp1cDBtu6x1v6iwfoC60iSJmDFsAZJVjF/ln458Abw28D1CzQ9/nsOWWTZYvUTt7cN2AZwwQUX/NyHP/zhYV2UJA145pln/qSqphZaNjT0gU8B36uqOYAkXwN+AViZZEU7m18DHGrtZ4G1wGy7HPQB4MhA/bjBdX6kqnYAOwCmp6dr//79I3RRknRckj9ebNko1/RfBa5N8v52bX498CLwLeCzrc0W4NE2vafN05Z/s+Z/1W0PsLnd3XM5sA749rg7I0k6eUPP9KvqqSSPAN8BjgHPMn8m/g3g4SSfb7UH2ioPAF9OMsP8Gf7m9jovJNnN/AHjGHBrVb29zPsjSVpC3ss/rezlHUkaX5Jnqmp6oWV+I1eSOmLoS1JHDH1J6oihL0kdMfQlqSOjfDnrrHXZbd84011Q575/96fPdBekd/BMX5I6YuhLUkcMfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6oihL0kdGRr6ST6U5LmBx58m+fUkFybZm+RAe17V2ifJfUlmkjyf5KqB19rS2h9IsmXxrUqSToehoV9VL1fVlVV1JfBzwFvA14HbgH1VtQ7Y1+YBrgfWtcc24H6AJBcC24FrgKuB7ccPFJKkyRj38s564I+q6o+BTcCuVt8F3NimNwEP1bwngZVJLgWuA/ZW1ZGqOgrsBTae8h5IkkY2buhvBr7Spi+pqtcA2vPFrb4aODiwzmyrLVaXJE3IyKGf5HzgM8BvD2u6QK2WqJ+4nW1J9ifZPzc3N2r3JEkjGOdM/3rgO1X1ept/vV22oT0fbvVZYO3AemuAQ0vU36GqdlTVdFVNT01NjdE9SdIw44T+5/jxpR2APcDxO3C2AI8O1G9ud/FcC7zZLv88DmxIsqp9gLuh1SRJEzLS/8hN8n7gl4B/NFC+G9idZCvwKnBTqz8G3ADMMH+nzy0AVXUkyZ3A063dHVV15JT3QJI0spFCv6reAi46ofYD5u/mObFtAbcu8jo7gZ3jd1OStBz8Rq4kdcTQl6SOGPqS1BFDX5I6YuhLUkcMfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6oihL0kdMfQlqSOGviR1xNCXpI6MFPpJViZ5JMkfJnkpyc8nuTDJ3iQH2vOq1jZJ7ksyk+T5JFcNvM6W1v5Aki2Lb1GSdDqMeqb/G8DvVtWHgY8BLwG3Afuqah2wr80DXA+sa49twP0ASS4EtgPXAFcD248fKCRJkzE09JP8NeBvAA8AVNVfVtUbwCZgV2u2C7ixTW8CHqp5TwIrk1wKXAfsraojVXUU2AtsXNa9kSQtaZQz/Z8F5oD/lOTZJF9KcgFwSVW9BtCeL27tVwMHB9afbbXF6pKkCRkl9FcAVwH3V9XHgT/nx5dyFpIFarVE/Z0rJ9uS7E+yf25uboTuSZJGNUrozwKzVfVUm3+E+YPA6+2yDe358ED7tQPrrwEOLVF/h6raUVXTVTU9NTU1zr5IkoYYGvpV9X+Ag0k+1ErrgReBPcDxO3C2AI+26T3Aze0unmuBN9vln8eBDUlWtQ9wN7SaJGlCVozY7leB30pyPvAKcAvzB4zdSbYCrwI3tbaPATcAM8BbrS1VdSTJncDTrd0dVXVkWfZCkjSSkUK/qp4DphdYtH6BtgXcusjr7AR2jtNBSdLy8Ru5ktQRQ1+SOmLoS1JHDH1J6oihL0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSRwx9SeqIoS9JHTH0Jakjhr4kdcTQl6SOGPqS1BFDX5I6YuhLUkdGCv0k30/yB0meS7K/1S5MsjfJgfa8qtWT5L4kM0meT3LVwOtsae0PJNlyenZJkrSYcc70/2ZVXVlVx/9B+m3AvqpaB+xr8wDXA+vaYxtwP8wfJIDtwDXA1cD24wcKSdJknMrlnU3Arja9C7hxoP5QzXsSWJnkUuA6YG9VHamqo8BeYOMpbF+SNKZRQ7+A/5HkmSTbWu2SqnoNoD1f3OqrgYMD68622mL1d0iyLcn+JPvn5uZG3xNJ0lArRmz3iao6lORiYG+SP1yibRao1RL1dxaqdgA7AKanp9+1XJJ08kY606+qQ+35MPB15q/Jv94u29CeD7fms8DagdXXAIeWqEuSJmRo6Ce5IMlfPT4NbAC+C+wBjt+BswV4tE3vAW5ud/FcC7zZLv88DmxIsqp9gLuh1SRJEzLK5Z1LgK8nOd7+P1fV7yZ5GtidZCvwKnBTa/8YcAMwA7wF3AJQVUeS3Ak83drdUVVHlm1PJElDDQ39qnoF+NgC9R8A6xeoF3DrIq+1E9g5fjclScvBb+RKUkcMfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6oihL0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSRwx9SerIyKGf5Lwkzyb5nTZ/eZKnkhxI8tUk57f6+9r8TFt+2cBr3N7qLye5brl3RpK0tHHO9H8NeGlg/h7g3qpaBxwFtrb6VuBoVX0QuLe1I8kVwGbgo8BG4ItJzju17kuSxjFS6CdZA3wa+FKbD/BJ4JHWZBdwY5ve1OZpy9e39puAh6vqh1X1PWAGuHo5dkKSNJpRz/S/APwL4P+1+YuAN6rqWJufBVa36dXAQYC2/M3W/kf1BdaRJE3A0NBP8reAw1X1zGB5gaY1ZNlS6wxub1uS/Un2z83NDeueJGkMo5zpfwL4TJLvAw8zf1nnC8DKJCtamzXAoTY9C6wFaMs/ABwZrC+wzo9U1Y6qmq6q6ampqbF3SJK0uKGhX1W3V9WaqrqM+Q9iv1lVvwx8C/hsa7YFeLRN72nztOXfrKpq9c3t7p7LgXXAt5dtTyRJQ60Y3mRR/xJ4OMnngWeBB1r9AeDLSWaYP8PfDFBVLyTZDbwIHANuraq3T2H7kqQxjRX6VfUE8ESbfoUF7r6pqr8Ablpk/buAu8btpCRpefiNXEnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6oihL0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSRwx9SeqIoS9JHRka+kl+Ksm3k/yvJC8k+TetfnmSp5IcSPLVJOe3+vva/ExbftnAa93e6i8nue507ZQkaWGjnOn/EPhkVX0MuBLYmORa4B7g3qpaBxwFtrb2W4GjVfVB4N7WjiRXMP9P0j8KbAS+mOS85dwZSdLShoZ+zfuzNvuT7VHAJ4FHWn0XcGOb3tTmacvXJ0mrP1xVP6yq7wEzLPCP1SVJp89I1/STnJfkOeAwsBf4I+CNqjrWmswCq9v0auAgQFv+JnDRYH2BdSRJEzBS6FfV21V1JbCG+bPzjyzUrD1nkWWL1d8hybYk+5Psn5ubG6V7kqQRjXX3TlW9ATwBXAusTLKiLVoDHGrTs8BagLb8A8CRwfoC6wxuY0dVTVfV9NTU1DjdkyQNMcrdO1NJVrbpnwY+BbwEfAv4bGu2BXi0Te9p87Tl36yqavXN7e6ey4F1wLeXa0ckScOtGN6ES4Fd7U6bnwB2V9XvJHkReDjJ54FngQda+weALyeZYf4MfzNAVb2QZDfwInAMuLWq3l7e3ZEkLWVo6FfV88DHF6i/wgJ331TVXwA3LfJadwF3jd9NSdJy8Bu5ktQRQ1+SOmLoS1JHDH1J6oihL0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSRwx9SeqIoS9JHTH0Jakjhr4kdcTQl6SOGPqS1BFDX5I6Mso/Rl+b5FtJXkryQpJfa/ULk+xNcqA9r2r1JLkvyUyS55NcNfBaW1r7A0m2LLZNSdLpMcqZ/jHgn1fVR4BrgVuTXAHcBuyrqnXAvjYPcD2wrj22AffD/EEC2A5cw/z/1t1+/EAhSZqMoaFfVa9V1Xfa9P8FXgJWA5uAXa3ZLuDGNr0JeKjmPQmsTHIpcB2wt6qOVNVRYC+wcVn3RpK0pLGu6Se5DPg48BRwSVW9BvMHBuDi1mw1cHBgtdlWW6wuSZqQkUM/yV8B/gvw61X1p0s1XaBWS9RP3M62JPuT7J+bmxu1e5KkEYwU+kl+kvnA/62q+lorv94u29CeD7f6LLB2YPU1wKEl6u9QVTuqarqqpqempsbZF0nSEKPcvRPgAeClqvp3A4v2AMfvwNkCPDpQv7ndxXMt8Ga7/PM4sCHJqvYB7oZWkyRNyIoR2nwC+PvAHyR5rtX+FXA3sDvJVuBV4Ka27DHgBmAGeAu4BaCqjiS5E3i6tbujqo4sy15IkkYyNPSr6vdZ+Ho8wPoF2hdw6yKvtRPYOU4HJUnLx2/kSlJHDH1J6oihL0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSRwx9SeqIoS9JHTH0Jakjhr4kdcTQl6SOGPqS1BFDX5I6YuhLUkcMfUnqyCj/GH1nksNJvjtQuzDJ3iQH2vOqVk+S+5LMJHk+yVUD62xp7Q8k2bLQtiRJp9coZ/oPAhtPqN0G7KuqdcC+Ng9wPbCuPbYB98P8QQLYDlwDXA1sP36gkCRNztDQr6rfA46cUN4E7GrTu4AbB+oP1bwngZVJLgWuA/ZW1ZGqOgrs5d0HEknSaXay1/QvqarXANrzxa2+Gjg40G621RarS5ImaLk/yM0CtVqi/u4XSLYl2Z9k/9zc3LJ2TpJ6d7Kh/3q7bEN7Ptzqs8DagXZrgENL1N+lqnZU1XRVTU9NTZ1k9yRJCznZ0N8DHL8DZwvw6ED95nYXz7XAm+3yz+PAhiSr2ge4G1pNkjRBK4Y1SPIV4BeBn0kyy/xdOHcDu5NsBV4FbmrNHwNuAGaAt4BbAKrqSJI7gadbuzuq6sQPh6VzzmW3feO0b+P7d3/6tG9D546hoV9Vn1tk0foF2hZw6yKvsxPYOVbvJEnLym/kSlJHDH1J6oihL0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSRwx9SeqIoS9JHRn62zuS3ttO5Ufd/LG2/nimL0kdMfQlqSOGviR1xNCXpI74Qa7UsVE/BPYD33OHZ/qS1JGJn+kn2Qj8BnAe8KWqunvSfZA0nmF/EfiXwNljoqGf5Dzg3wO/BMwCTyfZU1UvTrIfkpbXUgcFDwjvLZM+078amKmqVwCSPAxsAgx96Rzll8feWyYd+quBgwPzs8A1E+6DpLPEqRwwFtP7gWTSoZ8FavWOBsk2YFub/bMkLwMfAN48Yb1Raj8D/MlJ93Y0C/Vjudcdpd1ibcapn1g7V8dzlLZLLT/Z9+NCtXNlTM+a92juGdLL0ZzsmE7qPbpu0bWqamIP4OeBxwfmbwduH2G9HSdTA/ZPYJ/e1Y/lXneUdou1Gae+wPidk+M5Stullp/s+/FcHtOe3qOnMqZn8j16/DHpWzafBtYluTzJ+cBmYM8I6/23U6idbqeyzVHXHaXdYm3GqZ9YO1fHc5S2Sy0/lffjuTqmPb1HT2W7Z/I9CkDaUWFiktwAfIH5WzZ3VtVdp3Fb+6tq+nS9fm8cz+XnmC4vx3O4id+nX1WPAY9NaHM7JrSdXjiey88xXV6O5xATP9OXJJ05/gyDJHXE0Jekjhj6ktSRbkI/yQVJdiX5j0l++Uz351yQ5GeTPJDkkTPdl3NBkhvb+/PRJBvOdH/OBUk+kuQ3kzyS5B+f6f68F5zVoZ9kZ5LDSb57Qn1jkpeTzCS5rZX/NvBIVf1D4DMT7+xZYpwxrapXqmrrmenp2WHM8fyv7f35D4C/dwa6e1YYc0xfqqpfAf4u4K2cnOWhDzwIbBwsDPyS5/XAFcDnklwBrOHHv/vz9gT7eLZ5kNHHVMM9yPjj+a/bci3sQcYY0ySfAX4f2DfZbr43ndWhX1W/Bxw5ofyjX/Ksqr8Ejv+S5yzzwQ9n+X6fTmOOqYYYZzwz7x7gv1fVdybd17PFuO/RqtpTVb8AeFmXczP8Fvolz9XA14C/k+R+ztxXt89WC45pkouS/Cbw8SS3n5munZUWe4/+KvAp4LNJfuVMdOwstth79BeT3JfkPzC5L4W+p52L/yN3wV/yrKo/B26ZdGfOEYuN6Q8Aw2l8i43nfcB9k+7MOWKxMX0CeGKyXXlvOxfP9GeBtQPza4BDZ6gv5wrHdHk5nsvPMR3RuRj6J/tLnlqcY7q8HM/l55iO6KwO/SRfAf4n8KEks0m2VtUx4J8AjwMvAbur6oUz2c+ziWO6vBzP5eeYnhp/cE2SOnJWn+lLksZj6EtSRwx9SeqIoS9JHTH0Jakjhr4kdcTQl6SOGPqS1BFDX5I68v8BOs0oroIFb8EAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.xscale('log',basex=10)\n", "plt.hist(dilations,bins=50);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@njit\n", "def generate_kernels_dilation_strategy(input_length, num_kernels, candidate_lengths=np.array((7, 9, 11)), stride=5, dilations=dilations):\n", " # initialise kernel parameters\n", " strides = np.ones(num_kernels, dtype = np.int32) * stride\n", " weights = np.zeros((num_kernels, candidate_lengths.max())) # see note\n", " lengths = np.zeros(num_kernels, dtype = np.int32) # see note\n", " biases = np.zeros(num_kernels)\n", " paddings = np.zeros(num_kernels, dtype = np.int32)\n", " # note: only the first *lengths[i]* values of *weights[i]* are used\n", " for i in range(num_kernels):\n", " length = np.random.choice(candidate_lengths)\n", " _weights = np.random.normal(0, 1, length)\n", " bias = np.random.uniform(-1, 1)\n", " padding = ((length - 1) * dilations[i]) // 2 if np.random.randint(2) == 1 else 0\n", " weights[i, :length] = _weights - _weights.mean()\n", " lengths[i], biases[i], paddings[i] = length, bias, padding\n", " return weights, lengths, biases, dilations, paddings, strides\n", " " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@njit(parallel = True, fastmath = True)\n", "def apply_kernels(X, kernels):\n", " weights, lengths, biases, dilations, paddings, strides = kernels\n", " num_examples = len(X)\n", " num_kernels = len(weights)\n", " # initialise output\n", " _X = np.zeros((num_examples, num_kernels * 2)) # 2 features per kernel\n", " for i in prange(num_examples):\n", " for j in range(num_kernels):\n", " _X[i, (j * 2):((j * 2) + 2)] = \\\n", " apply_kernel(X[i], weights[j][:lengths[j]], lengths[j], biases[j], dilations[j], paddings[j], strides[j])\n", " return _X" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def timing_test_dilation_strategy(runs, candidate_lengths, stride, num_kernels, seq_length, show_progress=True):\n", " times, scores = [],[]\n", " for i in range(runs):\n", " dilations = simple_dilation_strategy(num_kernels)\n", " kernels = generate_kernels_dilation_strategy(seq_length, num_kernels, candidate_lengths, stride, dilations)\n", " start = time.time()\n", " x_train_tfm = apply_kernels(np_x_train, kernels)\n", " x_valid_tfm = apply_kernels(np_x_valid, kernels)\n", " classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 7), normalize=True)\n", " classifier.fit(x_train_tfm, np_y_train)\n", " score = classifier.score(x_valid_tfm, np_y_valid)\n", " t = time.time()-start\n", " scores.append(score)\n", " times.append(t)\n", " if(show_progress): print(\"Finished Run\", i+1, \"Score:\", round(score, 3), \"Time:\", round(t,3))\n", " return times, scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finished Run 1 Score: 0.965 Time: 68.379\n" ] }, { "data": { "text/plain": [ "([68.37943172454834], [0.9648894668400521])" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "timing_test_dilation_strategy(1, np.array((7,9,11,)), stride=5, num_kernels=1000, seq_length=32000)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 2 }