Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save oguiza/26020067f499d48dc52e5bcb8f5f1c57 to your computer and use it in GitHub Desktop.
Save oguiza/26020067f499d48dc52e5bcb8f5f1c57 to your computer and use it in GitHub Desktop.
UCR_Time_Series_Classification_Univariate_Datasets.ipynb
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# UEA & UCR Time Series Classification Univariate Datasets*: Earthquakes\n\n*A. Bagnall, J. Lines, W. Vickers and E. Keogh, The UEA & UCR Time Series Classification Repository,\nwww.timeseriesclassification.com"
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Instructions"
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "1. To prepare data, you'll need to select the dataset \nyou are interested in (http://www.timeseriesclassification.com/dataset.php). \nThese are all avaialable datasets:"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:27.973846Z",
"end_time": "2018-11-27T12:26:27.979627Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "UCR_univar_datasets = [\n 'Adiac', 'ArrowHead', 'Beef', 'BeetleFly', 'BirdChicken', 'Car', 'CBF',\n 'ChlorineConcentration', 'CinCECGTorso', 'Coffee', 'Computers', 'CricketX',\n 'CricketY', 'CricketZ', 'DiatomSizeReduction',\n 'DistalPhalanxOutlineCorrect', 'DistalPhalanxOutlineAgeGroup',\n 'DistalPhalanxTW', 'Earthquakes', 'ECG200', 'ECG5000', 'ECGFiveDays',\n 'ElectricDevices', 'FaceAll', 'FaceFour', 'FacesUCR', 'FiftyWords', 'Fish',\n 'FordA', 'FordB', 'GunPoint', 'Ham', 'HandOutlines', 'Haptics', 'Herring',\n 'InlineSkate', 'InsectWingbeatSound', 'ItalyPowerDemand',\n 'LargeKitchenAppliances', 'Lightning2', 'Lightning7', 'Mallat', 'Meat',\n 'MedicalImages', 'MiddlePhalanxOutlineCorrect',\n 'MiddlePhalanxOutlineAgeGroup', 'MiddlePhalanxTW', 'MoteStrain',\n 'NonInvasiveFatalECGThorax1', 'NonInvasiveFatalECGThorax2', 'OliveOil',\n 'OSULeaf', 'PhalangesOutlinesCorrect', 'Phoneme', 'Plane',\n 'ProximalPhalanxOutlineCorrect', 'ProximalPhalanxOutlineAgeGroup',\n 'ProximalPhalanxTW', 'RefrigerationDevices', 'ScreenType', 'ShapeletSim',\n 'ShapesAll', 'SmallKitchenAppliances', 'SonyAIBORobotSurface1',\n 'SonyAIBORobotSurface2', 'StarLightCurves', 'Strawberry', 'SwedishLeaf',\n 'Symbols', 'SyntheticControl', 'ToeSegmentation1', 'ToeSegmentation2',\n 'Trace', 'TwoLeadECG', 'TwoPatterns', 'UWaveGestureLibraryX',\n 'UWaveGestureLibraryY', 'UWaveGestureLibraryZ', 'UWaveGestureLibraryAll',\n 'Wafer', 'Wine', 'WordSynonyms', 'Worms', 'WormsTwoClass', 'Yoga'\n]",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:28.933306Z",
"end_time": "2018-11-27T12:26:28.936247Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "SEL_DATASET = 'Earthquakes'",
"execution_count": 2,
"outputs": []
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "2. Import all libraries. Depending of your set up you may need to install some time series specific libraries.\n3. Load time series functions.\n4. Prepare original time series data for the selected dataset.\n5. You can visualize all available encoders for a time series example.\n6. Select the required image size and encoders in the settings section. You may select between None (deafult to time series) to 3 encoders simultaneously. Process the encoders, and you will see a sample of the result. \n7. You now need to create the dataset. To do that you don't need to modify the settings. Just process it, and the dataset will be ready. \n8. You can now go ahead and start training the model."
},
{
"metadata": {
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Import libraries"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:31.291775Z",
"end_time": "2018-11-27T12:26:31.483454Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "%reload_ext autoreload\n%autoreload 2\n%matplotlib inline",
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:31.526123Z",
"end_time": "2018-11-27T12:26:32.804932Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "from fastai import *\nfrom fastai.vision import *\nimport fastai\nfastai.__version__",
"execution_count": 4,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 4,
"data": {
"text/plain": "'1.0.28'"
},
"metadata": {}
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:32.807705Z",
"end_time": "2018-11-27T12:26:32.825954Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "import warnings\nwarnings.filterwarnings(\"ignore\")",
"execution_count": 5,
"outputs": []
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "To run this notebook, you may need to install pyts. pyts is an excellent Python package for time series transformation and classification.\nThe pyts package has some dependencies. In my case, I had to also install future and scikit-learn.\nso before importing the next cell I needed to install:\n\n- pip install pyts\n- pip install future\n- pip install -U scikit-learn"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:32.827879Z",
"end_time": "2018-11-27T12:26:32.908220Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "from pyts.image import GASF, GADF, MTF, RecurrencePlots\nfrom pyts.preprocessing import StandardScaler",
"execution_count": 6,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-17T18:13:33.740059Z",
"start_time": "2018-11-17T18:13:33.713588Z"
},
"hidden": true
},
"cell_type": "markdown",
"source": "You may also need to install tslearn, which in my case has another dependency (Cython). I needed to install:\n- pip install Cython\n- pip install tslearn"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:32.984640Z",
"end_time": "2018-11-27T12:26:33.007458Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "import tslearn.datasets\nfrom tslearn.datasets import extract_from_zip_url",
"execution_count": 7,
"outputs": []
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "One more library you may need to install is statsmodels. Statsmodels is a Python package that provides a complement to SciPy for statistical computations including descriptive statistics and estimation of statistical models. It includes functionality for time series analysis."
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T09:14:14.960971Z",
"start_time": "2018-11-27T09:14:14.896644Z"
},
"hidden": true
},
"cell_type": "markdown",
"source": "- pip install -U statsmodels"
},
{
"metadata": {
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Time series functions"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:34.800743Z",
"end_time": "2018-11-27T12:26:34.837479Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "def get_DPI():\n plt.plot([0, 1])\n plt.close()\n DPI = plt.gcf().get_dpi()\n print(\"Monitor's pixels per squared inch (DPI):\", DPI)\n return DPI\n\nDPI = get_DPI()",
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": "Monitor's pixels per squared inch (DPI): 72.0\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 0 Axes>"
},
"metadata": {}
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:35.199998Z",
"end_time": "2018-11-27T12:26:35.223855Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "def encode_img(uvts, encoder=None, n_bins=4, img_size=None, verbose=False):\n from pyts.approximation import PAA\n # uvts: univariate time series (single ts)\n # transf: choice of image transformation: GASF, GADF, MTF, RecurrencePlots\n # img_size: selected image output. If None, the output will have the same size as the input.\n # The output cannot be larger than the input.\n \n if encoder is None:\n if uvts.ndim == 1:\n return uvtsto2D(uvts)\n else:\n return\n if uvts.ndim == 1:\n uvts = [uvts]\n if img_size is None:\n img_size = uvts[0].shape[0]\n img_size = min(img_size, uvts[0].shape[0])\n \n if encoder == RecurrencePlots:\n uvts = PAA(output_size=img_size).fit_transform(uvts)\n encoder = RecurrencePlots()\n elif encoder == MTF:\n uvts = PAA(output_size=img_size).fit_transform(uvts)\n encoder = encoder(img_size, n_bins=n_bins, quantiles='gaussian')\n if verbose:\n print('n_bins:', n_bins, 'len(uvts):', len(uvts), 'type(uvts):', type(uvts))\n else:\n encoder = encoder(img_size)\n \n try: \n encoded_img = np.squeeze(encoder.fit_transform(uvts))\n except:\n print('not encoded')\n encoded_img = np.squeeze(uvts)\n if verbose:\n print(encoded_img.shape)\n return encoded_img",
"execution_count": 9,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:35.599925Z",
"end_time": "2018-11-27T12:26:35.620379Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "def get_cmap(encoder, cmap_type=None):\n from matplotlib import cm\n if cmap_type is None:\n if encoder is None: \n cmap='autumn_r'\n elif encoder is GASF:\n cmap='spring'\n elif encoder is GADF:\n cmap='summer'\n elif encoder is MTF:\n cmap='autumn'\n elif encoder is RecurrencePlots:\n cmap='winter'\n else:\n cmap='autumn_r'\n else:\n if encoder is None: \n cmap=cm.autumn_r\n elif encoder is GASF:\n cmap=cm.spring\n elif encoder is GADF:\n cmap=cm.summer\n elif encoder is MTF:\n cmap=cm.autumn\n elif encoder is RecurrencePlots:\n cmap=cm.winter\n else:\n cmap=cm.autumn_r\n return cmap",
"execution_count": 10,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:35.970535Z",
"end_time": "2018-11-27T12:26:35.991574Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "def ts2img(ts, dpi=72, area=False, return_img=False):\n from PIL import Image\n from matplotlib import cm\n fig, ax = plt.subplots(\n figsize=(len(ts) / DPI, len(ts) / DPI), dpi=DPI, frameon=False)\n if area:\n ax.fill_between(np.arange(len(ts)), ts, color='b')\n else:\n ax.plot(ts, color='b')\n plt.margins(x=0)\n plt.margins(y=0)\n plt.xticks([])\n plt.yticks([])\n fig.canvas.draw()\n plt.close()\n img_array = np.array(fig.canvas.renderer._renderer)[..., 0]\n if return_img:\n return Image.fromarray(img_array)\n else:\n return img_array",
"execution_count": 11,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:36.345847Z",
"end_time": "2018-11-27T12:26:36.364549Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "def uvtsto2D(uvts):\n # transforms a single univariate time series into a 2D array\n # uvts: single univariate time series\n from sklearn.preprocessing import MinMaxScaler\n scaler = MinMaxScaler(feature_range=(0, 1))\n uvts_scaled = scaler.fit_transform(uvts.reshape(-1, 1)).reshape(1, -1)\n return np.tile(uvts_scaled,(len(uvts), 1))",
"execution_count": 12,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:36.694894Z",
"end_time": "2018-11-27T12:26:36.713428Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "def img2array(img_file):\n import matplotlib.image as mpimg\n return mpimg.imread(img_file)\n\ndef array2img(array):\n from PIL import Image\n return Image.fromarray(array)\n\ndef resize_img(img, width_mult=1., height_mult=1.):\n width, height = img.size\n return img.resize((int(width * width_mult), int(height * height_mult)))",
"execution_count": 13,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:37.317430Z",
"end_time": "2018-11-27T12:26:37.350530Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "def multiencode_ts(ts,\n encoder1=None,\n encoder2=None,\n encoder3=None,\n sz=None,\n noise_type=None,\n noise_mult=0.01,\n coordconv=False,\n n_bins=4, \n return_img=False,\n verbose=False):\n\n from PIL import Image\n from matplotlib import cm\n from sklearn.preprocessing import MinMaxScaler\n from pyts.approximation import PAA\n\n if sz is None:\n sz = len(ts)\n else:\n sz = min(len(ts), sz)\n\n if encoder1 == 'Default':\n encoder1 = None\n\n lst = [encoder1, encoder2, encoder3]\n nb_encoders = (sum(x is not None for x in lst))\n\n if encoder1 is None or encoder1 == 'Area' or encoder1 == '2D':\n ts = PAA(output_size=sz).fit_transform(ts.reshape(1, -1)).ravel()\n\n r = None\n g = None\n b = None\n\n if encoder1 is None:\n if nb_encoders <= 1 and not coordconv:\n if verbose:\n print('option 0a')\n return ts2img(ts, return_img=return_img)\n else:\n r = ts2img(ts, return_img=False)\n elif encoder1 == 'Area' and not coordconv:\n if nb_encoders <= 1:\n if verbose:\n print('option 0b')\n return ts2img(ts, area=True, return_img=return_img)\n else:\n r = ts2img(ts, area=True, return_img=False)\n elif encoder1 == '2D':\n r = ts\n elif encoder1 is not None:\n r = encode_img(\n ts,\n encoder=encoder1,\n n_bins=n_bins, \n img_size=sz\n )\n if encoder2 is not None:\n g = encode_img(\n ts,\n encoder=encoder2,\n n_bins=n_bins, \n img_size=sz\n )\n if encoder3 is not None:\n b = encode_img(\n ts,\n encoder=encoder3,\n n_bins=n_bins, \n img_size=sz\n )\n\n scaler = MinMaxScaler(feature_range=(0, 1))\n shape = r.shape\n r = scaler.fit_transform(r.reshape(-1, 1)).reshape(shape)\n\n if g is None:\n g = 1\n else:\n g = scaler.fit_transform(g.reshape(-1, 1)).reshape(shape)\n if b is None:\n b = 1\n else:\n b = scaler.fit_transform(b.reshape(-1, 1)).reshape(shape)\n\n rgbArray = np.zeros((sz, sz, 3), 'uint8')\n rgbArray[..., 0] = r * 256\n\n if encoder2 is None and coordconv:\n rgbArray[..., 1] = 256 * np.linspace(0, 1, sz).reshape(1, -1) # X AXIS\n \n else:\n rgbArray[..., 1] = g * 256\n\n if encoder3 is None and coordconv:\n rgbArray[..., 2] = 256 * np.linspace(0, 1, sz).reshape(-1, 1) # Y AXIS\n else:\n rgbArray[..., 2] = b * 256\n\n if return_img:\n if not coordconv and nb_encoders <= 1:\n if encoder1 is None or encoder1 == 'area' or encoder1 == '2D':\n if verbose:\n print('option 1a')\n return Image.fromarray(rgbArray, 'RGB')\n else:\n if verbose:\n print('option 1b')\n return Image.fromarray(\n np.uint8(get_cmap(encoder1, True)(rgbArray[..., 0]) *\n 255)[..., :3], 'RGB')\n else:\n if verbose:\n print('option 2')\n return Image.fromarray(rgbArray)\n else:\n if not coordconv and nb_encoders <= 1:\n if verbose:\n print('option 3')\n return rgbArray[..., 0]\n else:\n if verbose:\n print('option 4')\n return rgbArray",
"execution_count": 14,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:38.002307Z",
"end_time": "2018-11-27T12:26:38.033264Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "def in_file_string_replace(filename, old_string, new_string):\n with open(filename) as f:\n s = f.read()\n\n with open(filename, 'w') as f:\n s = s.replace(old_string, new_string)\n f.write(s)\n\n\nclass UCR_UEA_datasets(object):\n \"\"\"A convenience class to access UCR/UEA time series datasets.\"\"\"\n\n def __init__(self):\n \n from urllib.request import urlretrieve\n \n base_dir = os.path.expanduser(\n os.path.join(\"~\", \".tslearn\", \"datasets\", \"UCR_UEA\"))\n self._data_dir = base_dir\n if not os.path.exists(self._data_dir):\n os.makedirs(self._data_dir)\n try:\n url_baseline = \"http://www.timeseriesclassification.com/singleTrainTest.csv\"\n self._baseline_scores_filename = os.path.join(\n self._data_dir, os.path.basename(url_baseline))\n urlretrieve(url_baseline, self._baseline_scores_filename)\n\n # fix typos in that CSV to match with the name in the download link\n in_file_string_replace(self._baseline_scores_filename,\n \"CinCECGtorso\", \"CinCECGTorso\")\n in_file_string_replace(self._baseline_scores_filename,\n \"StarlightCurves\", \"StarLightCurves\")\n except:\n self._baseline_scores_filename = None\n\n self._ignore_list = [\"Data Descriptions\"]\n\n def baseline_accuracy(self, list_datasets=None, list_methods=None):\n \"\"\"Report baseline performances as provided by UEA/UCR website.\"\"\"\n d_out = {}\n for perfs_dict in csv.DictReader(\n open(self._baseline_scores_filename, \"r\"), delimiter=\",\"):\n dataset_name = perfs_dict[\"\"]\n if list_datasets is None or dataset_name in list_datasets:\n d_out[dataset_name] = {}\n for m in perfs_dict.keys():\n if m != \"\" and (list_methods is None or m in list_methods):\n try:\n d_out[dataset_name][m] = float(perfs_dict[m])\n except ValueError: # Missing score case (score is then \"\")\n pass\n return d_out\n\n def list_datasets(self):\n \"\"\"List datasets in the UCR/UEA archive.\"\"\"\n datasets = []\n for perfs_dict in csv.DictReader(\n open(self._baseline_scores_filename, \"r\"), delimiter=\",\"):\n datasets.append(perfs_dict[\"\"])\n return datasets\n\n def load_dataset(self, dataset_name):\n \"\"\"Load a dataset from the UCR/UEA archive from its name.\"\"\"\n from tslearn.utils import to_time_series_dataset\n \n full_path = os.path.join(self._data_dir, dataset_name)\n fname_train = dataset_name + \"_TRAIN.txt\"\n fname_test = dataset_name + \"_TEST.txt\"\n if not os.path.exists(os.path.join(full_path, fname_train)) or \\\n not os.path.exists(os.path.join(full_path, fname_test)):\n url = \"http://www.timeseriesclassification.com/Downloads/%s.zip\" % dataset_name\n for fname in [fname_train, fname_test]:\n if os.path.exists(os.path.join(full_path, fname)):\n os.remove(os.path.join(full_path, fname))\n extract_from_zip_url(url, target_dir=full_path, verbose=False)\n try:\n data_train = np.loadtxt(\n os.path.join(full_path, fname_train), delimiter=None)\n data_test = np.loadtxt(\n os.path.join(full_path, fname_test), delimiter=None)\n except:\n return None, None, None, None\n X_train = to_time_series_dataset(data_train[:, 1:])\n y_train = data_train[:, 0].astype(np.int)\n X_test = to_time_series_dataset(data_test[:, 1:])\n y_test = data_test[:, 0].astype(np.int)\n return X_train, y_train, X_test, y_test\n",
"execution_count": 15,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-16T19:27:28.802549Z",
"start_time": "2018-11-16T19:27:28.752873Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Prepare original time series data"
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "create_val_set will split train set into train and validation when the dataset is created.\nnormalize_data to apply the StandardScaler function\ndifferencing will modify the original time series, by a stationary time series of t-1 steps calculated as the difference between one step in the ts and the previous one."
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:48.680531Z",
"end_time": "2018-11-27T12:26:48.700771Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "create_val_set = True\nnormalize_data = True\ndifferencing = False",
"execution_count": 16,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:49.373997Z",
"end_time": "2018-11-27T12:26:50.481205Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "extract_from_zip_url(\n 'http://www.timeseriesclassification.com/Downloads/' + SEL_DATASET + '.zip',\n target_dir='my_data/UCR_univariate/Downloads/' + SEL_DATASET,\n verbose=True)",
"execution_count": 17,
"outputs": [
{
"output_type": "stream",
"text": "Successfully extracted file /tmp/tmpx8nrinhl/Earthquakes.zip to path my_data/UCR_univariate/Downloads/Earthquakes\n",
"name": "stdout"
},
{
"output_type": "execute_result",
"execution_count": 17,
"data": {
"text/plain": "'my_data/UCR_univariate/Downloads/Earthquakes'"
},
"metadata": {}
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:51.667507Z",
"end_time": "2018-11-27T12:26:52.206206Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "X_train_ori, y_train_ori, X_test_ori, y_test_ori = UCR_UEA_datasets().load_dataset(SEL_DATASET)\n\nX_train_ori = np.squeeze(X_train_ori)\ntrain_df = pd.DataFrame(X_train_ori)\nif differencing: \n train_diff_df = train_df.diff(axis=1)\n X_train_ori = train_diff_df.loc[:, train_diff_df.columns != 0].values\n\nX_test_ori = np.squeeze(X_test_ori)\ntest_df = pd.DataFrame(X_test_ori)\nif differencing: \n test_diff_df = test_df.diff(axis=1)\n X_test_ori = test_diff_df.loc[:, test_diff_df.columns != 0].values\n \nprint('train:', X_train_ori.shape)\nprint('test :', X_test_ori.shape)",
"execution_count": 18,
"outputs": [
{
"output_type": "stream",
"text": "train: (322, 512)\ntest : (139, 512)\n",
"name": "stdout"
}
]
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "Now I'll create a validation set to be able to select hyperparams"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:53.972432Z",
"end_time": "2018-11-27T12:26:54.000451Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "# TRAIN\n# scale the values\nscaler = StandardScaler()\nif normalize_data:\n X_train = scaler.fit_transform(X_train_ori)\nelse:\n X_train = X_train_ori\ny_train = y_train_ori\nnb_classes_train = len(np.unique(y_train))\ny_train = ((y_train - y_train.min()) / (y_train.max() - y_train.min()) * (nb_classes_train - 1)).astype(int)\ny_train = y_train.ravel()\ny_train_classes = sorted(np.unique(y_train))\nprint(X_train.shape, X_train[0].shape)",
"execution_count": 19,
"outputs": [
{
"output_type": "stream",
"text": "(322, 512) (512,)\n",
"name": "stdout"
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:54.756772Z",
"end_time": "2018-11-27T12:26:54.782938Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "# scale the values\nif normalize_data:\n X_test = scaler.transform(X_test_ori)\nelse:\n X_test = X_test_ori\ny_test = y_test_ori\nnb_classes_test = len(np.unique(y_test))\ny_test = ((y_test - y_test.min()) / (y_test.max() - y_test.min()) * (nb_classes_test - 1)).astype(int)\ny_test = y_test.ravel()\ny_test_classes = sorted(np.unique(y_test))\nprint(X_test.shape, X_test[0].shape)",
"execution_count": 20,
"outputs": [
{
"output_type": "stream",
"text": "(139, 512) (512,)\n",
"name": "stdout"
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:55.495492Z",
"end_time": "2018-11-27T12:26:55.517377Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "print(\"Number of train samples: \", X_train.shape[0])\nprint(\"Number of test samples : \", X_test.shape[0])\nprint(\"Number of classes train: \", nb_classes_train, sorted(np.unique(y_train)))\nprint(\"Number of classes test : \", nb_classes_test, sorted(np.unique(y_test)))\nprint(\"Sequence length : \", X_train.shape[-1])",
"execution_count": 21,
"outputs": [
{
"output_type": "stream",
"text": "Number of train samples: 322\nNumber of test samples : 139\nNumber of classes train: 2 [0, 1]\nNumber of classes test : 2 [0, 1]\nSequence length : 512\n",
"name": "stdout"
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:26:56.403910Z",
"end_time": "2018-11-27T12:26:56.425382Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "unique_elements, counts_elements = np.sort(np.unique(y_train, return_counts=True))\nprint('train:', dict(zip(unique_elements, counts_elements / len(y_train))))\nunique_elements, counts_elements = np.sort(np.unique(y_test, return_counts=True))\nprint('test :', dict(zip(unique_elements, counts_elements / len(y_test))))",
"execution_count": 22,
"outputs": [
{
"output_type": "stream",
"text": "train: {0: 0.18012422360248448, 1: 0.8198757763975155}\ntest : {0: 0.2517985611510791, 1: 0.7482014388489209}\n",
"name": "stdout"
}
]
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### What is the SOTA with this model?"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T10:58:33.005331Z",
"start_time": "2018-11-27T10:58:32.549516Z"
},
"hidden": true,
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "d = UCR_UEA_datasets().baseline_accuracy(SEL_DATASET)[SEL_DATASET]\nt = [(k, v) for k, v in d.items()]\nSOTA = sorted(t, key=lambda tup: tup[1], reverse=True)\nprint(SEL_DATASET, 'SOTA:', dict((SOTA[0]) for x, y in t))\nSOTA",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### Baseline score"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T10:58:36.803576Z",
"start_time": "2018-11-27T10:58:36.734024Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "from sklearn.metrics import accuracy_score\nfor c in y_train_classes:\n score = accuracy_score(\n y_test, np.repeat(c, len(y_test)), normalize=True, sample_weight=None)\n print(c, 'score :', score)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T10:12:59.956782Z",
"start_time": "2018-11-27T10:12:59.893744Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Exploratory Data Analysis"
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### Autocorrelation?"
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "The correlation of a series with its own lagged values is called autocorrelation or serial correlation."
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:35:09.651918Z",
"end_time": "2018-11-27T12:35:10.047650Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "from pandas.tools.plotting import autocorrelation_plot\nfrom random import randrange\n\ni = randrange(0, len(y_train))\n\nprint('i :', i)\nprint('y_train:', y_train[i])\nseries = Series(X_train_ori[i])\n\nseries.plot()\nplt.show()\n\nplt.hist(series, bins=10)\nplt.show()\n\nautocorrelation_plot(series)\nplt.show()\n\nprint('mean:', np.mean(X_train_ori), 'std:', np.std(X_train_ori))",
"execution_count": 36,
"outputs": [
{
"output_type": "stream",
"text": "i : 242\ny_train: 0\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD8CAYAAACfF6SlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJztvXe4JUd1L/pb+0zQKKA4ClYauMhck4XnAjb3GUywBSbYBmz4sAnmPn32Zx7wHp+vhe/9sM2zMTywwCAuICMQGCyyzRiJKxRGQlkahVEaCY1GkzQjTY7nzEm73h/d1V1VXWFVh3322ad+853Ze3dX6u7qVat+a9UqEkIgISEhIWFhoTfXDUhISEhIGDyS8E9ISEhYgEjCPyEhIWEBIgn/hISEhAWIJPwTEhISFiCS8E9ISEhYgEjCPyEhIWEBIgn/hISEhAWIxsKfiI4iojuJaC0RPUREf2tJs5SIvktE64noDiJa0bTehISEhIT6WNRCGZMAXi2EOEREiwHcTEQ/FULcrqR5P4C9QohnE9E7AHwKwB/6Cj3llFPEihUrWmheQkJCwsLB3XffvUsIsTyUrrHwF1l8iEP5z8X5nxkz4i0A/ib//gMAlxARCU9siRUrVmDNmjVNm5eQkJCwoEBEmzjpWuH8iWiMiO4DsAPANUKIO4wkZwLYAgBCiBkA+wGc3EbdCQkJCQnxaEX4CyFmhRAvBnAWgJcS0fONJGTLZh4goguJaA0Rrdm5c2cbTUtISEhIsKBVbx8hxD4ANwC4wDi1FcDZAEBEiwAcD2CPJf+lQoiVQoiVy5cHKauEhISEhJpow9tnORGdkH9fBuC1AB4xkq0C8J78+9sAXO/j+xMSEhISukUb3j5nAPgGEY0hG0y+J4T4CRF9HMAaIcQqAJcB+BciWo9M439HC/UmJCQkJNREG94+9wM433L8Y8r3IwDe3rSuhISEhIR2kFb4JiQkJCxAJOGfkJDQGh58cj/u3bx3rpuRwEAbnH9CQkICAOCNX7gZALDxk78zxy1JCCFp/gkJCQkLEEn4JyQkJCxAJOGfkJCQsACRhH9CQkLCAkQS/gkJCQkLEEn4JyQkJCxAJOGfkJCQsACRhH9CQkLCAkQS/gkJc4gj07PYcfDIXDcjYQEiCf+EocDE1Cwe33konHDE8L6v34WX/v11c92MhAWIJPwThgJ/9u278Zp/vBEzs/25bspAcduG3XPdhIQFiiT8E5yYme3jpw9sxyD23bll/S4AwGza4ychYSBIwj/BiUtv2oA/+/Y9uPKB7Z3XRZRt85xkf0LCYJCEf4ITT+/PDJG7Dk52Xlcvk/3zRvhfcedmrLjoSuyfmJ7rpiQk1EIS/glOSG28PwCB3Mvrmi+0z+W3bAQAbNs3MbcNSUioiST8E5zI5TH6AxDIeVUDqasNUMszlUHYVRISVDQW/kR0NhGtJqJ1RPQQEX3IkuZVRLSfiO7L/z5mKythuNAbIA8v6+oPYprRAspZUTvtTbI/YdBoYyevGQAfEULcQ0THAbibiK4RQjxspLtJCPHGFupLGBB6A9T8UdTVfVVtoG0bRV8I9Ir5T0JC92is+Qshtgsh7sm/HwSwDsCZTctNmHv05oLzb1jZlj3juHtT93vIFrQP2rk582XQSxgdtMr5E9EKAOcDuMNy+teIaC0R/ZSIntdmvQndoHC/bEnA+VBq0s3q+j/+v9V465dubaFFfhDapcTmi60jYXTQ2gbuRHQsgB8C+LAQ4oBx+h4A5wohDhHRGwD8O4DzLGVcCOBCADjnnHPaalpCTbRt1PRhvnn7lJp/O5gnl50wQmhF8yeixcgE/7eFED8yzwshDgghDuXfrwKwmIhOsaS7VAixUgixcvny5W00LaEB2tLGOaB5xvmXi9JaMvgOYHaVkKCiDW8fAnAZgHVCiIsdaU7P04GIXprXm4KaADg8OTO0UR1LHr77umiIvH2+uHo97tq4x5umdE1tp84huOyEBYY2aJ9XAPhjAA8Q0X35sb8CcA4ACCG+DOBtAP6MiGYATAB4h0iOzQCAN11yMzbsPIyNn/yduW5KBW27M3rryj+Hgfv+9NWPAoD3mVDhmNOWwXfurzuhe+w+NInxqVmcfdLRc92U5sJfCHEz4PdRE0JcAuCSpnWNIjbsPDzXTXCi1zKv7a+rHW+fQUF2+NYWeS2sYKYLFiv//loI4VcsBoW0wjfBiV7LvLa/ruxznsj+8t60VF7S/BcGhukxJ+Gf4MQgqZhBUkxtoDBQtzRazZfrThgdJOG/ALBu+wGsWrstOl+vN7jwDoOMI9QGKKD5T87MRpU3X2Y8CaODJPwXAF7/Tzfhg1fcG51vkO6X85Xztw1WNz+2C8/5n/876DGkIvk/JAwaSfgnODEXnP98kYGFt4+lvbc8nu1KducTfOE/T8a8hBFCEv4JTgwysNv80/yTwTdhfiMJ/wQnpIAbiDzuaKA5NDkTRb9w0XboiyT8Rx/DRu0l4Z/gxFzE9mlbCH7gX+/B2798G/aNT7VabttRPYdMLiR0gCPTw7WYIwn/BCe6Esg2tB0uQeKhbVmMwamZdl+8tje6ScJ/9HF4amaum6AhCf+OseKiK/HRH90/182ohfnM+Xc9xW57XUKifUYf45Nx7r9dIwn/AeCKO7fMdRNqYT77+Xfd5rbDOyThP3qY7QvsOjRZ/D40mTT/hHmCQa7wLffwbae8rtucdvJKCOErP38cK//uWmzdOw4AGE+0T8J8QWgVa7t1ZZ/t0SitFONE64HdkuY/cnjwyf0AgDs2ZN5mU4OIjR6BJPwTnBjkIi8p/Nvayat7zb/tbRzbKSdhePCfT38GAOCBfBAYtv16kvBPcKIw+A5AYWl7oOl6vGo73HXi/EcPi8cy8bpxdxa2fdiecBL+CU4MMtgaFd4+7ZRntpl7BfzBJ3n7JPgxa2hNw/aIk/BPCGIwgd1kXXMrTLnZ2l4AN2yCIaE5pmezh1qGgRquh5yEf4ITUiANhPMv6uzG4Ovdak4Bt3bfYFXnEgal+e84cCQZlwcEuWalX7xHc9gYC5LwT3BCGJ9dou3N4usKOG4+apn2GYRgWL/jEF76ietw2c1PdF9ZAmYK4Z99Dpnsby78iehsIlpNROuI6CEi+pAlDRHR54loPRHdT0QvaVpvQveQAmkwnH+7ddWlqtiMv2evA+JOMxQM4h5vyf3Nb3psVyflf/RHD3RS7nyF5PwL4T9kqn/jDdwBzAD4iBDiHiI6DsDdRHSNEOJhJc3rAZyX/70MwJfyz4R5gEFw/sMSLoGbrW3vpEFumNPVQHPFnZs7KXe+Qmr+kv4ZLtHfguYvhNguhLgn/34QwDoAZxrJ3gLgmyLD7QBOIKIzmtad0C2kgWowK3zRqK4DR6bx0we2F7/revuw0Xo4iu7v8dg82yd5vqPg/CWVOWS3vVXOn4hWADgfwB3GqTMBqAFutqI6QMwrXHbzE1hx0ZWYHrJVe21ikAbfppz/R763Fn/27XuK32aTuZfA9cgoQl+05praTjk+DHLdRoKN8x8u6d+a8CeiYwH8EMCHhRAHzNOWLJU7QUQXEtEaIlqzc+fOtpoGADjcclClz13zCwDAxPRwReprE4XBdx4EdtuyZ1z7XdX8w+VOzfTZoZ+HhaaKQdttTvBjNnf1nC04/7lsTRWtCH8iWoxM8H9bCPEjS5KtAM5Wfp8FYJuZSAhxqRBipRBi5fLly9toGgDgx/c9ief99dV45ClzTErwQgyS9pGB3brh0DmX8LJPXIsX/M3PWOXPx6iegwzRnaBo/v0RFf6UqROXAVgnhLjYkWwVgHfnXj8vB7BfCLHdkbZ1XLtuBwDg0acODqpKAMNn3a+LQcadaasucxDhFLt3fJpd/nwLQQ0AY734bTn3T0zjqf1HOmrRaOGmx3biC9c9VvyW3j6F5j8nrXKjDW+fVwD4YwAPENF9+bG/AnAOAAghvgzgKgBvALAewDiA97VQLxszOZG8qDfYZQ3zXfaXtM8AOf+OhKnrGr560wbsn5jGR37rOVHlt93eYaV9Xv2ZG7D78BQ2fvJ3umrWyOCPL7sTAPB/veY8AKq3T3Z+2JTBxsJfCHEzAgsoRXbVf960rjrYc3gKt23YDQBYNFbDATsC//DTddh9aAqfefuLAAzfSB+L0s+/+7qKQGkdCVNXsX935ToAiBb+Pj//OhiswZdf2e7D7e59PEr4n//+ABb1evibNz/Per5w8RxSzX/kV/i+89LbsS+fzi/qdSv8v3LjBvzg7q3F7y5G+kOTM1hx0ZW4+qGnovOq7en3BX5499ZiVuRLPx+3cew8pDPcfv7yUMxir0Hc4zq0T4Ib37p9My6/daPzfMXPf8ju+8gL/0efLnn+RWMDpn1i0jJ7xsZdWXjYf7r2sUBKWx3l93+790l85PtrcelNG9zpLfm6QteadNvXQAwtOqrOiLTfvmMTVlx0JSam4jzNul7klaBDCv2SGhyu+z7ywl9FF5r/fIrqqFaxbyKbDe08OGlPjEGHd2jX26fzDdzzz7kI7/ClGx4HoD+7mP1hk+Y/GIy8t898wlgXtI/ngcY87EH0C1Ug1uF/u0T7IZ31320vsJnLWERSiZnJvUlWP7oDz//rq3HnE3u8+YrBfEie+aijjO0zxw1xYEEJ/8UdGHx9QiVG4AzCE0CtoaQAwunb4uF96Np7pu3bW8b2aae8mEGk5O6zPLfnDg1rNgWE/wDDdSQAM3KR16jG9plPoDrz8QB879Gwaf4qOJr2IA2+bW+O0nVsn/b9/PnlSJdlSSuMMSmzQdJ4CWo8/0T7zDm6uPltFTkQzl+poxfh+TEYg2+73j5cP/+6oNZnKvy08tlJzZLrxSNP17nFw+ajPh9Qjeo5XPdwQQn/LvRr30sRp/nbE9+xYTfW7zgU26xgHZyQxGVgN175qx/Zge37J2q1rTSg1ntG5qyuc81fljsHtI/k/KVQ4Q6cTWZyZtmPPnUQdwdopoWOtJPXEGHQmn8bI/0fXno7XnvxjY3LAQzNP5dePoERyxG/7/K78KYv3FK7fcDcxvaJAcfVMwYxxUhNX846uKGaS80/vs0zRgN/+3M/x1u/dFt0OQsJ3J28hBBzMrNaWMK/izLb4vwH/Ow5Bl+JmKbtOuR2HeWgPT9/s6CWaR/w7x8HcZy/runL5SthzT/7rBPSeRBG/1FDEdvHWOlr4pkfvQp/cvldA2uXRBuxfYYW5s3uRvP3ac7DBV3zD2uLgzQQFp5FNeuqPutun73P4Nv1Cl+T8yf2QF6f9pF1JQBrt+wrPKx8MP38fVj9aLsh7DkYaeFvxtrvZGrl1fz59Q1mkVdZiekuaE+PPE2XrdIra2ugMaNWdHUJbfWpmGJMmoe7pWSTwXwm7QBT4C1f5FGbydtnDnF40hD+HdTh5/xjyolrHTf15t3lJidq5+OEUygNvoPQ/PlaEgdd+/lzgt6ZdW7cdRhvvuRm7LeEjo5a5DVWk/apUZdEon3iMWNu5jJkXMBIC39zi8VOFP8h5/x/49OryzqU45zNUwa5KIgjTGNQZyevGPjujYvuuWT1ety/dT+ufrgalC+K9jG8e7gL5Jqs8J1mehIllDD38B22WzTSwr9q8mv/7nvLjBH+kfXWWa6mvqAs2kfon9yym6A7P/86ZXDsIfHlxtZlogzvIDV/7iKv+oP5bIDzHzbBNgwo/PwT7TN4VF6oAWn+hydn8NWbNkS9ZIMP75B9coStK82GnYewam22G6er+UIIlqbZNsUk730Tf3xO6Iu5iO0zVvH2qRp8+/2q+2AT2ifE+Q+ZXBsKVLx95rIxFoy48Nd/d0Fb2or8h5+uw99duQ7XPPx0o3K6RJSrpyPNb3325/jgFfdmaRx5/+Tyu/Csv7oqXAd0Lakp2gjs5l0D0YBCKcso80Yt8hrTA7uZq413H5rEs/7qKnzDiDXfzOCbaJ9YqPfM9OUfhvs10sLfRCe0j+Uh7p/IwuuOT/HD7A4C8a6efkOV2blt4LqwdcX5NymOIySbtFfT1CPKkc+uCO9g2G+253vufl/ZWAhoZlQPuXrOvSgbPqjKw2xff4uGQPaPtvBvg/eNrWOuy/FXUj3E4fyDxYrmw2pBSXQUz78e7WPPtH9iGlv3jnvTxJbfjPPPjlcMwNXpT15vfFu5C8gSSqjK0awQQzdCjrSff9fxXUKIqm8AjVNFtPzm9VZiljvTF61x39MtLSZqwy3dJfAu+NzPC+26yfRdvWcxg96YjOqZe7OZFJ5pE5BoYqeYDnL+QybZhgCzfYFFPcrej779/ZtLtKL5E9HXiGgHET3oOP8qItpPRPflfx9ro14X9h6ews9/sbPq7dOBetKaq+cAuoPaHo7nB7f9s30RTOsSpOt3HMLz//pqPLk3Cwg35dlTOAZt+Pm75LEU/K40/BlTuC4bpKY/bWj68pqLmYDjHrQR2M1E0vxLSH5/ti+wOH8YfSGs799coi3a53IAFwTS3CSEeHH+9/GW6rXijV+4Ge/+2p2FtV2ii9vdVniHwazwrX7nCIJQEnM9hQ1TM/Y037lzMw5NzuDh7QcAAJPTcfvSutCGwZejjf/L7Zvw6s/cYD0XCu+gC/94zX82v+9V759c4FQ0fzngs6sqyo4N78AVbu+89PbCaWBUIET5LOQGUrMGNTr3or8l4S+E+DmAoYnv+uS+TIusyKQBc/5R4R1aaEuwDo1jzj45UT1DbZuZDWv+kzM8oT7pGCRiYd77N19yCx58cn9UGVyBvGHX4ahyY8s3YXL+ZpwhaQA2PXTqaP5lWQHap6Z97bYNuwt34VGBQPnOFJp/39T8B96sCgZp8P01IlpLRD8loufZEhDRhUS0hojW7NxZL9DRbiWqZJerPIXx2bi8Afv5g6EFhpokhc50vx+8t1yh7pohxMJ2XTc8uiOqjLpup9xdyTTOn1nX5MxsMZBK+4jMW3o45b8dnH/MZY317AOJCfP5D4FsmzP0hVAoOJf9Ze7v0KCE/z0AzhVCvAjAFwD8uy2REOJSIcRKIcTK5cuX16po6eIxPPvUYwFYbngnmn9zzhwYlOZf/e5tP+xpvnLj47hr455SA+Vo/tM8oc6dIYSw+/AkDh6pxtCJQdfjcR1Xz9/94q343prMhVMafMs1B9B+VzX/+AsqhFda4cuGEOX9WKQswNMMvkNwvwYi/IUQB4QQh/LvVwFYTESndFHXsUsX4fdfcmZeb3bsDS84XfvdJnxFxozuX77hcfzonq3O8/ds3ou//MH9jbxqbN4GXkOew1f+H376CN7+5ds0PjjUKq5Qb8vg+7EfP4T/+qnVjcroOphZnUVe63LbCFAK94LCM55XG95uciW4Svt89ppfVNKZZccONEdasvUMA7TouWOlMX4YBL6KgQh/Ijqd8mWIRPTSvN5wQOyaMANdnXvyMQA6Mvg2oE1UfPXmJ/D/fG+t8/y7/vkOfHfNFoxPNXhJLJo/S7450siNxKf7/aDw4tI+3BkCB/snmmn+XQv/vuV5xEAK5ELYGyGEXX7+MVg0pm8WL4TAP133WCWdK5SEibVb9uFNX7gZE0Y/3nmw2SZAXeGDV9yL7961OSqPrvnnxnljkddf/OB+fPO2ja20sS7acvW8AsBtAJ5DRFuJ6P1E9KdE9Kd5krcBeJCI1gL4PIB3iA5JbnM/2F7BwXYi/mucaVCbpGualsOI2BmyaxRaYYsG38d2HBoa74/uaR9F82+w6lb2azOAWBs8s7lgzCWkq5q/vbyP/+RhPPDkfjy0TTe+N90BriusWrsNf/nDB6LzyWer7bqm3JT/WLsNH/vxQ+00siZaWeQlhHhn4PwlAC5poy4OyBD2xWYXHdTVlubPr68J7aOWk3022clLaoXTs/3gzY3R6Fet3YbPv/N8dnof6kQ/lWgrzpALusE3Pn+hjVfKsGv+dS6nWFOQDzQblf0hQmULIfD9NVvxxhedgaOX+EXNPsYs7ekDR3Dv5r244PlnBNPOJYQon4kaPXfIWJ/RDO9g7q9KxU5H7dfVFuffRn0hfP2WjUq8ngw+D77C1dNRqeoJ0pa3j8RP7t+GR586GJWnbUjhefNju1jb9sWirp+/hDT4FmEbHDYAW31clLRFVtdGl1trhWESWLNpL/77D+/nabiMtv3BV27Dn37rnqHfWEagDOKmRlxdkJz/oCE1/zLWiTzTgTAeuOaffdbRaL984+PFYqqYFb4uwV56+/Rbo30kPvCv9+K3P/fzqDztI7uoP7rsDrzj0tvbLrZ2bB+J6ULz1zV918Bey+CbSwg5y9h12EX7VAcaeUnOAUMBZ/Dbsmc8L3vIpKgBVfNXaZ9ha/dIxvYhI8phr1PNf7APtGkMHXOlJovzV5LIFxAotZpplrfP3OwB2+Ru1b3VxQAdGKHrRvWUMF09Z40Bvar5x1cyZnD+riJsx49ZOgYAODQZjm47bG7RMdi2bwJfufHx4rcAIPLuvkgN7zAHbfNhNIV//mkGuho8599+jW3x0DHePqoG9yollEFJ+/SD19qmF8+g0Bm7IFfkKhXwwmzoaUzOv6D0nAbfePSUAd7WBiAzAu84eKRyXK5uZQl/Rltsysgw4CPfW4vbFFowi3Kb0z6kav5z0jwnRlP4G8vduSsu62A+GXxVmKtC7XXpdT51QH/Bx5S48mHNf/75cXetq2mL7hjpzTUQpbdP9ruOdh5C+Yz1WYaK//L311rrkn3rMEP4x8xoB7GndAwqMyyU9ykZfAeMqqun1Pzbu/1mHYNCG6GKAVWwe9IEYvuUtI/bz18OvHNF+zRB3UfbVXiH8Ul9AJULo8yAbe5+Hn9BRy3OqJvDuV8+dzaUGT2z723RPk08twYJjfOXi7z6w2erGEnh31NGW0D18x9sO7qorjXaR5bH2KiW4+3jXgiWpZmPwr/rgV0tnVPVuLEKdmJaF8hFbJ8WNX85kO0fn8rKYPZq1eDL26OBQXspZQ81lFlPYfB1NHouB4SRFP6FVp7Lm6Z+/tOzfXxx9XordTFfaR+Wt0/xaU8jtZrp2b5b13Twz2YdMXjtxTfiAqYnkEatRFbW2XtpCGuAt5p4wtgWtKBTpIE3RPtENlMtS/rhc++JQCyVE9GmoSNQdKiznrGen/OfS6/VkeT8YYR3KP38693pb92+CZ+++lEIIfCBV5+nnfPH82//ybbVWWQxvpWlpgHRhMb5O9KYq07bwPodh9hpQ6GIQ+hSM4sdmMzQHvJ38SwDtE+dS5Fl7RuXwp+r+QvsOTzFr4dJ+2SDSrjuvePTOOmYJez620RG+2SNLJxNFCOwnjZp/q1Cav7FQouGZKF8yQ5b4upwNf+Nuw4XgnZ8agZPH6h6R3DQGhVRaJ+cOu3He6q3j6Njl15FDptAuPpGUL2MQq6XJu58Yo81jk1jWMKNcBQFM9y1pH2KexzU/OP7TqH5F7QPD/96x2a8+2t38uuJon38aS+7+Qm85P+9Bpsdq5G7hij+M2L7WJo9l3OYkRT+ZTyS/Hcx+rZfl69I9dyrPnMDvnHbRgDAH331DrzsE9fVqq+t1Y2s2D6iTO3DtKH5y5dTDSnMabUMxb38uKXa8dm+iN6IRaKJl9HHf/IwPndtB8I/Ryznbz76w5NS+Oe0j5xlueqro/nXpH1ueDRuP4442seP6x/J9m3YsneOhL8QxfUscuzkVaYdXLtMjKTwr7p6tuvts23fBA7mfKtXCzHO/eLpLFzBPZv3AQhvf2gruzXFP6CRA2EDmxyIZgzOvzwe5jXUo6ccuwS/d/6ZWJZ7mEh8cfV6vPELN+O+LfucbXXBFTlz/8Q07tm8N7q8NmEbMP3p9TTSBmBSeK6y1KOvu/hG1n4HMo+kfbgzz9h37YNX3ItrH37am6aY0ddg8v7t3q34wL/eE58xx+M7+VSjQJX2ybx9bGkT7dMq3FE92yn/1z95ffGdq/kDwPJjdY129yE/J2o3EPEv4pWfXu0uuyiveu7xnYewdss+JbyDHVK4zxhL16XGr/LtZj1/f+XDeNdX9ZAJlEdlMq9Rav33bd6LW9bvKq+hwQN979fvxO//r1tr5/dBNiu8wlco38PlmmnGp2et1JqrLPV+PbbjENZsCg9+Ms+BI9OVsMT+fMyECj70HX8010IZCbTCVvf//d21+Mn922vvFPeaf7yRnVb1dJKusuNTMw5qtFZzWsFoCv/8pfvQd+4D0HF4B77ij1NyOuOUYzNDlCs87mv+8QZ8+Dv3Wru4Gb/FxOpHd2DFRVdix8Ej2OThPH1eOK/5xxvxli/eEqSGpHA3aR+b5m92/H++6Qncsn53lfMn9z39m/94GO/66h3F71j3UVUYr60xi4iFs2+I6nmfQFu/4xBueHRHJY0QwJHpctZVuhO239GFyAVYw6LbMHDWKWJJvtp40+56+y3HQDXtnnvS0QCAzXvmhoLyYUSFvy5SpOY/ORMOQxCLt37pVjy87YD1nMk3y7C2Jx+TDQJmDHPpE/z4zsP49/u2Wdsa0vy/eetGAAhy5DGcvyvJjEr7qMLfwvlzNFuicqDmgLNydFiwafdh/OBufac2PbCbO+9rL74R7/36XdY0mUDOn6WxjWMbUMvKIlNyaZ/m+KOv3oHnfux/F7+5CyttXehZy7MNnWI8xWpDlBTciccswfHLFmPj7sOsmfyBI9O45PrHBhK5dDSFv/FbCpS/+rcH8K074nbl4eDWx3dZj//zTU9ov+WLc7LU/E3hb7gl2Z5/a66eAcGup7Un6vdLIa9qpbMFHVRq5hzfcyJYaR8XDk/GGXOFyFabfuKqdQPxr1bv2+9+8ZbyhEU4xcRYUqG6f5YbuPPzB+tUSxMRQt2R0FTMfLh5/S7t+prMa555Sib8nxiI5l+CAKw4+WjnLNx8Jh/53lp85me/wN0MSq4pRlP4VzT/8veV929rvb4te8bL2OoeyAct/Y9N2kcGwirSW7p5U1fPJ3Ydzn2OM3A0jAB7kQd2K4/P2GgfRrsJBPLQPiY4YQNMfOG6x3DpzzdE54uBLbzD3vGqcVW/Ts5zqKaZmJ6t3K8uXD0B4C9+sBYHj3Q721r9yA5cfssT3jR1XgHJvdfl/GOgcv5EhLNPOhpb9ozbHTiM39eSMhQQAAAgAElEQVSuy4zeRy8Zq6RtGyO5yKui+Xc8xH3jtk2FO6kP8uVTjUAqKsLfpvnngrWuf/yHv3tfRkflhU9Mz2J8asa601LRWR0vmxw4pmZ0b5/dhycrgtn1vqrXIWkftuY/FSeIiAYbZiJ0Ffo2juHybOP04cmqIdG8fzc9thPfX7MVzz/zGeFKDKgl/SzgjaPnq6ekvO/yuwAA733FMyvn5CKvJtRtlEtpzXqEwvr3CFi6aKxiF3PVETMjb4qR1PxNYa9q/g9s3d/JfqG3rg/v9GR6ZZgPeBFjAGEH1vKku3/rfu3VvGvjXqx+dEe1IxZ1+mmf+7bs0/Je8Lmb8JufuUGbDannH3nKbiMBMgHNvcZDkzPYfWgSr/z06ihXvEEh9AIL7TtD87cU+NMHn8InrnrEW++lP9+AVWu34bKb/Ro1t05evlrZ/GUanzHo15CqdalBIdRdBJHPZh1+/s665wnnT0RfI6IdRPSg4zwR0eeJaD0R3U9EL2mjXmd74KZ9Dk/N4vX/dFOX1TvRN3qv2bmIgBd//GfF7yaunqGOq4Z1+Mj31uJ9X78L31uzRUsTcvWUht01m/Zi73jVbdVl8L3gc777z9f8J6Zmce26p7Fp9zgreFiX75N9Su83dMS6etrar1JY5fMqE87M9nFfvq4k1kaiNHVg+Vhl17FdON45f556V9EXpeszgdAjOWNxt6tyvFbNcWhL878cwAWe868HcF7+dyGAL7VUrxWmTcn0IHG5WHYNM0SyKRzGJ2eLxTS28wB/hW+o48qzzz712GIm9OQ+e8gJV1FFLBkB7Dlc5bR1zt/fXiDjR3vEv8ZBhtMOzcpsTQ5q/sL+3ZmeKxKUZE8dOFIsSIzxIFm1dhue2n8kKIWcC8oqdIZ9VhmDJmHUS2M4P2/tgU+UeTMnBsrj+VdL/KHhASYxiL7dCucvhPg5Ea3wJHkLgG+KrAfcTkQnENEZQojtbdQfwtiAyS2nd0yA9qmWwzvmqytU9sufdZLT/a0crPy0D2AXLGoYW05nJkjap0y74qIrnelj3w+fo0losBwLCP8sP3M9iWVPaY5QCtkFbPsvqHm4AuXI9Cw+eMW9eNYpxwRbxdVchdDvfz3PI3vZnDaVFCa/viYCWDX49nq6EVjFx3/ysDd/lxiUWDwTgMopbM2PaSCiC4loDRGt2bkzLjaIClPTj3EvawPO52YIfa52roK9vJ5ZtlxzYC9D//S1xdau2Jen0JLmQPMPFRXqQkL7XhXCNrhCT3Dq8Jdrfy58yjBLt33/kVp9lJOuidG2Tt5QhFp7nuhqinwl7ZP979nywlFG99J/UMLf9upUrk4IcakQYqUQYuXy5cvrVxagfeYKpuZfkXFGM20dgLuZS1g7ylL4NNpC03IUNtv3Cxad1ojR/INJa8HXhKZVamWHbpzlNOf+hIS3bbCOtStUygydd9I++u9ytssbGG0oo/UG0lm6NFfhagMqwZN5sGVHY0aTASj+AxP+WwGcrfw+C0D7Dvc5qgbfrmpywDUVNjp+qC/U4ZHLvLyEvntjMyCqmA3QPoIheMzDPSL2ANeu5u8vy+xTvrZw6Yk2DL7aeUu9sRvGmPVw6wwdN8tpRPvUyBtaAOfLEwuV4pFrV2I1f+7stwkGJfxXAXh37vXzcgD7u+T751rzd7pGGtpHJV3ljbGUUeMF9p33r0/wT5VDtIV2ntH1JT3Hpn0iXfZ93aDNdy1IMVg09Hbmc3r9gO5xxYU+ieHPXnyoRNhtQvs0WKwWI1Rr0z4o29hT1q7ElDeIFeitGHyJ6AoArwJwChFtBfDXABYDgBDiywCuAvAGAOsBjAN4Xxv1umDKs0GzPi7hb2ouIQ8I+wrfZm0wy+YMjC6NS9XQ62r+ZHw3Db6cdnHhp32avW12I6OrH4jKeR7tw2uDmqxOjBjtuTGNzM7GOMquS/sINKOvYrLW7RFCiOK+yYWLQsT1sUGEem7L2+edgfMCwJ+3URcPbj//QcDpAWFo/GYyU+jZyglt2MGFLHvMc2/MQaoaVVIR/laDb7UsH8oVvuG0Wflt0j4N82uC3F+m7TzL4Mtto5Kuzi6W5v3veewwzmuslBnu2yGUSkj9AS1uX+GatA/U/kBFWYMwNsdgJFf4mvIs5KY3KJgvfeiFsD3/NjxhhFK2j/Yp22lvkGbwDWj+ruFKPxpi1r2Zg+hSB9ApLv3ThG0mxXL1DEqEqoCrs4extr2kELXeHxfHX1B7jWifGnkCA7IvT526yuvNlU8ROetIwr8ezK46aNrH/dLLlzP/XRH2bs1agu/qyTvvNfia7am0pfxu0/zVI1wZFPOshsrVUxOY/jJtgz/n/gRFv6XeOvfItEX4XKXdFKfwpqtL+2Tti89tehuxULt7lRl7RAWVGcf5dy/9R1P4e6J6DgJhA6kwfpvn1VQ6+J4w7nMZd5ol8Lp6arSE8HZIe/hpRSA63iRbYDcuYrnfTjl/S1lhzj+ufq7PvZqKEWy2AnU1rBA8ajB03KRsalE3gTp9bZKH4vYKrkn7CMXADZThHaI4/+4xksLflGeDF/6Ol96kUcxH7Jgqh47FtMEsx3dvNOEk/HXbaB/1EGszl+I/Hto0ijXm/IX9uy8txyDuqsMGm3Zby+CrfReB2SGzTGMQEqg3AMTUqaKYbUfkrh3YDTrtQzJSbdL8u0fV1XOw9bsem/lymlP9qg3AIlBbcvWU4PK5Av6+G/L24RgG5QpfLmJfTm94h1DewHmrIHNqxbIfqMcCFSAsuIpBRTnWJA4OIfNS8duF/IpO8TtvlerqGdu0JrF9SoNvfJ74uspnUEb15NB2aoeoVXUURlP4G6/qoMM7hODSQszn7aN9gsIo0HvkIMKd0veDtI9N+PPbA5QRENlolfNvSPsYFBngfn9LekZYjroRonBsmn8tP39DBnFnh77j5hqXSEVYK5M/+61+HwTln9Fl5WAnB9EQ+sb71jVGUvibknHQ3j6hbQ/lWfO9NLXnJrRP0Cc8//Rrw4bm7qN9LA1Tr8fVbpPzjzP48tP62gA0V7RsYjxI/2lB18J1BGd9FgFXZ6WoKTS5diF/mdW+3dVeAbIP2WxOMXWyBbA5yxHl85Scvxrm2VkMY6bcJkZS+JuayrDQPqZQ4C7EUtG2t493YDQ0d1t7ZH6bjJnRhD+v3XG0T5uav/98aPYY5+2jKwFys48QQsZ+2/qROpy/Hv7Yz/mHqC0zmerqGduyWNpHTVVrc3u27LcpbYrmLw2+gfKS5t8CzL46+PAOruPllDf74i/H9vxjIzM6y+Z4+xhtsbkjyuw2IcOJXaMejtX8oznjBiGdQ7DGYXLVZdQ5xlzYFhLkNlrES/sE+qksy0/7xPVHdeCLFXCxT8im+cfUyU1ps28UBl8o4R2C9ant7R6jKfznOLxDaLrP7Yi2s1zXvWBHk53Ty/nbtTcVUjBY4/n34zpzFgRrbjT/OhqyCv3FNQZ5M62kffLPXo9Y9yd0vbYNS/yL/fz9lEBBzp+98tdCjdR9fOx8miZtbYYXdRUt1Z6R+fkT63ptdqMuMZrCf47DO7hgevmEBXQ1BbdTcH3CfQZfFS6Db0n7+DV/V3vI+NHlk/LdkpDsD7ZLe3HlIXuh5X3JPntc2kdppC9ssbb4znNhocFJGi79nD9XQGafTQK7xdI+WjphORZAE/krbS2k9OmgE0bi/Jtjrv38XShfean5B9I3oX2YhXPdH12aixw8bPVFb+MYaI+JQYZ0Dua3fOdyvGPE8wbRhL+tDVJoa3Sbu2A3FafP2Oq4yFY92aq0T+wtF8anM53QPwHlPkTUWWOCUdQrj0naBwi/k3p7mZU3wEgK/6q3z2Cr50736wgcLu0T2s9cvtSceP4yve116HkMvqqB0r3a1SivwxW+XYZ0jtHaTOGU0T7hBqjl2u5T7J7Poe1GpYtiHW8f83hl9boIUFI1z2npLN+jArux42iZ9SprGBQ7Vqg4zor4NjGSwn+u/fzd8fx17SOsGdanfThaRqZpcw2+wtp5C4Ovjfbpl7SGK3aNeo2ZTzQfbU6Ng0IhGNtH++VPWwyl2edYj1ixfWa1e1U9b4sZ5TP4us7o4R1ELYNvVRuuzgR8d8n2OErax5NRgW0LywEo1LnmL/s+ed8RLZ/yPWn+NTHXm7k4taH802aY45bDDekc7mgiKGw190VHewrO37OBe4/cmq1aZte0jy950OAbcdpGv9jaodE+DLGk0z4Wzd9m8K2h+ZszvlZcPeVsgsqZole7t5QlrGc9TRPV73ErfOslFMV/uoIVtMMpCkAy+NbEXPj527w9TJjaR3ijjCq4XilBt0Ch85Gh+kXffl0Fn+nR/Md6FBSIQBkHpSvEapoqwvvnKs9fn+A52yHz9Ho8V09VkPs0f7Vf+ZQAN2WjS/82Vviaz18I/3Dno9G4ctEMTW0eC+bnDjKWelUDt7x9YVdd9zV3gZEU/nOh+du0jGqi7IOv+Vdfdm6nCNI+KMPNcuoXsNM+UvO32SJmFeHvCmOt0T6I1Pwj58a+e1fH7dZVdsjV06yrR4wKEKZ9sjr1XuUTOO71KEp5aGeFr5XC9Cg/VXtTPO0jLN9jhCq7nkqfLvuAGq8qHJ5DKTNx/vVgdtVBsD62jmbCXOQVwzSUeZiaf1BTBUABH+6+nt6mNfk0f2l0zjyCzKk7KvlkHBQuosM7eF6osGYfKNsy+IeoLlknl/bpB2gfWbYtqqdNgIdCTmcGX1Ernr9ZdCHAtRW+vOdhzphD2rstvIP8HufqyUtbLdNc5MUrL2b7zDYwmsK/4u3TvfS3+RSbsE19fbCdbsvVU0AENW3dW8eOXt6D7Iu8+nmaUvMP7V4W86hitSO/5u/PGxOKg6tlyvNc2kd9Hq77ZK4k9Ql/p+ZfrEMRuebvblNgkqu1C1D7vv/++GbS3KduHZAjukxd3VsIfbAraJ9A5bbd4LpEK8KfiC4gokeJaD0RXWQ5/14i2klE9+V//62Nej3t0X93unQoh/K03N4+etJwR7QJVF5zOJp/iGM3/cWti7zkCl+b5p+3NeP87ZqX+ive4MtPC/gHW+6iOHd+fh4zvLB6f3xQn73ruQmjYnV24WpHtQxlIBOhyK+8h2Dj7X05fauU61BNLuXDh9rXptSjblAUXnrjvuYu0HgDdyIaA/BFAK8DsBXAXUS0SgjxsJH0u0KIDzStj9WmShu7r5PzqMywDnWoBm6HDA0SQohgCGUzKqetaunn79tyMvP2Kcsx21GAIgfqyBfElzrmxbTn1++V+lktSy+TG9tHp8jcadR06gDsaofreBbeQbD2ea4eNwW2FIYl7VNnAZqtbE6bQmG2ueXYYB2cinuoXDMzNlNWRvfCvw3N/6UA1gshNgghpgB8B8BbWii3Nqqa/2Dh1viMz0A5oa0R/Xl5mj83bovT4OuJ7SNX+I717D7oZr4sto+32c72ceCnfeIFinZe+y4sR6tpS2qAJ5RCK3yBqkZdUG+2cBBBr7SMu67jMGGWXA7+pRD20z4ezZ/bBlH9Huft426Tv97SnqG6U3NjM2VlcFtZH20I/zMBbFF+b82PmXgrEd1PRD8gorNtBRHRhUS0hojW7Ny5s3aDKl11ANKfE8fG3MEpbPCtJpBG1NAlcSJAUqAc045huy5fSGdJBWXhC0qBotdRfo919cxipLOTBzRNvlZmPa9L/+oxS12F5s+mfco0Lm3cnKH5NH+XUdEUmq3s4WsZDfwG34iynGUo72TAAyuU35fXRvvIYz1lFT3H/bqsm9/OumhD+Nt6htn0/wCwQgjxQgDXAviGrSAhxKVCiJVCiJXLly+v3yCjRU05f86LachJK0zeMWb6Wrp68noFy8+f/FE0zWuyleib0hYrfBU/fzOZmS9qha+jTb70znOBgsIzLmH55q+rFBDcnZ4Ymj90L5piALZ6+4TryRYDutsU8hiylVmc9z4Qd946e1rU4/z138GV+0o+NUQGMTn/+RjeYSsAVZM/C8A2NYEQYrcQYjL/+c8AfrWFep1oe5EXp7/oBqpwGk65tmlrm/H8g94+ffWa7DsRSU8Qq8FX1WwNe4etnXVW+LYVpbEp7aNrqn4tUx7WDL6Ml12P6mm/Uf2K5i9pH5u3j0uYKW0V7cT2qQpSvzD07QXBfeK22XiUslCzXn0bxxhXz/L7fNH87wJwHhE9k4iWAHgHgFVqAiI6Q/n5ZgDrWqiXjaarRnmrL8NpTAEeXORlOc/1//UG9JJtCXL+6stjf9F9nL+6T7BrJyU1AF3IBlFBQIBUk7sTc8rxewtpzfLXZzx/bmwf9Xm45LEwBmlJ+yyyk/4O5IKLFc+/njKS2Sb8fdTVzlqB3RwzTx+4M47KUXNS41kLo2WzNbhDNPb2EULMENEHAFwNYAzA14QQDxHRxwGsEUKsAvBBInozgBkAewC8t2m9PlRpn2aInoIFNKqiIwY9cqrHQi6cZV3hdOoClFAZAnZZUUb1rJ6dUWmfgnM1XqhGBl/HiORAE81f5neurDXcI331CSOdL/aRCn2A9Wj+2u/yGVTTBvpprsF6vX1cx0OzWvjtNbYFWtyyy3R6/zWPxcI9yzHaB/3ZloHd/OX7ZjtdoLHwBwAhxFUArjKOfUz5/lEAH22jLg6qUT2blRerFYb0mTqrDW31+ODT/CkvR12AYoNJZfj8/G0D2ayi+bsEorlBScyjClEHJpqGCfalsGv+/rTxBt/yu1MeG+Ohf4Wvv30yDTfst37crjVrgd3cxVYUD61spjKm0yiiciwmvy9vpX2ivH41vMMounoOHXrGVTVe5BUprF3JzB28QqXZyuEKu6CfP8LeNRzap9jG0XJS1TpdNgvzdwxFp75k3PQuNKV9rPyyqx8Y/HO2k1e4fq6fvzW8QxTnnwsuGc/f+0zi3glRfvELQ4vgNssKweYxFDOLd21IY0lYSScPqZx/jKvnfOH8hw4VYd+W5s/rqx5uUBcKMQuHJOTLHOobLD9/RPj5OwStHGitIZ3zY4tU2sfTzmww8ja7kjeO8/eUxSjIv/CoWk8o1n2530E7IZ1l2WpJswr15muzCtMmxfUI8yHWV9/n6skP7KYK01yBi4iZU/FMi9L8s+/ZQkq3XczM5yqzC4ym8Df6amNvH4enipZG01TsaUrOP/vC8cWXsAWr8oETPrYXiOevCkRXGC7fHr6q4HG52pk8duwsLYY6q7uiVCLe9uM4LPTTatRTHzhRPc21D+pai2o7eNKsjdg+pSZcUiC+R6fbUEzNP262oX6P0vyZ9Vo5f8iBHYXyGbSDWGaPXWI0hb/5uyHpHzLgAf7OapbTNz7d9aplyjxM4c/R/Fvw9ilpH0sb+uUL4KJCqt4+3mY728eB9/lxOH+m5i+7glsw6veCy/lzZidCGPRBDc7fdEzwxvMPDHDlb6F/wi+IfUHOuE/dJkybzBRDSp1aV+HnT35q1FXfAGT/iAr/lsM7mAHZbLAZl6pp9Ol0nVWl3MBuPOOSYfD1aOUC9vZydvIaY8b26drP319WOI3fZqDPkrL0fs1ai33E0fyNRlq9Nx3P0L7C116paRz1efuEKM6yXWY7QzSaMoDV1fwt3+NsRGajmfm0vPXCOwwisNuICn//71iwaB/lu4tykUcl79htYLdQ2aLCsVc1GD29V/MPrPDl0D6qZwQHrtmIO707MceFluuXHpzeG797xJMrHOO4MOr3cv7s9rmfCXdnOdtCLfa6CU+/9NZpBCaMyWtLyx3o1J9EfruYq74BKP4jKvwrvwdA+2ijtj1NxdMlqMVXtclWA7tBf7F9S/Jdrnm+Ka2kdBYp7ixmKlN4xAZ2i1u04zvHEP7M529y+pW6+vqzzDj/cP1mYDebQt4XjvAO1lmCo33GDNWW10wbKtvGn/uu2DeT5j5yNV0d92ozpXOwrMj+UlHqKRsUxYR3SJp/TVRon8aenkL7DCH0Qrhi27vSZ2n1zxB4sX38mr/ePn94B2tIZ4VyKNpvVKKHd/DHGqrCvxuULbXzHIdzZ878QkHE5GFVQHC6lsmD2zdxt2v+9s1c/A3kcP5cDxjbrJJNozE1cF/bhPHJyu/pqyrslFZ2UKUyo7x9BqD6j6TwN/t5W4u86moqRRqjvDqcP3ff2tBqwiy2D2kvdtUHX0nveFnLPXwtmn9+jIicAlHNFr3Iqx8/jXcJeY4txf/8+Zq/eZ4b26dK+9jT9C19MWY3u8o6hDqcf0Vbr/7mr5swy3Zmc7ahDYMvv94yrbqWJkbZS94+NVFZ4TsI2kf57qJzzOl0jCZgGglD4PCLFe8aj4YlYNecfbsUyfAOi5RFXmYZJpURbfCNeJuFo52yrGB+3/O3aZkBjlhdBMfxP+dQZELo97iO5m+6JHtDgPCd7it1eAdT7bs5cDCrtGnSMbRPZdDhDnRlG9UNk2IMvknzr4k5MfhatAxLQXk5Mp2/XpsHSeFC5s8aDuxWlOHW/M2dvGxF+jZwV71ZXLSVvsiLvBSDCfUlY6UXbpqI5+rpv6dluuox2M7nn/4VtCWq3j582seV1t4+XfP3zRqctI9F2Pva6WqDPS/vqVsXecVo/kxbQ3WGoEf1lMpnzLqetMK3JTR19Qy9zID+sFyeI6YLHccX3/zO9a7wlS09d4j0bRx902tz8ZAEh/bR/fzdAwzQfUhnrq+2Kz/vHKPDoLwXXIOvqRlywjSrq6yraV31lHUA/nUy3P5opX28Nhj1u3Ce89apluFohze/8TsUDkPNp9I+ZUhnf302Za9LjKTwNznK5ou87ILLlgYIa0Nsg6/m7VOtxwffdFylBnTO3yjDEDa29vpcPWf7Ar3cqCyzcpfMcxDSHmPSs2gfzznblD24TaIiIDjXURkoHW3UYvvI2YXV1ZM3C/LNTEL2rTJd9infRSH83m663cIsm/kOqGVID6uI8A5cW4MtnbaNI3eRl+eau0ArUT2HDVVXz2bg0DQcY41pSAt2REPz1toSyOrraP2sd1q8fYQxiIU1Eent4wrvQLmrGyukc2DFsQkzdn0IfSFADTR/bngP3zH1uDw9xo3tYyRhGXzr0D7Gbz/twxtAKit8PRRc1gah/dLqZApwq/LEy2ppA3+gU9fEqHasGM5/EKT/SGr+XXL+PJdAVznyPFfzV77nP2aNl8jZBo80k8Y2m7DV6CvlJcu05mqZoT18e/kiFxd1psWrqbGBe6z3BldY2dP4yrbN0vxpdT//YPWVWEvWRV7G7MYb0plJY9RZ5FUViP52Vtqg9D3bAjEObLI0Tllwl+c7LlC2safYsUKDlr5zHruZtTGimn+7tI+q+XO0pWB4B+FPV6Z3lxGCn/PPyjHvkzm4VWOyV8sK7eFL+T/XgGdq/lErfBHJ4Qq34ODRPl7pr9TDe64qp16H9nGFd7B5+9g3c/G3z1ePK21RtlF4rMeOb8ETP7BbtS/H0YTsYcbIV7ZZdV8Oav599zV3gZHU/JtG8TShaq0czdGpDRlCP+Rbbl012+d1Yl/ZcnVlppUrK3wNTdp8AW11jnn4zJl+GULCpQ3ri7ziA7vFaf7u9DHbcNrbotZT1mdvhywvF8zEEzS1wjvI2UUE7WPWU4f2qdh2+uZ5v7He9DRTwZWLNrtBkxW+7EVe0Gmfnoca1ct3190FRlL4Nyb5Kyi1VtdDUY8HXyrmFNSqTTM7sdfgm7fR9PYxQwNUFnlZrt7nw9wXedhocm/mYg4aMZM0V7whd3q3QOb6+Yd892U69dNWTpYHlcHRB47mb/bROn7+5uE63j6hkAwh2kftF9WyuJp/NU+MUOV6GVVnJko9ymw2pKj4rrkLLAjapykKrUXwXpjwCt9c8w88YF+wtNAgFDL4CuTGKM3P37gOjWO2d96xXK1xbeMop72uabeaL5MxMQbfOA43S2svn1OMb99ZXdDon/Z2ZHkkJ8yK7cPR/I17UmsbR+OML54/d9Gc6ewgPPUDRt+rrflXFZlY12BXeVo62+9iVlfasUIL4vq2TtQhWtH8iegCInqUiNYT0UWW80uJ6Lv5+TuIaEUb9brb0255usHXn0ams6bRFf+4zmAccxvrwmUXnKS5wtcQbrr7ol1Vk4LB7epJWtRKswg9qidF0z5Rmhx89y1ckm9Vqno8xC+rs6BsAOYJNPOZ2m6V2Ud92zg674UxkHP3fNCPm3WZn37nCR/tE9KgrVp+aES2lWNegyOd2fe1eP7gh3eYd5w/EY0B+CKA1wN4LoB3EtFzjWTvB7BXCPFsAJ8F8Kmm9Xrb1HJ5qnslR/MLaUPc1YZ24V+2xd6O8KyicPWErj32+3qdahkuTS20h6+MbeI0+Cq/zfaEIER4AK2kdz4bTn43T20/7tIUS+FU0mLxmr9zha9FEamzjaOvnqJNTvtWVSDqn34vHr3vGWUFJHiR1UKjxAhVrqHZdrhc4VsqNHIm7K7PX2bbaEPzfymA9UKIDUKIKQDfAfAWI81bAHwj//4DAK+hpi44HsT4inNQamrujmfT/MLlhTT/6rHipQgMQuHwDrkPvrrCF7pw0zujXfD5vH1m+6Lwc3Y1WyuT4gbuWFdP30yBz/m7Turp1E9bOUWdxiI4H0yN3Bnbx6b5W950Lo1RR/OvaMOVz6o6oVOOah1wprNBnrYZUGNdgzn1+jh/lVrtC/5AOghXzzaE/5kAtii/t+bHrGmEEDMA9gM4uYW6rWid9lG0FudDsbxwJkzeM7Q03nbejLtSbUau4Xhpnzy8A6orfF2DmEvwSYOla5bS6+WLvBwDXpPwDqGFQpX0lvrVssL1+Qb/qqYa7CrKM+BchUmFWDV/o4Vebx9X+4x74ef8XX3dLFP/NO1LZlma5s/UwM3zthlQrGuw3j57uupAp8fzV50ifLSmvnNe99K/DeHvWmUemwZEdCERrSGiNTt37mzQoJY1f+WT4+0R8p/m+hx7aZ8AX+ulffJQyGZUz74QELJB8OsAAB5TSURBVIbGJWWGgP26evlCMdtANdPvK5p/OYCq0KN61gjsFvOOVJXNAizah2vwDTwjdRaUbfbBm3lwdhvLZkOKEPX6+fvbJ+GbpHNX25q0i6odF/Vq5brfp9BdUAeYyrGo8A5Voe6rT/1d3Fsq759c8e6CLURIl2hD+G8FcLby+ywA21xpiGgRgOMB7DELEkJcKoRYKYRYuXz58votalnzV42sbm0pphz9dyi9tQxXO/IzXj///J9cgKWc0Dq4NNjKNtuuXpZgu5R+H0GDr8b6SOsnE9wV10VdcHP2nABlNm1VPVetz9EOKQjVdRDOQUURgqarp+XtFYZU9Rl8uQOhz8+fMyCpVZUDXzUct3utjJnOX5f5ntWNjW/mCoVqL/IZfbpQoEQgPLZnttMF2hD+dwE4j4ieSURLALwDwCojzSoA78m/vw3A9aLDq+tskZeAphlraSLK4bp62jpbiE/muLRJIUYEUE89XqW1ND9+S5EyRIRrQZqM7eMycuvhHeLG7UzD4qf3bf7C4/x5IaFDz0gon9LVk6NVmgZ4e1TPqgZNFKf5Vw2+1mR5+5jC31RaLN2p77jWyoKxEO1j1qkkb+Lq6XpGZt8XSl6VWp0V1VX1Klz2tq7Q2M9fCDFDRB8AcDWAMQBfE0I8REQfB7BGCLEKwGUA/oWI1iPT+N/RtF4f2rYly+dgLoLS0jA5Y7W8UBZviAanxTfPG3D1lH1QvVNZp9XzZfdS6FNZ9Xz+n532kYLHrYWZG7jH0D6hVaImuLSNbEv15Q8LdFmPtx0KBSLvH8dfnhPVM3tWZbqZfPZm5V0Z1wLU28bRVZd67dVZoH2W45st+tqkvrfcvFo9zBmH7TrUqLlqYDc/5++uuwu0sshLCHEVgKuMYx9Tvh8B8PY26uKgfVfPUoNo5CqIshxWvSEBbm2HYOTNpL+5eYrNe6aIRe4SnDmtY12QJgQW9zJ9vpyR2NurFMeGYzLiTc9dlJQNeWZ+Hu1nDvKVtGo6OeAxBHGF9nFp/oam63KhdV9LuB4Jbjz/KhVjEa5quZoW7E5nhfEOaPcwQvrbjNYsJU/Jq9rVMtpneDT/kQzv0LoTqSK4mrBVsflDwdmsxzl58/9Nbx8brVGcdwhan8FX2gyyImStejo1W8UGEYBALOdf/m+iOug5fOgd9Wm0j+WYWY5aj8/g6/KAAWDVcswBUX8G7rJd7QPqxfZxlal6Qvk0en9sH3+dXs2f1Vp7Pb5FnnpGlfbRyUyvn7/nmrvASAr/tv38y84TF0jMhNdV1FpvfB2FPcGTWXZi1RiVta/a6QqDL+wvuhTXtur6fTnAqF5Kepoq7eNstqX8yGm85/5XeG5HOASnJ5fzhzutXATnc/XUtHgjxLZrJy/1WgrqTdJ8xvO2IYbz5y6yszk7+J6dz/gZeubmDFufldV/gQV4g4d0qACqfdrWryRm+u5r7gIjKfzbhm+qGlUO4h5qmLqxHc/zeuqRRkFTI7S9kCpfaSvSx9PPCmUzF4XrdYGK/3jwee9Y0zM1d8AdNM1Jz6gCJkDvqYJQPgOOFs4RyuZzKgy++TMyZ3r29um/fQLL3GDGBVMLD71LOv9tlhXQ/PvVuoq8UcqXTfMPF6AqUXKFu4RPMbU5DXSJkRT+bdM+qo9yk4dSZ0WqC25NMaz5y7gqpuDOOHFTwJSunjb4BPZMX6DXg9fVUy8sjvbxuV7a4NPc2bSPy+CP6osbMspzYvtorrdGIuu9MmdWQjf4qi6foT4kwRVYPtgWJ3o1f83PP1bzN3+7y/KWI6q/eZp/eb3Z2pXyHHeR17yI7TOM6HaRV5OC4lakhqgbaxXFeW8zIFB1rbSFPygNvg7ax6P5F5u5EJV7qAY0/xjaJ5ZG8xlsbQbfan6fNq+kU9Jb26Hw3qpmaBOktoVKQJWyU9PrXjNl/CCZr0wbnm0A/j182Ru4qy8Rwp5aflfPUF16X7M9Gw6qwp+n/FU0f43z53lODUDxH03hzxEgcaGAs09z9WQsojXVgAC318GYlkrbheHtI+D2KHF1fF8kTrmNoyxb/XQhNrBbFI3mSW8KFFs7fAJLn7JX6QY9bfmpxleypa+GWihnYnYPnmp4h8zbJ/tdh/P3GimZt99cfxLSonWDr6H5B11pzU91MIzpL2a9/PdLplLvPcBf5JU0/5rgCJA4ISyKz0aKv8td0oGwx47lOKP8zFAqKh3TJhgLrRRuzd91v6WA6hFZX0R7WeH2S/gCtQFVLxXfzK2yvsFRZpTm6KKIlHuhelzZUldW22r8sT19X4ji2mUkSVmHuX+Dvd066gR2q5ZZznaK356sPt/8MO3TkuZvtililiPb2DMULO4ir0Go/qMp/Blp4hYH5Z8iTnOo1KmETObMToILtWx1cKaliieCFtLZMrORQb1cA5/JaVbOkx7bxxdbJYbxl3YE33M06QpfSObKvXa5UQa0eSCC9hGSFshga1t10Z39u5peCP3aSeH89TyuWVCE5s/29pHtKz/9Bl9F+BvpYl095Zdsu0xWc40Cyp8s2gflPTQVGu4ir6T51wRHe4y5tXUiArrqlCX4fKeLer0vVph+cJabCzGzBTZqR4oNl+CjgItOJbaPp12+WYSJsR4FaTSzKC5n74JvhXfMKlKVAlE9ruy0j/677DfCY5SuChzpsaPZeFyhSsw+4BNYXCFl4eF9ioBm/DTSBTV/Zaau1pn1Gf47bPX24cgARVEyF1JyArup70uXGFHhzxCsNTh/YdGMYyC9bADeWoSQ0TbmuJ4oG8jM+2TT/NXViVZaCH5tJqOW3Ju5VNMy2o/cN96jyQM22ofH2cu2VNIU/9nyG+ncSRVvoPL+yPaZqMzEAoJEUovqtbsWeXFDlXipCi4VUpQdqj2Drvnby3LWZc4y8uMq/chBJWlA2dDyKQm1gdgjceU1L+r1ohwZ6mIkhT8HMZ2gLVfPbPDIvnM0/1qcP0NnKBZ5Wco0c6ucv9oc2fwKp2kUKgWP+UK6wKV9xnrk1eQBG+3jvm9VqsOmVbu9i4Se0HKwmlraRLyav/Fbo30sJWdasjAGiVKAmzSfDVXjtz2dr4xqu/SELmVCwhfegR/YTU8fq/mbSc2geS70+9lbWL4j5TlOqIxeL9E+naLOvW2q+auLhHzuc2V9HuHvOMemL4SNFqkuYulpnL+qzUhh4hdIUvCUwt+j+RNvRgRk9y80DTcXJ/kEDu++uQdXWwgBlsFXuWZb06o2GL/BVyB37+ypwr+0y6hZGs0eHe1zoRTIpSLlu+fNArvps0yZfox4m+YU9Zi2BjAXeeV1lwOtPgtz5pODFA2G91mwwr8u7dPkmchOAfhXTUqEtmK0Hmd2ThnPX4VtZiMHKXOBmkubMTVmqdmWHhjudpnbSvrQyzV/H29s3mKfwOEZOT0zP+V4aJYjlM+Qwdd80CFXTzkgqoOERqcpWdwDYXgWJMHl/M3Aflk2j+avhbLQhXioRjOdUN65WNdg8zfLoSKfkcq7pvZDX/eeVdqZNP8OEXNrVYNvo9ggiiGIZfD1VNVEaysMpRaDqNvfXRd8peZvCHujrizwm/pC+hvI9feRU3hfeXZXT782XrbDnsYt+0Xle2iAlgbfGFdPdaC1av75szUH59LVU22zv30SvifCfR2E8g7Jun15zb0LbOsoXKho/vlxSRWyYSQ2N8pxZkM5sAP6O8Kh0KLbWRMLVvjX1vwbPBSVNuIZfD2av0uIMRtikf1WYary0Rrto3yqRiwr5+/ZzMWsK87g6y+vco896at7Cdu0areBU30cIYpL1X5Vrdzq6mk8j5DPuFQwXIOEzvnz+lAbrp7mbCi0RsMM72C7v6G6YNTZo0jO31Iux6YmvebkvXbdfxPymsci21kXC1b41+E1QzylD5LGK/hHxp2vQ/twOk0/V01M4WijUVStVNf85Xm/QCKp+Rd1uNuXhYIINh9Adv9Ci+Zs3j7c+2bX/N2V2cIwuK5ZlU1mbCVfuYBC+8Dh55+XM1bh/Esbja++rE7zXjSnfSq0n/D3VX0Dd72/c12uzRlA1mf4qBipA/1NSyuEoiD5Z2tFfSo9FdHOuljAwj9eA8hkZr3HIrUOzagTgDduiuMU57JkyFmrH7xRsGxnNuspz5XCxLWACMV5EFU0PxfYtA9JP393gebgFhPewQZzANTPCS0dlLRm2Zr/uTp4Wsp2GeABd0hnIfQ1AHIAtqW1XotxuA3Nv0wmiv99fcHU/PXQB6G6yjrUz7GGrp5M1qdIV9I+5Tm/t4/azqT5d4bYgGAyj8/A6IPkvWW1HIOv19vHcZyl+edx8M1+aDP4qpSEbvAtNUkbn1zkV46H/PKJ/H7QKqTxLsrP33J96jmzLSZ8NgZbucHZjmDQPqbmr9xrq+af9zFzkCDLM3L3If03x0gZgjn4h0KlzJhat2Vmxa1LDiS9wlge12aJkLJR5Mttg1KRMT2vXFBdUhPn3yHqBHaD5+UPQS50Uh9wCL4Xi6u1WdPkf6aWbdPGNNpHOa45j1gMW2V+3ZXR1z6ytMmFws/fk8a8xQLu+1Y9budUOH7+1R2gjLTFjCBs8HU9D/N7WVcpeFTNs2d5Rty9DVrx8zcomJAgNcMb2wzq3Lok5DsX2+aiXibtK/u5zb2WE9J5Xvj5E9FJRHQNET2Wf57oSDdLRPflf6ua1NkWojR/JU/dZ1Jo/nl+Du1Tz9uHoZnkg5BN83e5PJprAErXQbsniYS5gXVI82dz/sVg6k5jDka+wYezsCkbHHkCs6gQVWFVie3j0fwrK64DnL96TtvAxab5MwYyVHIZaSNfCJWK8dI+Jucfo/kbn4XCVSgh9V5i3zoPs/6+UA2+/gFbYlZp5wAU/8aa/0UArhNCnAfguvy3DRNCiBfnf29uWGcriNHgdVfPevWZ4Qg4tI93Jy8X/cBoi2ulsk2TdhkkZfulKyfg4vyVEBGB9oWCxGntyo1ifgOyDh9NxDOUu3uNTTgJyzmgpA4F9I1WfNSRRCi8g3y2arkE+zNyDoQVzyd7OiBiA/d+OeBln/5ZtK75m/fXX6cZ20cm70Vq/tVqAlNNJV+2jiaDzvn78pWyYT6Ed3gLgG/k378B4HcbljcwxAhxlUOsOx2T+7TGaf4e4e/UYDmav9QOq5y4U9M0tB7Vk6EIHWDREEnhm1WDtxsxBt+4wdiXlEWXeWYOmh86dKFToQ8Mz5eY2D7qI7PdKRk5NhP4pV1GHwrsZZfH9d++J8IWpEadIQpQ1/wN2iek+Qv9s6L5R3oLlb95ylWhJFoGXO+CuSK2z/ww+J4mhNgOAPnnqY50RxHRGiK6nYiGYoCIE/7ly1r3kRDpGjdvha+nTa7jjAb28zevohlb8stmmoLWFt7B1q/Vywy98FF+/nKFb8SD9KXnav6uO68eLTV/fRConBdycIQ1ne2YL46SbIcAAOVeysiqZh5nHzLOcHzTQ+iXN6Wow3fL9c1c9EGG6+1jev2oigwHZrJQ/1XTAaojhEr7uPP1lXwDkP1YFEpARNcCON1y6n9E1HOOEGIbET0LwPVE9IAQ4nFLXRcCuBAAzjnnnIji41FnsUfIu8QH+UDli8Xx8/fW5dT8w+VKAWH39jE0f8VYq7ZHNWapA4HZ5IzKUbVNf9uYsj/z2Q69jBWDr1vgcO8bJxha2V/kOVPzL7+ZBvFKnZWZmP142Y5MQ8meS3aMHHU0We0sEe3to/z2+vkbse1tMytnXWadUvPvleXFtFlrR8SsoRx8y+OsRV49qu1YEoOg8BdCvNZ1joieJqIzhBDbiegMADscZWzLPzcQ0Q0AzgdQEf5CiEsBXAoAK1eu7PTqY4Q4d6rqQ4907rKpn7+HfQ6WK6/DbEG/X82t8fUOzb8cCKhSf69nuou622fGPvehNPhGPMe++7mzyvE8f1v4AVPgqeVkdUpKxt2G6vMI3J9cwVDvZU+tRGuzowgP1WQilvZR740vq0b7QE8belTlftF6+jHPIGtvc3XQ5mn+etRcVeB7vX2KQYpqu5THoCntswrAe/Lv7wHwYzMBEZ1IREvz76cAeAWAhxvW2xhxtE/+ifqxfbIXMdLg66mrkQYrRCEgtOOwGftIyaMcV87bVo+W6UrKIfTCq9pqCJL2iXkavpeXtwkOT/MT5qe5GUlBB3Fi+xjPg9NGkQkZ2zNSa2Fz/j7hz+hw2YxQF8j9wMOruHpaAr25IIxvBZ1SGHzraf7cmb+c4ceGdyhcPWkwmn9T4f9JAK8joscAvC7/DSJaSURfzdP8CoA1RLQWwGoAnxRCzCvhr0YkrPtIiHRh1djg6zrOEmJ2zd+28EbX/MuzBaVgfDehGhs5Bt+4Fb5xg7FvYRFntyjfzE87btANZq1qfyKguHE2QVqhYDwDhTyeGXx1F1zbXXXei8qA46EqGPdf28NZDnyo3hcV1fAOpkj3wND4C6o1cO8qxZh0nef5m9XLARiI4fwVzb972R+mfXwQQuwG8BrL8TUA/lv+/VYAL2hSTxeIGVlV17G6e/j2CJjul8KK5+oZblMlD6N5Ujs0xx8bD9tTNX/llLo5iB7hs5qftAHE3a5og2+oPOO3j2dmaXSedCZNoZ8z21EKQJB/uKs+D38b1WdbcM491VbgblfRPvMAQ2D5QEq6kof391U9nn9cYLfKgrL8PSoMvkxKxcb5c/Nlzc/fi0BIjqJ8JbzDABT/hbvCt44MF6j/TOq4etbayYs9LQXMt9o2FXcZfCVUrdKp+QfK0MpiCn8Z/yRkQ1DR1ODrcy31ZXcGdhMcg6/+O8T5q4+wDOlAVu2dvcLXU5/PI01C9n3ZPlmHr6ua2zjqsX38D0tUPrNvi4oFcry32LYym6f5Z5JC9baS4CzymhcrfOcz6hp863v7ZNqMGrM7BG9sH5cQ4nROIQrBo8K2YlbT2i3HVYOvTUroi5jCK3JjN3CPi9Hkfn7cQZNzzjT4usI7SOpNNYiH6gzaewvNv7S19Eh/jq6yJVyRXV31BUGq22U56/EJYU3Y9/WUoRrVEBJZG7PP2PAOVbqOafMROq2q3j3f8yu9kgazwrcR7TOf8SeX34UlHH9LAJt2jwMAtu4dx198//5a9S1e1MPBAzP4P7+5BgBP+N/6+G7v+dddfGPl2KGpmWC5Tx+cxK5DUzj35KO145v3jOMvf6hfn3zxL77mFzg8WZa9OL93qhshAVi6uIcpRR0klIPD7/+vW3HgiLt92kASwFiPsG98SmuTiUVGYZt2jzuF/20b9Hu9dFG1b/ztfzyERWP2Bn71pg340T1bAQBP7psAADyx6zBed/GNFa+tddsP4HUX34iteyfw3F96RnH/3vP1Oyt98sjMrPZbpl22eMwqlD9//XqMT87g3JOPKc8rBt/FSvvv3rTX2oeeOnBE+21Ws3RRD5Mz2TM275sNPQK+e9cWXL9uB6Zns3tx+4bdeODJ/c48at+/ZPXj+OZtm4rfP1m7DXc9sceZ98h01rY1G/fgdRffWNxDeQ/e9qVbWe/f7sNT2u9PX/0ojl4yFsz3L7dvwvRsv0jL1fzlNcfuO1AXIyv8P/XWF+DJfUfwy6cdCwD42ntX4r4t+zE108eOA0cqL5UP5512LM44fhm2789e6l//TyfjpGOWYOni7OHOzPaxec84jl6SvZAHj8zg3JOPxqL8RZ6Z7ePV//lUfP3WjRBCYOW5J+KPf+1cnHj0YvR6hFOPOwpveMHp+Nbtm/CMoxZjrEfYc3gKh6dmcPyyJZie7WNqpo+TjlmCHQeP4LRnHIWdByetHeSXTz8Opx13FJ46MIEzjl+GxWM9CCGKtk7P9rF59zgEBN72q2cBAD77hy/CL54+hE27DxfXt2iMcGBiBu962Tl45inHYMfBTCCcfeLROO0ZR+G0ZxyFa9c9jZc/62T0iHDqM5bihWedgFOPW4qb1+/CssVj2Ds+hd87/yw8+9Rj8ebN+zCTq5QnH7MUy5aMYWJqFrsPT+KM45dh16FJ/MZ5y3HacUfhvb++AtOzfUxMzeKEo5dg56FJnH3iMrzo7BOwfschbN8/gTe98Jdw7NJFEBA44/hl2HFwEqccuwQHJmbwvleswPWP7MD555yA76/ZirNOXIa+ADbvya7vl45fhp2HJnHCssWYmJ5FjwgHjkzj2KWL0CPCWScuw7knH4PrH9mB055xFC54/un47l1bsH8iEwb/ZcVJOPW4o/CmF52BVfdtw5HpWew8NOnsLwDwgrOOxy+dsAxCacd5px2L337e6XjZM0/G751/JiYdffKlK07G0sU97Bufwtt+9Sy88jnL8frnn4HNe8Zx7NJFOOvEZXjlLy/Hzx5+uqjzN59zKvZPTOOezXvxuueehpc98yT8/vln4pXPWY5949PYtm8CW/aOO/v7qccdhT2Hp7BkUQ8vPPMEXPwHL8JjOw7hyb0TuPA3noVVa7dhfGoGew5PFfdt2ZIxLB7r4dDkDPaPT+Pck4/Gi88+Ab94+iAe3n6g0j8B4LRnHIXXP/8M3PDoDmzdO4Eli3pYPNbD/okpHLNkERaNEfZPTBf38IRli7V7bYNZh3xmf/Tyc3HC0YsxzeGqAJwH4NTjjsKSRdk17RvPnv/555yI048/Cr/13NPw/bu3Yv/ENE477ijsG5/CsiVZvweAleeeBAA4anEPf/rK/4TNew7jD1aejeecfhwOHpnB9Gz2TveIsPPgJCamZ/DsU4/DkjHCxDRfPtUFDWIZcR2sXLlSrFmzZq6bkZCQkDCvQER3CyFWhtItWM4/ISEhYSEjCf+EhISEBYgk/BMSEhIWIJLwT0hISFiASMI/ISEhYQEiCf+EhISEBYgk/BMSEhIWIJLwT0hISFiAGNpFXkS0E8CmYEI3TgGwq6XmDDsW0rUCC+t6F9K1Agvreru61nOFEMtDiYZW+DcFEa3hrHIbBSykawUW1vUupGsFFtb1zvW1JtonISEhYQEiCf+EhISEBYhRFv6XznUDBoiFdK3AwrrehXStwMK63jm91pHl/BMSEhIS3BhlzT8hISEhwYGRE/5EdAERPUpE64noorluTxsgoq8R0Q4ielA5dhIRXUNEj+WfJ+bHiYg+n1///UT0krlreTyI6GwiWk1E64joISL6UH58VK/3KCK6k4jW5tf7t/nxZxLRHfn1fpeIluTHl+a/1+fnV8xl++uAiMaI6F4i+kn+e5SvdSMRPUBE9xHRmvzYUPTlkRL+RDQG4IsAXg/guQDeSUTPndtWtYLLAVxgHLsIwHVCiPMAXJf/BrJrPy//uxDAlwbUxrYwA+AjQohfAfByAH+eP8NRvd5JAK8WQrwIwIsBXEBELwfwKQCfza93L4D35+nfD2CvEOLZAD6bp5tv+BCAdcrvUb5WAPhNIcSLFbfO4ejLcjPvUfgD8GsArlZ+fxTAR+e6XS1d2woADyq/HwVwRv79DACP5t+/AuCdtnTz8Q/AjwG8biFcL4CjAdwD4GXIFv8syo8X/RrA1QB+Lf++KE9Hc932iGs8C5nAezWAnyDb5nkkrzVv90YApxjHhqIvj5TmD+BMAFuU31vzY6OI04QQ2wEg/zw1Pz4y9yCf5p8P4A6M8PXmNMh9AHYAuAbA4wD2CSHk7vTqNRXXm5/fD+Dkwba4ET4H4L8DkBvpnozRvVYAEAB+RkR3E9GF+bGh6MujtoE7WY4tNHemkbgHRHQsgB8C+LAQ4gCR7bKypJZj8+p6hRCzAF5MRCcA+DcAv2JLln/O2+slojcC2CGEuJuIXiUPW5LO+2tV8AohxDYiOhXANUT0iCftQK931DT/rQDOVn6fBWDbHLWlazxNRGcAQP65Iz8+7+8BES1GJvi/LYT4UX54ZK9XQgixD8ANyGwdJxCRVM7UayquNz9/PIA9g21pbbwCwJuJaCOA7yCjfj6H0bxWAIAQYlv+uQPZwP5SDElfHjXhfxeA83LvgSUA3gFg1Ry3qSusAvCe/Pt7kHHj8vi7c8+BlwPYL6eY8wGUqfiXAVgnhLhYOTWq17s81/hBRMsAvBaZMXQ1gLflyczrlffhbQCuFzlBPOwQQnxUCHGWEGIFsnfzeiHEuzCC1woARHQMER0nvwP4LQAPYlj68lwbRDowsLwBwC+Q8ab/Y67b09I1XQFgO4BpZNrB+5Fxn9cBeCz/PClPS8g8nh4H8ACAlXPd/shr/a/Iprr3A7gv/3vDCF/vCwHcm1/vgwA+lh9/FoA7AawH8H0AS/PjR+W/1+fnnzXX11Dzul8F4CejfK35da3N/x6S8mhY+nJa4ZuQkJCwADFqtE9CQkJCAgNJ+CckJCQsQCThn5CQkLAAkYR/QkJCwgJEEv4JCQkJCxBJ+CckJCQsQCThn5CQkLAAkYR/QkJCwgLE/w//sq9apERKcwAAAABJRU5ErkJggg==\n"
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": "mean: -1.3119904931167456e-10 std: 0.999022960333494\n",
"name": "stdout"
}
]
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "We can see that all correlations are small, close to zero and below the 95% and 99% confidence levels."
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### Stationarity"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T08:44:32.706459Z",
"start_time": "2018-11-27T08:44:31.746428Z"
},
"hidden": true
},
"cell_type": "markdown",
"source": "Time series are stationary if they do not have trend or seasonal effects. Summary statistics calculated on the time series are consistent over time, like the mean or the variance of the observations."
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:45:49.789487Z",
"end_time": "2018-11-27T12:45:49.833404Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "import statsmodels\nfrom statsmodels.tsa.stattools import adfuller\nresult = adfuller(X_train_ori[i])\nprint('ADF Statistic: %f' % result[0])\nprint('p-value: %f' % result[1])\nprint('Critical Values:')\nfor key, value in result[4].items():\n print('\\t%s: %.3f' % (key, value))\nprint()\nif result[1] < .05:\n print('This is a stationary time series')\nelse:\n print('This is not a stationary time series')",
"execution_count": 38,
"outputs": [
{
"output_type": "stream",
"text": "ADF Statistic: -21.959170\np-value: 0.000000\nCritical Values:\n\t1%: -3.443\n\t5%: -2.867\n\t10%: -2.570\n\nThis is a stationary time series\n",
"name": "stdout"
}
]
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### Differencing"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T11:01:07.329583Z",
"start_time": "2018-11-27T11:01:06.881514Z"
},
"scrolled": false,
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "from pandas.tools.plotting import autocorrelation_plot\nfrom random import randrange\n\ni = randrange(0, len(y_train))\n\nprint('i :', i)\nprint('y_train:', y_train[i])\n\nif not differencing:\n series = Series(train_df.diff(axis=1).iloc[[i]].values[0][1:])\nelse: \n Series(X_train_ori[i])\n print('Time series has already been differenced')\n\nseries.plot()\nplt.show()\n\nplt.hist(series, bins=10)\nplt.show()\n\nautocorrelation_plot(series)\nplt.show()\n\nprint('mean:', np.mean(X_train_ori), 'std:', np.std(X_train_ori))",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T08:43:18.260169Z",
"start_time": "2018-11-27T08:43:18.160584Z"
},
"hidden": true
},
"cell_type": "markdown",
"source": "White noise time series is defined by a zero mean, constant variance, and zero correlation. \nIn my opinion, the Earthquakes dataset meet this criteria. There is no structure to learn, and this makes the dataset basically unpredictable."
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T10:01:10.102691Z",
"start_time": "2018-11-27T10:01:10.031697Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Simple models (RF, DTW)"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T11:03:11.809300Z",
"start_time": "2018-11-27T11:03:11.505527Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "from sklearn.ensemble import RandomForestClassifier\nrf = RandomForestClassifier(\n bootstrap=True,\n class_weight='balanced',\n criterion='gini',\n max_depth=None,\n max_features='auto',\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n min_impurity_split=None,\n min_samples_leaf=1,\n min_samples_split=2,\n min_weight_fraction_leaf=0.0,\n n_estimators=100,\n n_jobs=-1,\n oob_score=False,\n random_state=1,\n verbose=0,\n warm_start=False)\nrf.fit(X_train, y_train)\nrf.score(X_test, y_test)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T09:33:57.396922Z",
"start_time": "2018-11-27T09:33:51.417951Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "from pyts.classification import KNNClassifier\nknn = KNNClassifier(\n n_neighbors=1,\n weights='distance',\n algorithm='auto',\n leaf_size=30,\n p=2,\n metric='fast_dtw', #'dtw' is very slow!!\n metric_params={'window_size': len(X_train[0] // 20)},\n n_jobs=-1)\nknn.fit(X_train, y_train)\nknn.score(X_test, y_test)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T00:38:04.148773Z",
"start_time": "2018-11-27T00:38:04.020311Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Visualize time series data & data transformations"
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "This is a single time series"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:04:47.941425Z",
"start_time": "2018-11-26T22:04:47.762073Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "plt.figure(figsize=(8, 8))\nplt.plot(X_train[0], color='b')\nplt.margins(x=0)\nplt.margins(y=0)\nplt.show()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "And these are all time series:"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:04:50.980058Z",
"start_time": "2018-11-26T22:04:49.503749Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "plt.figure(figsize=(15, 5))\nfor i in range(len(X_train)):\n if y_train[i] == 0:\n color = 'orange'\n plt.plot(X_train[i], color=color, alpha=.3)\n else:\n color = 'purple'\n plt.plot(X_train[i], color=color)\nplt.show()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "There are 7 encoders available. Up to 3 encoders can be applied simultaneously to the time series:\n- **'Default'**: raw time series\n- **'Area'**: time series area plot\n- **'2D'**: time series in 2D\n- **RecurrencePlots**: Recurrence Plot\n- **GASF**: Gramian Angular Summation Field\n- **GADF**: Gramian Angular Difference Field\n- **MTF**: Markov Transition Field"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:04:59.796468Z",
"start_time": "2018-11-26T22:04:58.779574Z"
},
"hidden": true,
"hide_input": true,
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "# Image transformations\nsel_image = np.random.randint(len(X_train))\nprint('Selected image:', sel_image, 'class:', y_train[sel_image], 'length:',\n X_train[sel_image].shape[0])\n\nf, axarr = plt.subplots(4, 2, figsize=(12, 24))\naxarr[0, 0].plot(X_train[sel_image], color='b')\naxarr[0, 0].set_title('Default', fontsize=16)\naxarr[0, 0].margins(x=0)\naxarr[0, 0].margins(y=0)\n\naxarr[0, 1].fill_between(\n np.arange(len(X_train[sel_image])), X_train[sel_image], color='r')\naxarr[0, 1].set_title('Area', fontsize=16)\naxarr[0, 1].margins(x=0)\naxarr[0, 1].margins(y=0)\n\naxarr[1, 0].imshow(\n uvtsto2D(X_train[sel_image]), cmap='autumn_r', origin='lower')\naxarr[1, 0].set_title('2D', fontsize=16)\n\nencoder1 = RecurrencePlots\naxarr[1, 1].imshow(\n multiencode_ts(X_train[sel_image], encoder1=encoder1),\n cmap=get_cmap(encoder1),\n origin='lower')\naxarr[1, 1].set_title('RecurrencePlots', fontsize=16)\naxarr[1, 1].set_aspect('equal')\n\nencoder1 = GASF\naxarr[2, 0].imshow(\n multiencode_ts(X_train[sel_image], encoder1=encoder1),\n cmap=get_cmap(encoder1),\n origin='lower')\naxarr[2, 0].set_title('GASF', fontsize=16)\nencoder1 = GADF\naxarr[2, 1].imshow(\n multiencode_ts(X_train[sel_image], encoder1=encoder1),\n cmap=get_cmap(encoder1),\n origin='lower')\naxarr[2, 1].set_title('GADF', fontsize=16)\n\nencoder1 = MTF\naxarr[3, 0].imshow(\n multiencode_ts(X_train[sel_image], encoder1=encoder1),\n cmap=get_cmap(encoder1),\n origin='lower')\naxarr[3, 0].set_title('MTF', fontsize=16)\n\nencoder1 = RecurrencePlots\nencoder1 = GASF\nencoder2 = GADF\naxarr[3, 1].imshow(\n multiencode_ts(X_train[sel_image], encoder1=encoder1, encoder2=encoder2),\n cmap=get_cmap(encoder1),\n origin='lower')\naxarr[3, 1].set_title('GASF_GADF', fontsize=16)\naxarr[3, 1].set_aspect('equal')\n\nplt.show()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-23T13:37:54.777084Z",
"start_time": "2018-11-23T13:37:54.754335Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Generate images"
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "### Settings"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:27:16.309762Z",
"end_time": "2018-11-27T12:27:16.332124Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "IMG_PATH = Path('my_data') / SEL_DATASET\ndirectories = ['TRAIN', 'TEST']\n\n# RecurrencePlots: image_size = len(X_train[0])\n# MTF: max image_size = 64\nimage_size = len(X_train[0])\n#image_size = 112\n#image_size = 224\n#image_size = 299\n\n\n# Available encoders:\n# raw: None, 'Area', '2D', tfms : RecurrencePlots, GASF, GADF, MTF\n# Do not combine raw and tfms\nencoder1 = RecurrencePlots\nencoder2 = None\nencoder3 = None\n\ncoordconv = True\nn_bins = image_size // 20\n\nverbose = False",
"execution_count": 23,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true,
"hide_input": true
},
"cell_type": "markdown",
"source": "### Process"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T11:19:44.884314Z",
"start_time": "2018-11-27T11:19:31.474729Z"
},
"hidden": true,
"hide_input": true,
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "if encoder1 is None:\n encoder_folder = 'Default'\nelif isinstance(encoder1, str):\n encoder_folder = encoder1\nelse:\n encoder_folder = encoder1.__name__\nif encoder2 is not None:\n encoder_folder += '_' + encoder2.__name__\nif encoder3 is not None:\n encoder_folder += '_' + encoder3.__name__\n\nmb = master_bar(directories)\n \nfor directory in mb:\n#for directory in directories:\n \n folder = IMG_PATH / encoder_folder / directory\n if os.path.exists(folder):\n shutil.rmtree(folder)\n\n if directory == 'TRAIN':\n x_sample = X_train\n y_sample = y_train\n elif directory == 'TEST':\n x_sample = X_test\n y_sample = y_test\n\n uvts = x_sample\n \n print(folder, len(y_sample))\n\n for i in progress_bar(range(len(y_sample)), parent=mb):\n #for i in [138]:\n\n img_id = encoder_folder + '_' + str(i) + '_' + str(image_size) + '.png'\n class_dir = str(y_sample[i])\n class_folder = folder / class_dir\n if not os.path.exists(class_folder):\n os.makedirs(class_folder)\n img_dir = class_folder / img_id\n\n img = multiencode_ts(\n uvts[i] ,\n encoder1=encoder1,\n encoder2=encoder2,\n encoder3=encoder3,\n sz=image_size,\n coordconv=coordconv,\n return_img=True, \n n_bins=n_bins,\n verbose=verbose)\n img.save(img_dir)\n\nprint(encoder_folder, np.array(img).shape)\ndisplay(img)\n\nif coordconv and np.asarray(img).ndim >= 3:\n if encoder2 is None:\n print()\n display(resize_img(array2img(np.asarray(img)[..., 1]), .25, .25))\n if encoder3 is None: \n print()\n display(resize_img(array2img(np.asarray(img)[..., 2]), .25, .25))",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T00:27:04.634674Z",
"start_time": "2018-11-27T00:27:04.610829Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Create dataset"
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### Settings"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-18T09:06:28.657994Z",
"start_time": "2018-11-18T09:06:28.635808Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "IMG_PATH = Path('my_data') / SEL_DATASET\ndirectories = ['TRAIN', 'TEST']\n\n# RecurrencePlots: image_size = len(X_train[0])\n# MTF: max image_size = 64\nimage_size = len(X_train[0])\n#image_size = 224\n#image_size = 299\n\n# raw: None, 'Area', '2D', tfms : RecurrencePlots, GASF, GADF, MTF\n# Do not combine raw and tfms\nencoder1 = RecurrencePlots \nencoder2 = None\nencoder3 = None",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### Process"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:27:20.891534Z",
"end_time": "2018-11-27T12:27:20.910415Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "bs = 16",
"execution_count": 24,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:27:26.193880Z",
"end_time": "2018-11-27T12:27:26.246618Z"
},
"hide_input": true,
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "if encoder1 is None:\n encoder_folder = 'Default'\nelif isinstance(encoder1, str):\n encoder_folder = encoder1\nelse:\n encoder_folder = encoder1.__name__\nif encoder2 is not None:\n encoder_folder += '_' + encoder2.__name__\nif encoder3 is not None:\n encoder_folder += '_' + encoder3.__name__\nprint(IMG_PATH / encoder_folder)\n\nnp.random.seed(42)\n'''\ndata = ImageDataBunch.from_folder(\n IMG_PATH / encoder_folder,\n train=\"TRAIN\",\n valid='TEST',\n ds_tfms=None,\n size=image_size,\n bs=bs).normalize(imagenet_stats) #num_workers=4\n '''\n\nif create_val_set: \n data = (ImageItemList.from_folder(IMG_PATH / encoder_folder)\n .random_split_by_pct(0.3)\n .label_from_folder()\n .add_test_folder('TEST')\n .databunch(bs=bs)).normalize(imagenet_stats)\nelse:\n data = (ImageItemList.from_folder(IMG_PATH / encoder_folder)\n .split_by_folder(train='TRAIN', valid='TEST')\n .label_from_folder()\n .databunch(bs=bs)).normalize(imagenet_stats)\n\nprint('classes :', data.classes)\nprint('train samples:', len(data.train_ds))\nif create_val_set: \n print('val samples :', len(data.valid_ds))\nprint('test samples :', len(data.test_ds))\nprint('img.shape :', data.train_ds.x[0].shape)",
"execution_count": 25,
"outputs": [
{
"output_type": "stream",
"text": "my_data/Earthquakes/RecurrencePlots\nclasses : ['1', '0']\ntrain samples: 323\nval samples : 138\ntest samples : 139\nimg.shape : torch.Size([3, 512, 512])\n",
"name": "stdout"
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:27:26.898776Z",
"end_time": "2018-11-27T12:27:27.463163Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "data.show_batch(rows=3, figsize=(9, 9))",
"execution_count": 26,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 648x648 with 9 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Train model"
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### Stage 1"
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "#### Instantiate model"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:24:20.011219Z",
"end_time": "2018-11-27T12:24:20.032808Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "counts = collections.Counter(y_train)\ncounts",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:24:20.626360Z",
"end_time": "2018-11-27T12:24:20.651235Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "weights = [len(y_train)/counts[i] for i in np.arange(len(counts))]\nweights",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:24:21.239562Z",
"end_time": "2018-11-27T12:24:21.264518Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "loss = nn.CrossEntropyLoss(weight=torch.tensor(weights, dtype=torch.float32)).cuda()\n#loss = nn.CrossEntropyLoss().cuda()\nloss",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:50:17.255511Z",
"end_time": "2018-11-27T12:50:18.537144Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "#arch = models.resnet18\n#arch = models.resnet34\narch = models.resnet50\n\nlearn = create_cnn(data, \n arch, \n #loss_func=loss, \n #wd=1e-2,\n metrics=accuracy)\n\nlearn.save('stage0')",
"execution_count": 39,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "#### LRfinder 1"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T23:47:04.869174Z",
"start_time": "2018-11-26T23:46:34.425528Z"
},
"hidden": true,
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.lr_find()\nlearn.recorder.plot()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:11:32.241653Z",
"start_time": "2018-11-26T22:11:12.058305Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.unfreeze()\nlearn.lr_find()\nlearn.recorder.plot()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "#### Instantiate model"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T11:59:05.884064Z",
"end_time": "2018-11-27T11:59:06.686766Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "from fastai.callbacks import SaveModelCallback\n# Add callbacks after LR finder because otherwise it breaks!!\nlearn = create_cnn(\n data,\n arch,\n metrics=accuracy,\n callback_fns=[\n partial(\n SaveModelCallback,\n monitor='valid_loss',\n mode='auto',\n every='improvement',\n name='bestmodel')\n ])",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "#### Train stage 1"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:30:02.520968Z",
"start_time": "2018-11-26T22:23:59.969753Z"
},
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "# RP 512, CONVCOORD\nlearn.load('stage0')\nlearn.fit_one_cycle(40, 1e-3)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:30:23.775449Z",
"start_time": "2018-11-26T22:30:23.513779Z"
},
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.recorder.plot_losses() ,learn.recorder.plot_metrics()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:31:41.823386Z",
"start_time": "2018-11-26T22:31:41.327781Z"
},
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.save('stage1')",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:30:10.059798Z",
"end_time": "2018-11-27T12:30:53.431827Z"
},
"trusted": true,
"hidden": true,
"scrolled": false
},
"cell_type": "code",
"source": "# RP 512\nlearn.load('stage0')\nlearn.fit_one_cycle(5)",
"execution_count": 31,
"outputs": [
{
"output_type": "stream",
"text": "Total time: 00:43\nepoch train_loss valid_loss accuracy\n1 0.911073 0.688475 0.644928 (00:08)\n2 0.733898 0.718337 0.681159 (00:08)\n3 0.548925 0.750516 0.717391 (00:08)\n4 0.401451 0.792757 0.760870 (00:08)\n5 0.332636 0.842823 0.753623 (00:08)\n\n",
"name": "stdout"
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:50:38.558688Z",
"end_time": "2018-11-27T12:56:26.621091Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "# RP 512\nlearn.load('stage0')\nlearn.fit_one_cycle(40, 1e-3)",
"execution_count": 40,
"outputs": [
{
"output_type": "stream",
"text": "Total time: 05:47\nepoch train_loss valid_loss accuracy\n1 0.992115 0.704639 0.528986 (00:08)\n2 0.876032 0.704238 0.594203 (00:08)\n3 0.793640 0.725663 0.652174 (00:08)\n4 0.686230 0.711988 0.608696 (00:08)\n5 0.574436 0.697213 0.695652 (00:08)\n6 0.504683 0.720258 0.666667 (00:08)\n7 0.456946 0.746557 0.673913 (00:08)\n8 0.395609 0.733172 0.666667 (00:08)\n9 0.336985 0.705119 0.695652 (00:08)\n10 0.297101 0.838258 0.746377 (00:08)\n11 0.274417 0.753906 0.739130 (00:08)\n12 0.246466 0.678268 0.717391 (00:08)\n13 0.218223 0.853993 0.724638 (00:08)\n14 0.225446 0.855246 0.681159 (00:08)\n15 0.212302 0.749656 0.731884 (00:08)\n16 0.202883 0.743169 0.768116 (00:08)\n17 0.188217 0.829624 0.760870 (00:08)\n18 0.165676 0.769236 0.768116 (00:08)\n19 0.143087 0.809744 0.760870 (00:08)\n20 0.123332 0.709694 0.789855 (00:08)\n21 0.177194 0.834106 0.753623 (00:08)\n22 0.228834 0.963031 0.760870 (00:08)\n23 0.185667 0.811256 0.724638 (00:08)\n24 0.149848 0.784247 0.768116 (00:08)\n25 0.129655 0.870372 0.760870 (00:08)\n26 0.140001 0.865265 0.768116 (00:08)\n27 0.112629 0.844284 0.731884 (00:08)\n28 0.113261 0.815977 0.760870 (00:08)\n29 0.092811 0.857020 0.739130 (00:08)\n30 0.084748 0.891069 0.739130 (00:08)\n31 0.077047 0.856386 0.731884 (00:08)\n32 0.071160 0.884451 0.731884 (00:08)\n33 0.064632 0.903343 0.760870 (00:08)\n34 0.059632 0.805541 0.746377 (00:08)\n35 0.052341 0.875055 0.760870 (00:08)\n36 0.049528 0.802349 0.746377 (00:08)\n37 0.048776 0.821153 0.760870 (00:08)\n38 0.044678 0.820316 0.753623 (00:08)\n39 0.044902 0.813414 0.746377 (00:08)\n40 0.043988 0.803065 0.753623 (00:08)\n\n",
"name": "stdout"
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:31:32.625177Z",
"end_time": "2018-11-27T12:31:33.106539Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "learn.save('stage1')",
"execution_count": 32,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:29:17.602578Z",
"end_time": "2018-11-27T12:29:17.837107Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "learn.predict(is_test=True)",
"execution_count": 29,
"outputs": [
{
"output_type": "error",
"ename": "TypeError",
"evalue": "predict() got an unexpected keyword argument 'is_test'",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-29-0d02944c61ce>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mis_test\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: predict() got an unexpected keyword argument 'is_test'"
]
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:19:12.018583Z",
"end_time": "2018-11-27T12:19:21.843101Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T11:44:14.002114Z",
"end_time": "2018-11-27T11:44:14.058298Z"
},
"hidden": true,
"trusted": true,
"scrolled": false
},
"cell_type": "code",
"source": "# RP 512\nlearn.load('stage0')\nlearn.fit_one_cycle(6)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T01:17:12.594743Z",
"start_time": "2018-11-27T01:15:45.410420Z"
},
"scrolled": false,
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "# RP 512\nlearn.load('stage0')\nlearn.fit_one_cycle(10)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T01:17:19.684785Z",
"start_time": "2018-11-27T01:17:19.400845Z"
},
"scrolled": false,
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.recorder.plot_losses() ,learn.recorder.plot_metrics()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T00:59:29.295313Z",
"start_time": "2018-11-27T00:59:28.799143Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.save('stage1')",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:23:01.896097Z",
"start_time": "2018-11-26T22:19:48.855456Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.fit_one_cycle(40, 3e-4)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:08:37.140827Z",
"start_time": "2018-11-26T22:07:59.382340Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.fit_one_cycle(10, 1e-3)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-23T14:20:54.892087Z",
"start_time": "2018-11-23T14:20:53.900187Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.fit_one_cycle(40, 1e-4)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-23T14:07:07.108369Z",
"start_time": "2018-11-23T14:05:38.029028Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.fit_one_cycle(10, 1e-3)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-23T13:01:00.006209Z",
"start_time": "2018-11-23T12:59:59.660151Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.fit_one_cycle(5, 3e-4)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.fit_one_cycle(5, 1e-4)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-25T10:05:12.294Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.save('stage1')",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-22T09:42:09.124024Z",
"start_time": "2018-11-22T09:36:27.142169Z"
},
"deletable": false,
"editable": false,
"run_control": {
"frozen": true
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.fit_one_cycle(40, 3e-3)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-22T09:32:50.776324Z",
"start_time": "2018-11-22T09:32:04.190301Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.load('stage0')\nlearn.fit_one_cycle(5, 3e-3)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-25T10:04:37.851067Z",
"start_time": "2018-11-25T10:04:37.717976Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.save('stage1')",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T22:12:51.712048Z",
"start_time": "2018-11-26T22:12:51.417112Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.recorder.plot_losses() ,learn.recorder.plot_metrics()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T23:51:28.488675Z",
"start_time": "2018-11-26T23:51:28.467404Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T23:59:13.512429Z",
"start_time": "2018-11-26T23:59:13.266785Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-26T23:57:06.029892Z",
"start_time": "2018-11-26T23:57:05.850757Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "### Stage 2"
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "#### LR finder 2: Unfreeze?"
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "Before unfreezing, I run LR finder again to see what could be mode benefitial, if train for a few more epochs, or unfreezing and training. "
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:31:52.032586Z",
"end_time": "2018-11-27T12:32:19.777560Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn = create_cnn(data, arch, metrics=accuracy)\nlearn.load('stage1')\nlearn.lr_find()\nlearn.recorder.plot()",
"execution_count": 33,
"outputs": [
{
"output_type": "stream",
"text": "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:32:19.779814Z",
"end_time": "2018-11-27T12:32:49.602109Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn = create_cnn(data, arch, metrics=accuracy)\nlearn.unfreeze()\nlearn.load('stage1')\nlearn.lr_find()\nlearn.recorder.plot()",
"execution_count": 34,
"outputs": [
{
"output_type": "stream",
"text": "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "#### Instantiate model"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-18T12:35:07.919709Z",
"start_time": "2018-11-18T12:35:07.230891Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "learn = create_cnn(data, arch, metrics=accuracy)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-18T10:13:12.057446Z",
"start_time": "2018-11-18T10:13:11.397717Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "from fastai.callbacks import SaveModelCallback\n# Add callbacks after LR finder because otherwise it breaks!!\nlearn = create_cnn(\n data,\n arch,\n metrics=accuracy,\n callback_fns=[\n partial(\n SaveModelCallback,\n monitor='accuracy',\n mode='auto',\n every='improvement',\n name='bestmodel')\n ])",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"hidden": true
},
"cell_type": "markdown",
"source": "#### Train stage 2"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-11-27T12:33:37.263677Z",
"end_time": "2018-11-27T12:34:31.316214Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "# RP_MTF, 224, resnet34\nlearn.load('stage1')\nlearn.fit_one_cycle(5, 1e-6)",
"execution_count": 35,
"outputs": [
{
"output_type": "stream",
"text": "Total time: 00:53\nepoch train_loss valid_loss accuracy\n1 0.202048 0.819779 0.731884 (00:10)\n2 0.157458 0.836115 0.739130 (00:10)\n3 0.157760 0.816065 0.746377 (00:10)\n4 0.143438 0.800215 0.739130 (00:10)\n5 0.126043 0.843710 0.731884 (00:10)\n\n",
"name": "stdout"
}
]
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T01:03:08.481257Z",
"start_time": "2018-11-27T01:01:19.701047Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "# Default, resnet34\nlearn.unfreeze()\nlearn.load('stage1')\nlearn.fit_one_cycle(10, max_lr=slice(1e-6, 1e-5))",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T01:06:00.577365Z",
"start_time": "2018-11-27T01:04:11.088726Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "# Default, resnet34\nlearn.unfreeze()\nlearn.load('stage1')\nlearn.fit_one_cycle(10, max_lr=slice(1e-5))",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-27T01:03:46.952921Z",
"start_time": "2018-11-27T01:03:46.681637Z"
},
"trusted": true,
"hidden": true
},
"cell_type": "code",
"source": "learn.recorder.plot_losses() ,learn.recorder.plot_metrics()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"cell_type": "markdown",
"source": "#### Best results"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-18T08:56:08.574900Z",
"start_time": "2018-11-18T08:55:38.092014Z"
},
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
},
"trusted": true
},
"cell_type": "code",
"source": "# RP_MTF, 224, resnet34\nlearn.load('stage0')\nlearn.fit_one_cycle(40, 3e-4)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-17T23:19:52.892109Z",
"start_time": "2018-11-17T23:19:00.251083Z"
},
"deletable": false,
"editable": false,
"hidden": true,
"run_control": {
"frozen": true
},
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "# RP, 224, resnet34\nlearn.load('stage0')\nlearn.fit_one_cycle(50, 1e-4)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"heading_collapsed": true
},
"cell_type": "markdown",
"source": "## Interpretation"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-23T12:44:22.883156Z",
"start_time": "2018-11-23T12:44:21.077788Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "#learn.load('stage2')\ninterp = ClassificationInterpretation.from_learner(learn)",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-23T12:44:23.013995Z",
"start_time": "2018-11-23T12:44:22.886371Z"
},
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "interp.plot_confusion_matrix()",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"hidden": true,
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"_draft": {
"nbviewer_url": "https://gist.github.com/26020067f499d48dc52e5bcb8f5f1c57"
},
"gist": {
"id": "26020067f499d48dc52e5bcb8f5f1c57",
"data": {
"description": "UCR_Time_Series_Classification_Univariate_Datasets.ipynb",
"public": true
}
},
"kernelspec": {
"name": "fastai-v1",
"display_name": "fastai-v1",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.7.0",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"notify_time": "30",
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"base_numbering": 1,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@oguiza
Copy link
Author

oguiza commented Nov 19, 2018

These are the same results shown in the gist.

screen shot 2018-11-19 at 01 53 47

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment