diff --git a/1-first-project/Abgabe.ipynb b/1-first-project/Abgabe.ipynb index bdb5960..8f86b5d 100644 --- a/1-first-project/Abgabe.ipynb +++ b/1-first-project/Abgabe.ipynb @@ -3,19 +3,31 @@ { "cell_type": "code", "execution_count": 1, - "id": "f9b2f6c2", + "id": "dab4afe8", "metadata": {}, "outputs": [], "source": [ + "import os\n", + "\n", "glob_path = '/opt/iui-datarelease2-sose2021/*/split_letters_csv/*'\n", "\n", - "pickle_file = 'data.pickle'" + "pickle_file = 'data.pickle'\n", + "\n", + "checkpoint_path = \"training_1/cp.ckpt\"\n", + "checkpoint_dir = os.path.dirname(checkpoint_path)\n", + "\n", + "# divisor for neuron count step downs (hard to describe), e.g. dense_step = 3: layer1=900, layer2 = 300, layer3 = 100, layer4 = 33...\n", + "dense_steps = 2\n", + "# amount of dense/dropout layers\n", + "layer_count = 3\n", + "# how much to drop\n", + "drop_count = 0.1" ] }, { "cell_type": "code", "execution_count": 2, - "id": "eb49db4b", + "id": "fb114dda", "metadata": {}, "outputs": [], "source": [ @@ -44,7 +56,7 @@ { "cell_type": "code", "execution_count": 3, - "id": "daefd4a8", + "id": "6b23cd45", "metadata": {}, "outputs": [], "source": [ @@ -57,7 +69,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "3b04c1ee", + "id": "e3cdaf0c", "metadata": {}, "outputs": [], "source": [ @@ -74,7 +86,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "5cf901e4", + "id": "c1b8c553", "metadata": {}, "outputs": [ { @@ -106,7 +118,7 @@ { "cell_type": "code", "execution_count": 6, - "id": "a68cb0bb", + "id": "7d8249b6", "metadata": {}, "outputs": [], "source": [ @@ -162,7 +174,7 @@ { "cell_type": "code", "execution_count": 7, - "id": "ae002a37", + "id": "6e7b9412", "metadata": {}, "outputs": [], "source": [ @@ -178,7 +190,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "0d0b3544", + "id": "52de5447", "metadata": {}, "outputs": [], "source": [ @@ -208,7 +220,7 @@ { "cell_type": "code", "execution_count": 9, - "id": "d371d6e9", + "id": "e962f5cf", "metadata": {}, "outputs": [], "source": [ @@ -227,7 +239,7 @@ { "cell_type": "code", "execution_count": 10, - "id": "1c14b2a1", + "id": "56056f60", "metadata": {}, "outputs": [], "source": [ @@ -245,7 +257,7 @@ { "cell_type": "code", "execution_count": 11, - "id": "189de319", + "id": "2a353441", "metadata": {}, "outputs": [], "source": [ @@ -265,7 +277,6 @@ " norm_entry['data']['Mag X'] = norm_entry['data']['Mag X'] / 8192\n", " norm_entry['data']['Mag Y'] = norm_entry['data']['Mag Y'] / 8192\n", " norm_entry['data']['Mag Z'] = norm_entry['data']['Mag Z'] / 8192\n", - "# norm_entry['data']['Mag Z'] = norm_entry['data']['Mag Z'] / 4096\n", " \n", " norm_entry['data'] = norm_entry['data'].reset_index(drop=True)\n", " \n", @@ -275,7 +286,7 @@ { "cell_type": "code", "execution_count": 12, - "id": "a796b9b2", + "id": "ee11dd88", "metadata": {}, "outputs": [ { @@ -289,7 +300,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 26179/26179 [01:30<00:00, 290.22it/s]\n" + "100%|██████████| 26179/26179 [01:30<00:00, 290.54it/s]\n" ] } ], @@ -332,7 +343,7 @@ { "cell_type": "code", "execution_count": 13, - "id": "d3e56332", + "id": "d32af185", "metadata": {}, "outputs": [ { @@ -362,14 +373,14 @@ { "cell_type": "code", "execution_count": 14, - "id": "dabc3af0", + "id": "317f32d3", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - " 19%|█▉ | 3723/19640 [00:00<00:00, 18633.70it/s]" + " 9%|▉ | 1822/19640 [00:00<00:00, 18211.98it/s]" ] }, { @@ -383,7 +394,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 19640/19640 [00:01<00:00, 18655.32it/s]\n" + "100%|██████████| 19640/19640 [00:01<00:00, 18646.81it/s]\n" ] } ], @@ -404,81 +415,84 @@ { "cell_type": "code", "execution_count": 15, - "id": "17fece5a", + "id": "39e3d5e1", "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", + "from tensorflow.keras.regularizers import l2\n", "from tensorflow.keras.models import Sequential\n", - "from tensorflow.keras.layers import Dense, Flatten, BatchNormalization, Dropout, Conv2D, MaxPooling2D\n", + "from tensorflow.keras.layers import Dense, Flatten, BatchNormalization, Dropout\n", + "from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau\n", + "from tensorflow.keras.optimizers import Adam\n", "\n", - "\n", - "def build_model():\n", + "def build_model(shape, classes):\n", " model = Sequential()\n", - " ncount = train_shape[0]*train_shape[1]\n", " \n", - " model.add(Flatten(input_shape=train_shape))\n", + " ncount = shape[0]*shape[1]\n", " \n", - " model.add(BatchNormalization())\n", + " model.add(Flatten(input_shape=shape, name='flatten'))\n", " \n", - " model.add(Dropout(0.1))\n", + " model.add(Dropout(drop_count, name=f'dropout_{drop_count*100}'))\n", + " model.add(BatchNormalization(name='batchNorm'))\n", " \n", - " for i in range(1,5):\n", - " model.add(Dense(int(ncount/i), activation='relu'))\n", - " model.add(Dropout(0.1))\n", + " for i in range(1,layer_count+1):\n", + " neurons = int(ncount/pow(dense_steps,i))\n", + " if neurons <= classes:\n", + " break\n", + " model.add(Dropout(drop_count*i, name=f'HiddenDropout_{drop_count*i*100:.0f}'))\n", + " model.add(Dense(neurons, activation='relu', \n", + " kernel_regularizer=l2(0.001), name=f'Hidden_{i}')\n", + " )\n", + " \n", + " model.add(Dense(classes, activation='softmax', name='Output'))\n", " \n", - " model.add(Dense(classes, activation='softmax'))\n", - "\n", " model.compile(\n", - " optimizer=tf.keras.optimizers.Adam(0.001),\n", + " optimizer=Adam(),\n", " loss=\"categorical_crossentropy\", \n", " metrics=[\"acc\"],\n", " )\n", - "\n", + " \n", " return model" ] }, { "cell_type": "code", - "execution_count": 24, - "id": "1ef39498", + "execution_count": 16, + "id": "13ba96af", "metadata": {}, "outputs": [], "source": [ "checkpoint_file = './goat.weights'\n", "\n", "def train(X_train, y_train, X_test, y_test):\n", - " model = build_model()\n", + " model = build_model(X_train[0].shape, 52)\n", " \n", " model.summary()\n", " \n", - " model_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(\n", - " filepath = checkpoint_file,\n", - " save_weights_only=True,\n", - " monitor='val_acc',\n", - " mode='max',\n", - " save_best_only=True\n", - " )\n", + " # Create a callback that saves the model's weights\n", + " model_checkpoint = ModelCheckpoint(filepath=checkpoint_path, monitor='loss', \n", + "\t\t\tsave_best_only=True)\n", " \n", " history = model.fit(X_train, y_train, \n", - " epochs=30,\n", - " batch_size=256,\n", - " shuffle=True,\n", - " validation_data=(X_test, y_test),\n", - " verbose=1,\n", - " callbacks=[model_checkpoint_callback]\n", + " epochs=30,\n", + " batch_size=256,\n", + " shuffle=True,\n", + " validation_data=(X_test, y_test),\n", + " verbose=2,\n", + " callbacks=[model_checkpoint]\n", " )\n", " \n", + " \n", + " model.load_weights(checkpoint_path)\n", " print(\"Evaluate on test data\")\n", - " results = model.evaluate(X_test, y_test, batch_size=128, verbose=0)\n", - " print(\"test loss, test acc:\", results)\n", " return model, history" ] }, { "cell_type": "code", - "execution_count": 25, - "id": "160ec98a", + "execution_count": 17, + "id": "519579cf", "metadata": { "tags": [] }, @@ -490,8 +504,8 @@ }, { "cell_type": "code", - "execution_count": 26, - "id": "a4799ab9", + "execution_count": 18, + "id": "3bf061f4", "metadata": {}, "outputs": [], "source": [ @@ -506,8 +520,8 @@ "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y_tran, test_size=0.2, random_state=177013)\n", "\n", - "X_train=X_train.reshape(X_train.shape[0],X_train.shape[1],X_train.shape[2],1)\n", - "X_test=X_test.reshape(X_test.shape[0],X_test.shape[1],X_test.shape[2],1)\n", + "X_train=X_train.reshape(X_train.shape[0],X_train.shape[1],X_train.shape[2])\n", + "X_test=X_test.reshape(X_test.shape[0],X_test.shape[1],X_test.shape[2])\n", "\n", "train_shape = X_train[0].shape\n", "classes = y_train[0].shape[0]" @@ -515,8 +529,8 @@ }, { "cell_type": "code", - "execution_count": 27, - "id": "e73dcbbb", + "execution_count": 19, + "id": "a8dffb69", "metadata": { "tags": [] }, @@ -525,170 +539,203 @@ "name": "stdout", "output_type": "stream", "text": [ - "Training...\n", - "Model: \"sequential_1\"\n", + "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", - "flatten_1 (Flatten) (None, 1050) 0 \n", + "flatten (Flatten) (None, 1050) 0 \n", "_________________________________________________________________\n", - "batch_normalization_1 (Batch (None, 1050) 4200 \n", + "dropout_10.0 (Dropout) (None, 1050) 0 \n", "_________________________________________________________________\n", - "dropout_5 (Dropout) (None, 1050) 0 \n", + "batchNorm (BatchNormalizatio (None, 1050) 4200 \n", "_________________________________________________________________\n", - "dense_5 (Dense) (None, 1050) 1103550 \n", + "HiddenDropout_10 (Dropout) (None, 1050) 0 \n", "_________________________________________________________________\n", - "dropout_6 (Dropout) (None, 1050) 0 \n", + "Hidden_1 (Dense) (None, 525) 551775 \n", "_________________________________________________________________\n", - "dense_6 (Dense) (None, 525) 551775 \n", + "HiddenDropout_20 (Dropout) (None, 525) 0 \n", "_________________________________________________________________\n", - "dropout_7 (Dropout) (None, 525) 0 \n", + "Hidden_2 (Dense) (None, 262) 137812 \n", "_________________________________________________________________\n", - "dense_7 (Dense) (None, 350) 184100 \n", + "HiddenDropout_30 (Dropout) (None, 262) 0 \n", "_________________________________________________________________\n", - "dropout_8 (Dropout) (None, 350) 0 \n", + "Hidden_3 (Dense) (None, 131) 34453 \n", "_________________________________________________________________\n", - "dense_8 (Dense) (None, 262) 91962 \n", - "_________________________________________________________________\n", - "dropout_9 (Dropout) (None, 262) 0 \n", - "_________________________________________________________________\n", - "dense_9 (Dense) (None, 52) 13676 \n", + "Output (Dense) (None, 52) 6864 \n", "=================================================================\n", - "Total params: 1,949,263\n", - "Trainable params: 1,947,163\n", + "Total params: 735,104\n", + "Trainable params: 733,004\n", "Non-trainable params: 2,100\n", "_________________________________________________________________\n", "Epoch 1/30\n", - "62/62 [==============================] - 1s 6ms/step - loss: 3.3481 - acc: 0.1160 - val_loss: 3.5396 - val_acc: 0.0687\n", + "62/62 - 2s - loss: 4.8415 - acc: 0.0671 - val_loss: 4.7052 - val_acc: 0.0723\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 2/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 2.4941 - acc: 0.2746 - val_loss: 3.1564 - val_acc: 0.1263\n", + "62/62 - 0s - loss: 4.0441 - acc: 0.1667 - val_loss: 4.2215 - val_acc: 0.1181\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 3/30\n", - "62/62 [==============================] - 0s 5ms/step - loss: 1.9611 - acc: 0.3980 - val_loss: 3.0374 - val_acc: 0.1533\n", + "62/62 - 0s - loss: 3.4989 - acc: 0.2526 - val_loss: 3.8433 - val_acc: 0.1752\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 4/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 1.6416 - acc: 0.4826 - val_loss: 2.7437 - val_acc: 0.2085\n", + "62/62 - 0s - loss: 3.1289 - acc: 0.3177 - val_loss: 3.5399 - val_acc: 0.2210\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 5/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 1.4033 - acc: 0.5439 - val_loss: 2.4287 - val_acc: 0.2632\n", + "62/62 - 0s - loss: 2.8521 - acc: 0.3696 - val_loss: 3.3127 - val_acc: 0.2620\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 6/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 1.2683 - acc: 0.5797 - val_loss: 2.1105 - val_acc: 0.3564\n", + "62/62 - 0s - loss: 2.6560 - acc: 0.4068 - val_loss: 3.0547 - val_acc: 0.3236\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 7/30\n", - "62/62 [==============================] - 0s 5ms/step - loss: 1.1270 - acc: 0.6207 - val_loss: 1.8558 - val_acc: 0.4155\n", + "62/62 - 0s - loss: 2.5031 - acc: 0.4395 - val_loss: 2.7836 - val_acc: 0.3933\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 8/30\n", - "62/62 [==============================] - 0s 5ms/step - loss: 1.0280 - acc: 0.6520 - val_loss: 1.6051 - val_acc: 0.4776\n", + "62/62 - 0s - loss: 2.3725 - acc: 0.4638 - val_loss: 2.5959 - val_acc: 0.4104\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 9/30\n", - "62/62 [==============================] - 0s 5ms/step - loss: 0.9315 - acc: 0.6812 - val_loss: 1.3901 - val_acc: 0.5489\n", + "62/62 - 0s - loss: 2.2528 - acc: 0.4946 - val_loss: 2.3562 - val_acc: 0.4705\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 10/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.8726 - acc: 0.6988 - val_loss: 1.2578 - val_acc: 0.5939\n", + "62/62 - 0s - loss: 2.1670 - acc: 0.5070 - val_loss: 2.1431 - val_acc: 0.5323\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 11/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.7879 - acc: 0.7230 - val_loss: 1.1692 - val_acc: 0.6191\n", + "62/62 - 0s - loss: 2.0921 - acc: 0.5232 - val_loss: 2.0376 - val_acc: 0.5624\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 12/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.7392 - acc: 0.7379 - val_loss: 1.1623 - val_acc: 0.6283\n", + "62/62 - 0s - loss: 2.0189 - acc: 0.5411 - val_loss: 1.9824 - val_acc: 0.5644\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 13/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.6912 - acc: 0.7543 - val_loss: 1.1486 - val_acc: 0.6359\n", + "62/62 - 0s - loss: 1.9840 - acc: 0.5495 - val_loss: 1.8983 - val_acc: 0.5802\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 14/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.6471 - acc: 0.7709 - val_loss: 1.1279 - val_acc: 0.6586\n", + "62/62 - 0s - loss: 1.9388 - acc: 0.5557 - val_loss: 1.8335 - val_acc: 0.6003\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 15/30\n", - "62/62 [==============================] - 0s 5ms/step - loss: 0.5918 - acc: 0.7853 - val_loss: 1.1477 - val_acc: 0.6469\n", + "62/62 - 0s - loss: 1.8664 - acc: 0.5737 - val_loss: 1.8275 - val_acc: 0.5909\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 16/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.5488 - acc: 0.8007 - val_loss: 1.2157 - val_acc: 0.6477\n", + "62/62 - 0s - loss: 1.8345 - acc: 0.5861 - val_loss: 1.7849 - val_acc: 0.5942\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 17/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.5421 - acc: 0.8056 - val_loss: 1.1407 - val_acc: 0.6647\n", + "62/62 - 0s - loss: 1.8048 - acc: 0.5876 - val_loss: 1.7853 - val_acc: 0.5950\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 18/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.5035 - acc: 0.8180 - val_loss: 1.1731 - val_acc: 0.6617\n", + "62/62 - 0s - loss: 1.7855 - acc: 0.5971 - val_loss: 1.7390 - val_acc: 0.6227\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 19/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.4780 - acc: 0.8278 - val_loss: 1.2031 - val_acc: 0.6550\n", + "62/62 - 0s - loss: 1.7337 - acc: 0.6060 - val_loss: 1.7086 - val_acc: 0.6225\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 20/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.4620 - acc: 0.8346 - val_loss: 1.1839 - val_acc: 0.6642\n", + "62/62 - 0s - loss: 1.7177 - acc: 0.6057 - val_loss: 1.6970 - val_acc: 0.6303\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 21/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.4153 - acc: 0.8489 - val_loss: 1.2167 - val_acc: 0.6606\n", + "62/62 - 0s - loss: 1.6984 - acc: 0.6166 - val_loss: 1.7008 - val_acc: 0.6151\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 22/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.4120 - acc: 0.8494 - val_loss: 1.1883 - val_acc: 0.6678\n", + "62/62 - 0s - loss: 1.6698 - acc: 0.6223 - val_loss: 1.6824 - val_acc: 0.6171\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 23/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.3817 - acc: 0.8624 - val_loss: 1.2221 - val_acc: 0.6673\n", + "62/62 - 0s - loss: 1.6533 - acc: 0.6265 - val_loss: 1.6574 - val_acc: 0.6329\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 24/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.3635 - acc: 0.8696 - val_loss: 1.2405 - val_acc: 0.6843\n", + "62/62 - 0s - loss: 1.6341 - acc: 0.6373 - val_loss: 1.6485 - val_acc: 0.6283\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 25/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.3626 - acc: 0.8721 - val_loss: 1.2756 - val_acc: 0.6634\n", + "62/62 - 0s - loss: 1.6232 - acc: 0.6366 - val_loss: 1.6606 - val_acc: 0.6334\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 26/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.3432 - acc: 0.8789 - val_loss: 1.2590 - val_acc: 0.6708\n", + "62/62 - 0s - loss: 1.6098 - acc: 0.6337 - val_loss: 1.6851 - val_acc: 0.6225\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 27/30\n", - "62/62 [==============================] - 0s 5ms/step - loss: 0.3165 - acc: 0.8909 - val_loss: 1.3211 - val_acc: 0.6662\n", + "62/62 - 0s - loss: 1.5843 - acc: 0.6459 - val_loss: 1.6324 - val_acc: 0.6377\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 28/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.2937 - acc: 0.8960 - val_loss: 1.3015 - val_acc: 0.6746\n", + "62/62 - 0s - loss: 1.5674 - acc: 0.6538 - val_loss: 1.6377 - val_acc: 0.6286\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Epoch 29/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.3091 - acc: 0.8910 - val_loss: 1.3578 - val_acc: 0.6637\n", + "62/62 - 0s - loss: 1.5684 - acc: 0.6464 - val_loss: 1.6092 - val_acc: 0.6459\n", "Epoch 30/30\n", - "62/62 [==============================] - 0s 4ms/step - loss: 0.3003 - acc: 0.8931 - val_loss: 1.3836 - val_acc: 0.6673\n", + "62/62 - 0s - loss: 1.5520 - acc: 0.6559 - val_loss: 1.6159 - val_acc: 0.6433\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", "Evaluate on test data\n", - "test loss, test acc: [1.3836346864700317, 0.6675152778625488]\n" + "CPU times: user 40.5 s, sys: 4.35 s, total: 44.9 s\n", + "Wall time: 37.2 s\n" ] } ], "source": [ - "print(\"Training...\")\n", - "model, history = train(X_train, y_train, X_test, y_test)" + "%%time\n", + "if 'model' not in locals():\n", + " tf.keras.backend.clear_session()\n", + " model, history = train(np.array(X_train), np.array(y_train), np.array(X_test), np.array(y_test))\n", + "else:\n", + " print(\"Loaded weights...\")\n", + " model.load_weights(checkpoint_path)" ] }, { "cell_type": "code", - "execution_count": 104, - "id": "ce37826d", + "execution_count": 20, + "id": "9b57245b", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "(52,)\n" - ] + "data": { + "image/png": "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0yZWr17NBx98wA8//EBQUBBZWdZktvPnz+fee+9l1qxZlJSUUFVV1ejPoTk0qSul2o3Zs2fj7e0NQG5uLtdccw379+9HRCgvL691n4svvhh/f3/8/f3p1q0bR48eJSYm5pQy48ePr143evRoUlJSCAkJoX///tX9wOfOncuLL/78QUzl5eXcfvvtbNu2DW9vb3788UcA1q5dy7XXXktQUBAAERER5Ofnk5aWxqxZswBrAFFr06SuVAfXlBp1SwkODq5efuCBBzj33HN5//33SUlJYfLkybXu4+/vX73s7e1NRUVFk8rU5emnn6Z79+5s376dqqqqNknUjaFt6kqpdik3N5fo6GgAXnnlFZcff/DgwSQnJ5OSkgLAO++8U2ccPXr0wMvLi9dff53KykoALrjgAl5++WWKiooAyMrKIjQ0lJiYGJYvXw5AaWlp9fbWokldKdUu/f73v+ePf/wjY8aMaVTN2lmBgYE899xzTJ06lbFjxxIaGkp4ePjPyt166628+uqrjBo1in379lV/m5g6dSozZswgPj6e0aNHs3jxYgBef/11/v73vzNy5EgmTpzIkSNHXB57fRp8RmlL0YdkKNV29u7dy9ChQ9s6jDZXUFBASEgIxhhuu+02Bg4cyN13393WYVWr7TqJyGZjTJ19OrWmrpTqsP71r38xevRohg8fTm5uLjfddFNbh9RseqNUKdVh3X333e2qZu4KWlNXSikPokldKaU8iCZ1pZTyIJrUlVLKg2hSV0q1unPPPZc1a9acsu6ZZ57hlltuqXOfyZMnc6Ib9LRp08jJyflZmUWLFlX3F6/L8uXL2bNnT/XrBx98kLVr1zYi+vZNk7pSqtXNnTuXJUuWnLJuyZIldU6qVdOqVavo1KlTk967ZlJ/+OGHmTJlSpOO1R5pUldKtbrLL7+clStXVj8QIyUlhcOHDzNp0iRuueUW4uPjGT58OA899FCt+/ft25fjx48D8OijjzJo0CDOOuus6ul5weqDPm7cOEaNGsVll11GUVER3377LStWrOCee+5h9OjRJCUlsWDBApYtWwbAZ599xpgxY4iNjeW6666jtLS0+v0eeugh4uLiiI2NZd++fT+Lqb1M0av91JXq6FbfC0d2uvaYUbFw0WN1bo6IiGD8+PGsXr2amTNnsmTJEubMmYOI8OijjxIREUFlZSXnn38+O3bs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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" }, { "data": { + "image/png": "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\n", "text/plain": [ - "array(['Q'], dtype='" ] }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "def predict(model, entry):\n", - " print(model.predict(entry)[0].shape)\n", - " prediction = np.argmax(model.predict(entry), axis=-1)\n", - " p = [0 for i in range(52)]\n", - " p[prediction[0]] = 1\n", - " return np.array(p)\n", + "def plot_keras_history(history, name='', acc='acc'):\n", + " \"\"\"Plots keras history.\"\"\"\n", + " import matplotlib.pyplot as plt\n", "\n", - "p = predict(model, np.array([x]))\n", - "lb.inverse_transform(p)" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "ea020844", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Q'" - ] - }, - "execution_count": 103, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "lb.inverse_transform(y_test)[0]" + " training_acc = history.history[acc]\n", + " validation_acc = history.history['val_' + acc]\n", + " loss = history.history['loss']\n", + " val_loss = history.history['val_loss']\n", + "\n", + " epochs = range(len(training_acc))\n", + "\n", + " plt.ylim(0, 1)\n", + " plt.plot(epochs, training_acc, 'tab:blue', label='Training acc')\n", + " plt.plot(epochs, validation_acc, 'tab:orange', label='Validation acc')\n", + " plt.title('Training and validation accuracy ' + name)\n", + " plt.legend()\n", + "\n", + " plt.figure()\n", + "\n", + " plt.plot(epochs, loss, 'tab:green', label='Training loss')\n", + " plt.plot(epochs, val_loss, 'tab:red', label='Validation loss')\n", + " plt.title('Training and validation loss ' + name)\n", + " plt.legend()\n", + " plt.show()\n", + " plt.close()\n", + "plot_keras_history(history)" ] }, { "cell_type": "code", "execution_count": null, - "id": "be9f7690", + "id": "4960be86", "metadata": {}, "outputs": [], "source": [] diff --git a/2-second-project/tdt/DataViz.ipynb b/2-second-project/tdt/DataViz.ipynb index fe6768b..dd4c05e 100644 --- a/2-second-project/tdt/DataViz.ipynb +++ b/2-second-project/tdt/DataViz.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2bc4ab88", + "id": "b91d212e", "metadata": {}, "source": [ "## Constants" @@ -11,7 +11,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "c767cb34", + "id": "1bf63c18", "metadata": {}, "outputs": [], "source": [ @@ -24,21 +24,25 @@ { "cell_type": "code", "execution_count": 2, - "id": "f783fc7f", + "id": "61e91687", "metadata": {}, "outputs": [], "source": [ + "import pandas as pd\n", + "\n", "glob_path = '/opt/iui-datarelease3-sose2021/*.csv'\n", "\n", "pickle_file = '../data.pickle'\n", "\n", "checkpoint_path = \"training_1/cp.ckpt\"\n", - "checkpoint_dir = os.path.dirname(checkpoint_path)" + "checkpoint_dir = os.path.dirname(checkpoint_path)\n", + "\n", + "pd.set_option('display.float_format', lambda x: '%.2f' % x)" ] }, { "cell_type": "markdown", - "id": "bb1c9c9b", + "id": "85e6ab7c", "metadata": {}, "source": [ "# Config" @@ -47,7 +51,7 @@ { "cell_type": "code", "execution_count": 3, - "id": "3d812543", + "id": "3f97f28e", "metadata": {}, "outputs": [], "source": [ @@ -55,20 +59,22 @@ "# 'JYY', 'JYN', 'JNY', 'JNN'\n", "cenario = 'SYN'\n", "\n", - "win_sz = 30\n", - "stride_sz = 2\n", + "win_sz = 5\n", + "stride_sz = 1\n", + "\n", + "epoch = 50\n", "\n", "# divisor for neuron count step downs (hard to describe), e.g. dense_step = 3: layer1=900, layer2 = 300, layer3 = 100, layer4 = 33...\n", "dense_steps = 3\n", "# amount of dense/dropout layers\n", - "layer_count = 5\n", + "layer_count = 3\n", "# how much to drop\n", - "drop_count = 0.2" + "drop_count = 0.1" ] }, { "cell_type": "markdown", - "id": "8cef4021", + "id": "fddb1e58", "metadata": {}, "source": [ "# Helper Functions" @@ -77,7 +83,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "cde65835", + "id": "8d1865b9", "metadata": {}, "outputs": [], "source": [ @@ -95,7 +101,7 @@ }, { "cell_type": "markdown", - "id": "476851ec", + "id": "09693b32", "metadata": {}, "source": [ "# Loading Data" @@ -104,14 +110,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "199e4435", + "id": "ccbd870e", "metadata": { "tags": [] }, "outputs": [], "source": [ "from glob import glob\n", - "import pandas as pd\n", "from tqdm import tqdm\n", "\n", "def dl_from_blob(filename, user_filter=None):\n", @@ -150,7 +155,7 @@ { "cell_type": "code", "execution_count": 6, - "id": "9e2817c1", + "id": "f0f4201c", "metadata": {}, "outputs": [], "source": [ @@ -165,7 +170,7 @@ { "cell_type": "code", "execution_count": 7, - "id": "12c5098e", + "id": "83695ce1", "metadata": {}, "outputs": [], "source": [ @@ -180,7 +185,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "00ee7490", + "id": "92216c47", "metadata": {}, "outputs": [ { @@ -190,8 +195,8 @@ "Loading data...\n", "../data.pickle found...\n", "768\n", - "CPU times: user 548 ms, sys: 2.56 s, total: 3.11 s\n", - "Wall time: 3.11 s\n" + "CPU times: user 614 ms, sys: 2.53 s, total: 3.14 s\n", + "Wall time: 3.14 s\n" ] } ], @@ -216,7 +221,7 @@ { "cell_type": "code", "execution_count": 9, - "id": "d1db1537", + "id": "6f337a51", "metadata": { "tags": [] }, @@ -225,8 +230,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 95 µs, sys: 297 µs, total: 392 µs\n", - "Wall time: 396 µs\n" + "CPU times: user 97 µs, sys: 302 µs, total: 399 µs\n", + "Wall time: 402 µs\n" ] } ], @@ -274,7 +279,7 @@ }, { "cell_type": "markdown", - "id": "46382aad", + "id": "b9500a64", "metadata": {}, "source": [ "# Preprocessing" @@ -283,7 +288,7 @@ { "cell_type": "code", "execution_count": 10, - "id": "f7842338", + "id": "c7c9d655", "metadata": { "tags": [] }, @@ -303,13 +308,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "b73d9485", + "id": "f5b437a2", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", - "right_Hand_ident='right_Hand'\n", - "left_Hand_ident='left_hand'\n", + "left_Hand_ident='left'\n", + "right_Hand_ident='right'\n", "\n", "def rem_low_acc(entry, data=True) -> pd.DataFrame:\n", " if data:\n", @@ -320,20 +325,19 @@ " centry['LeftHandTrackingAccuracy'] = (centry['LeftHandTrackingAccuracy'] == 'High') * 1.0\n", " centry['RightHandTrackingAccuracy'] = (centry['RightHandTrackingAccuracy'] == 'High') * 1.0\n", " \n", - " right_Hand_cols = [c for c in centry if right_Hand_ident in c]\n", - " left_Hand_cols = [c for c in centry if left_Hand_ident in c]\n", + " left_Hand_cols = [c for c in centry if left_Hand_ident in c.lower() and c != 'LeftHandTrackingAccuracy']\n", + " right_Hand_cols = [c for c in centry if right_Hand_ident in c.lower() and c != 'RightHandTrackingAccuracy']\n", " \n", - " centry.loc[centry['RightHandTrackingAccuracy'] == 0.0, right_Hand_cols] = np.nan\n", " centry.loc[centry['LeftHandTrackingAccuracy'] == 0.0, left_Hand_cols] = np.nan\n", - " \n", - " return centry\n", - "\n" + " centry.loc[centry['RightHandTrackingAccuracy'] == 0.0, right_Hand_cols] = np.nan\n", + "\n", + " return centry" ] }, { "cell_type": "code", "execution_count": 12, - "id": "1a298d6d", + "id": "f126154b", "metadata": {}, "outputs": [], "source": [ @@ -361,7 +365,7 @@ { "cell_type": "code", "execution_count": 13, - "id": "3be1bd3f", + "id": "d50c3391", "metadata": {}, "outputs": [], "source": [ @@ -371,13 +375,13 @@ " else:\n", " centry = pickle.loads(pickle.dumps(entry))\n", " \n", - " return centry.interpolate(method='linear', axis=0)" + " return centry.interpolate(limit_direction='both')" ] }, { "cell_type": "code", "execution_count": 14, - "id": "2a7f4e26", + "id": "60629469", "metadata": {}, "outputs": [], "source": [ @@ -402,46 +406,111 @@ { "cell_type": "code", "execution_count": 15, - "id": "b012b0f7", + "id": "4de2497d", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 96/96 [00:05<00:00, 16.44it/s] \n" + ] + } + ], "source": [ - "# %%time \n", + "acc_data = pd.DataFrame()\n", "\n", - "# acc_data = pd.DataFrame()\n", + "for e in tqdm(cdata[cenario]):\n", + " acc_data = acc_data.append(e['data'], ignore_index=True)\n", "\n", - "# for d in tqdm(cdata['SYY']):\n", - "# acc_data = acc_data.append(d['data'])\n", + "ddacc_data = rem_low_acc(drop(acc_data, False),False)\n", "\n", - "\n", - "# dacc_data = drop(acc_data, False)\n", - "# ddacc_data = rem_low_acc(dacc_data, False)\n", - "\n", - "# for c in ddacc_data:\n", - "# print(f\"{c}: {dacc_data[c].min()}, {dacc_data[c].max()}\")" + "eula = ddacc_data[[c for c in ddacc_data if 'euler' in c.lower()]]\n", + "posi = ddacc_data[[c for c in ddacc_data if 'pos' in c.lower()]]\n", + "eulamin = eula.min()\n", + "eulamax = eula.max()\n", + "eulamean = eula.mean()\n", + "eulastd = eula.std()\n", + "posimin = posi.min()\n", + "posimax = posi.max()\n", + "posimean = posi.mean()\n", + "posistd = posi.std()" ] }, { "cell_type": "code", "execution_count": 16, - "id": "a2440d77", + "id": "7b167a3c", + "metadata": {}, + "outputs": [], + "source": [ + "def minmaxscaler(entry, minimum, maximum):\n", + " return (entry-minimum)/(maximum-minimum)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "044a73e4", + "metadata": {}, + "outputs": [], + "source": [ + "euler_ident = 'euler'\n", + "pos_ident = 'pos'\n", + "\n", + "def norm(entry, data=True) -> pd.DataFrame:\n", + " if data:\n", + " centry = pickle.loads(pickle.dumps(entry['data']))\n", + " else:\n", + " centry = pickle.loads(pickle.dumps(entry))\n", + " \n", + " euler_cols = [c for c in centry if euler_ident in c.lower()]\n", + " pos_cols = [c for c in centry if pos_ident in c.lower()]\n", + " \n", + " centry[euler_cols] = minmaxscaler(centry[euler_cols], eulamin, eulamax)\n", + " centry[pos_cols] = minmaxscaler(centry[pos_cols], posimin, posimax)\n", + " return centry" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "7e7526e9", + "metadata": {}, + "outputs": [], + "source": [ + "def drop_acc(entry, data=True) -> pd.DataFrame:\n", + " droptable = ['LeftHandTrackingAccuracy', 'RightHandTrackingAccuracy']\n", + " if data:\n", + " centry = pickle.loads(pickle.dumps(entry['data']))\n", + " else:\n", + " centry = pickle.loads(pickle.dumps(entry))\n", + "\n", + " return centry.drop(droptable, axis=1)\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "e9ace1d0", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 96/96 [00:09<00:00, 10.55it/s]" + "100%|██████████| 96/96 [00:14<00:00, 6.79it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 8.07 s, sys: 1.19 s, total: 9.27 s\n", - "Wall time: 9.1 s\n" + "CPU times: user 12.8 s, sys: 1.54 s, total: 14.3 s\n", + "Wall time: 14.1 s\n" ] }, { @@ -469,16 +538,22 @@ " entry2 = pickle.loads(pickle.dumps(entry))\n", " entry2['data'] = drop(entry2, data)\n", " \n", - " entry4 = pickle.loads(pickle.dumps(entry2))\n", - " entry4['data'] = rem_low_acc(entry4, data)\n", + " entry3 = pickle.loads(pickle.dumps(entry2))\n", + " entry3['data'] = rem_low_acc(entry3, data)\n", " \n", - " entry5 = pickle.loads(pickle.dumps(entry4))\n", - " entry5['data'] = pad(entry5, data)\n", + " entry1 = pickle.loads(pickle.dumps(entry3))\n", + " entry1['data'] = norm(entry1, data)\n", " \n", - "# entry6 = pickle.loads(pickle.dumps(entry5))\n", + " entry8 = pickle.loads(pickle.dumps(entry1))\n", + " entry8['data'] = drop_acc(entry8, data)\n", + " \n", + "# entry5 = pickle.loads(pickle.dumps(entry4))\n", + "# entry5['data'] = pad(entry5, data)\n", + " \n", + "# entry6 = pickle.loads(pickle.dumps(entry8))\n", "# entry6['data'] = interpol(entry6, data)\n", " \n", - " entry7 = pickle.loads(pickle.dumps(entry5))\n", + " entry7 = pickle.loads(pickle.dumps(entry8))\n", " entry7['data'] = slicing(entry7, entry7['user'], data)\n", " \n", " return entry7\n", @@ -488,16 +563,156 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "11e96fef", + "execution_count": 20, + "id": "a067392e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "a = drop(cdata[cenario][0]['data'], False)\n", + "a['left_OVRHandPrefab_pos_X'].plot()\n", + "plt.plot((a['LeftHandTrackingAccuracy'] == 'High')*1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "b1567410", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "b = rem_low_acc(a, False)\n", + "b['left_OVRHandPrefab_pos_X'].plot()\n", + "plt.plot(b['LeftHandTrackingAccuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "b04ce014", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "c = norm(b, False)\n", + "c['left_OVRHandPrefab_pos_X'].plot()\n", + "plt.plot(c['LeftHandTrackingAccuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "62e4eb23", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "d = interpol(c, False)\n", + "d['left_OVRHandPrefab_pos_X'].plot()\n", + "plt.plot(d['LeftHandTrackingAccuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "cc70c742", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 96 µs, sys: 107 µs, total: 203 µs\n", - "Wall time: 214 µs\n" + "CPU times: user 123 µs, sys: 105 µs, total: 228 µs\n", + "Wall time: 238 µs\n" ] }, { @@ -506,7 +721,7 @@ "(48, 48)" ] }, - "execution_count": 17, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -521,16 +736,24 @@ }, { "cell_type": "code", - "execution_count": 18, - "id": "1807a2f7", + "execution_count": 25, + "id": "7b44ef39", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 96/96 [00:36<00:00, 2.61it/s]\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1min, sys: 13.2 s, total: 1min 13s\n", - "Wall time: 21.1 s\n" + "(57800, 5, 336) (57800,) (37106, 5, 336) (37106,)\n", + "CPU times: user 1min 48s, sys: 15.1 s, total: 2min 3s\n", + "Wall time: 37.1 s\n" ] } ], @@ -543,21 +766,24 @@ "X_test = list()\n", "y_test = list()\n", "\n", - "# train = list()\n", + "train = list()\n", "test = list()\n", "\n", - "for x in pdata:\n", + "for x in tqdm(pdata):\n", " if x['session'] == 1:\n", - "# train.append(\n", - "# {\n", - "# 'label': x['user'],\n", - "# 'data': list()\n", - "# })\n", + " train.append(\n", + " {\n", + " 'label': x['user'],\n", + " 'data': list()\n", + " })\n", " for y in x['data'].unbatch().as_numpy_iterator():\n", - " X_train.append(y[0])\n", - " y_train.append(y[1])\n", - " \n", - "# train[-1]['data'].append(y[0])\n", + " if not np.isnan(y[0]).any():\n", + " X_train.append(y[0])\n", + " y_train.append(y[1])\n", + " \n", + " train[-1]['data'].append(y[0])\n", + " if len(train[-1]['data']) == 0:\n", + " del train[-1]\n", " if x['session'] == 2:\n", " test.append(\n", " {\n", @@ -565,355 +791,69 @@ " 'data': list()\n", " })\n", " for y in x['data'].unbatch().as_numpy_iterator():\n", - " X_test.append(y[0])\n", - " y_test.append(y[1])\n", + " if not np.isnan(y[0]).any():\n", + " X_test.append(y[0])\n", + " y_test.append(y[1])\n", + " \n", + " test[-1]['data'].append(y[0])\n", + " \n", + " if len(test[-1]['data']) == 0:\n", + " del test[-1]\n", " \n", - "# test[-1]['data'].append(y[0])\n", - "\n", "X_train = np.array(X_train)\n", "y_train = np.array(y_train)\n", "X_test = np.array(X_test)\n", - "y_test = np.array(y_test)" + "y_test = np.array(y_test)\n", + "\n", + "print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)" ] }, { "cell_type": "code", - "execution_count": 19, - "id": "44330b34", - "metadata": {}, + "execution_count": 26, + "id": "27f1c824", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "tags": [] + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "(37902, 30, 338) (73692, 30, 338) (37902,) (73692,)\n", - "(32745, 30, 338) (48773, 30, 338) (32745,) (48773,)\n" + "Key: 1: 1347\n", + "Key: 2: 1583\n", + "Key: 3: 8568\n", + "Key: 4: 3034\n", + "Key: 5: 1960\n", + "Key: 6: 3311\n", + "Key: 7: 3971\n", + "Key: 8: 1407\n", + "Key: 9: 1135\n", + "Key: 10: 7466\n", + "Key: 11: 6494\n", + "Key: 12: 1813\n", + "Key: 13: 3596\n", + "Key: 14: 3260\n", + "Key: 15: 2825\n", + "Key: 16: 6030\n" ] - } - ], - "source": [ - "XX_train = list()\n", - "yy_train = list()\n", - "XX_test = list()\n", - "yy_test = list()\n", - "\n", - "for X,y in zip(X_train, y_train):\n", - " if not np.isnan(X).any():\n", - " XX_train.append(X)\n", - " yy_train.append(y)\n", - "\n", - "for X,y in zip(X_test, y_test):\n", - " if not np.isnan(X).any():\n", - " XX_test.append(X)\n", - " yy_test.append(y)\n", - " \n", - "XX_train = np.array(XX_train)\n", - "yy_train = np.array(yy_train)\n", - "XX_test = np.array(XX_test)\n", - "yy_test = np.array(yy_test)\n", - "\n", - "print(np.array(XX_train).shape, X_train.shape, np.array(yy_train).shape, np.array(y_train).shape)\n", - "print(np.array(XX_test).shape, X_test.shape, np.array(yy_test).shape, np.array(y_test).shape)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "bd805e81", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0
011
111
211
311
411
......
378979
378989
378999
379009
379019
\n", - "

37902 rows × 1 columns

\n", - "
" - ], - "text/plain": [ - " 0\n", - "0 11\n", - "1 11\n", - "2 11\n", - "3 11\n", - "4 11\n", - "... ..\n", - "37897 9\n", - "37898 9\n", - "37899 9\n", - "37900 9\n", - "37901 9\n", - "\n", - "[37902 rows x 1 columns]" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a = pd.DataFrame(yy_train)\n", - "a" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "f6416fc1", - "metadata": {}, - "outputs": [ + }, { "data": { "text/plain": [ - "16 0.113055\n", - "11 0.110680\n", - "10 0.103662\n", - "3 0.102739\n", - "5 0.095404\n", - "13 0.069469\n", - "15 0.061738\n", - "7 0.048625\n", - "9 0.044826\n", - "6 0.043955\n", - "14 0.043375\n", - "1 0.038890\n", - "4 0.036489\n", - "8 0.035433\n", - "12 0.032030\n", - "2 0.019630\n", - "dtype: float64" + "array([], dtype=object)" ] }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "b = a.value_counts(normalize=True)\n", - "b" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "1885329b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0
0
160.113055
110.110680
100.103662
30.102739
50.095404
130.069469
150.061738
70.048625
90.044826
60.043955
140.043375
10.038890
40.036489
80.035433
120.032030
20.019630
\n", - "
" - ], - "text/plain": [ - " 0\n", - "0 \n", - "16 0.113055\n", - "11 0.110680\n", - "10 0.103662\n", - "3 0.102739\n", - "5 0.095404\n", - "13 0.069469\n", - "15 0.061738\n", - "7 0.048625\n", - "9 0.044826\n", - "6 0.043955\n", - "14 0.043375\n", - "1 0.038890\n", - "4 0.036489\n", - "8 0.035433\n", - "12 0.032030\n", - "2 0.019630" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "c = pd.DataFrame(b)\n", - "c" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "7dfe2339", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 23, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPUAAADnCAYAAADGrxD1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7ZElEQVR4nO2deXhU53X/v+feWbSgBSQhiVUgBAhphACx74sdbJE4cWJTbMdrmtgmdZLSpqTpr6FJm6pJ3CZt09Akdi0ntoOT2LGNHduYRYjNrFpAEiCBQBLa932We35/3AGE0GjmztxZdT/PMw9o5r7vezSa79zzvu95zyFmhoaGRugg+NsADQ0NddFEraERYmii1tAIMTRRa2iEGJqoNTRCDE3UGhohhiZqDY0QQxO1hkaIoYlaQyPE0EStoRFiaKLW0AgxNFFraIQYmqg1NEIMTdQaGiGGJmoNjRBD528DNNSBiKoBdAOwAbAyc44fbBABnAZQx8xbfD2+howm6tBiPTO3+HH8bwAoBxDtRxvGPJr7raEKRDQFQC6AX/vblrGOJurQgQF8TERniOirfhj/pwC+DUDyw9gaQ9BEHTqsYuaFAO4DsJ2I1vhqYCLaAqCJmc/4akwNx2iiDhGYuc7+bxOAtwEs8eHwKwF8zr5Y9zsAG4jotz4cX2MIpGUTDX6IKBKAwMzd9v/vA/B9Zv7QD7asA/A32uq3/9Du1F6GiGKJ6A9EVEFE5US03AvDJAI4QkTFAE4CeN8fgtYIDLQ7tZchonwAhcz8ayIyAIhg5g4/m6URwmii9iJEFAOgCMBM1t5oDR+hud/eZQaAZgD/R0TniOjX9jmvhobX0ETtXXQAFgL4BTMvANALYKd/TdIIdbQwUe9SC6CWmT+1//wH+EDUP3/2gAhgOmRPYSqAZPtjEoCJACIAGAAYARiXnvxBY2RfwyTIgSMS5BjyVgePGgCXAdSkV5RrU4oARBO1F2HmBiKqIaI5zHwRwEYAZWqO8fNnD0wHsNj+yAYwC8A0KPjbMgkSgCkKhx4on5teCfn3OQ+gFMCp9IryOoX9aKiMJmrv81cAXrOvfF8B8JS7Hb24dYsOwCIAa0BhGWGxz98H+c7rEXZRKyUMQKb98fDNJ8vnpl8BcBhAAYDD6RXlVzy1T0MZmqi9DDMXAXD7GOSLW7eMB/A5AA9CvtPLC208wCwNdJEQ5rmNIDXd6Jn2x5MAUD43vRayyP8MYG96RXmHimNpjIAm6gDkxa1bEgF8HsAXAazHyH8nkqxXK0VD+iKPB3TvTu0qUwA8Yn9YyuemH/rfzcKr+xcIH5Q+UdrmxXHHLJqoA4QXt26JBfAYZFd2JVzYmbCZL/eIhnSPx2YSfLXgpWdg7fF0WgIgwpRv+hDAawDeLX2itN9HNoQ8mqj9zItbtywF8CyArQDClbSVrHWqJCPwoajRFoXivjBabP/xs/ZHjynf9FsAPyl9orTKV7aEKpqo/YB9weshAN+CvGrtHtw/i5klIvIo3oDhVff7Dj5eIAyO8PQ4yF9sf2nKN/0BQF7pE6VFvrIp1NBE7UNe3LolAsDzkNP+KN1CGokotjVcIl3ybE868dWdmgHzR4vINMolImSPZasp3/QxZHEf9IVtoYQmah9gvzN/BcA/Qg4CUQ2b+XKj4LGoVV39dsgw19sZ9wK415RvOgng3wC8XfpEqRbs4gJamKgXeXHrFnpx65aHIQdo/AIqCxoAJMtVz/+GPrpT7xvZ9XbGEgB/BFBmyjdtU9mkkEQTtZd4ceuWjZDPNu8BkOatcVhqn+pxH97d0pLHAMwfLRzV9XbGXACvm/JN+0z5Jq+9n6GA5n6rzItbt6QC+DmAz/hmRGkaS73NJEQmuNuDL+bUbeNQ3Bvusus9GpsAlJryTXkA/rX0iVJ37v4hjXanVokXt27Rvbh1y7chx0D7SNAyNkvVVU/aM7wv6k/cc70dYQTwPcji3qRivyGBJmoVqN1ZOD8hbOpbkBd0FO01q4FkrvQocMPb7jcDlo8WUaYXuk4DsM+Ub3rNlG9K9EL/QYkmag+o3Vko1u4s/HsAJ9ckfmk2gaz+sEOy1U/wpD17ts3tlPZxKO4Jp1gvDvEIgApTvulZU76J1OiQiMKI6CQRFRPRBSL6JzX69QUhL2oimkNERUMeXUT0TU/7rd1ZmAbgCIB/AWDQCYY5SxNyj3rar1vwYBqzzeJ2cy/PqT/JFga82b+dWMg7DH805ZuiVOhvEMAGZp4P+UjrZiJapkK/XifkRc3MF5k5m5mzIR9b7IOcF9ttancWPgjgHIA7/sjTIuctH29IrPSkbzcJk6x1l9xu7cV9agYsH+Z4xfV2xBcAnDTlm+Z60gnL9Nh/1NsfQbFPHvKiHsZGAFXMfM2dxrU7C6l2Z+H3IGcwuSvXGBEZ1idvGySQzUM7FSNZLrtdGM+bC2U+cL1HYi5kYX/ek06ISCSiIgBNAPYNyWAT0Iw1Uf8FgDfcaVi7szACwJsAdgFwOG/TC8aMnPjPFLplnQdIlmtGd9syiV4TtY9c75GIAvCWKd/0z6Z8k1ufc2a22T28KQCWEPnU43CbMSNqe+aRzwH4vdK2tTsLp0KeP3/JletnjMtaFq2P92ibSSksdU53u62X3G8/uN7DIQDfBfC+Kd803t1O7HnaDwLYrJJdXmXMiBpy4bizzNyopFHtzsLlAE4BWOBqGyIK25j8aDd8WgGSkyVbp1v5wby1UOYn13skNgM4bco3ZbnagIgSiGTbiSgcwD0AKrxjnrqMJVFvg0LXu3Zn4ROQv6EV74EaxLCshRM2HVHazhMkS+V1d9oxiWqbAgDYn02BlPhgJoBjCoJVkgEcJKISyF/q+5h5r9esU5ExIWp7Av17ALzlapvanYV/B+AVyNFLbjEremFOlG68W0JzB5ul0q1tLW+43wxY/7xICLQ5aCSA90z5plxnFzJzCTMvYOYsZs5k5u/7wD5VGBOiZuZeZo5j5k5XrrcHlOR5Oi4RRWyY9FgrfLQVwtYmN+O/1f8YdESiqCeC3J7HepEwAG+b8k0P+tsQbzEmRK2E2p2F/w9yQIkqhIkRC7LGr/WRG25JY7b0KW3ljTDRAHO9h6MHsCdUj3Jqoh5C7c7C7wJQ3c2aG7M0O1IX44sk9zrJcv2y0kZqh4kyYP1zjpChaqfqowPwm1C8Y2uitlO7s/AFAP/sjb6JKGpj8mP13uh7ODbL5Q6lbdQWdUckirsjyKN4dB8hAnjDlG+639+GqIkmagC1OwufBPBTb44RrhuXkxG70utuuGSpiVDaRu0trQPzA9r1Ho4Bcrz4Bn8bohZjXtS1Owu/AODXGCVKTC0yYleawsWoBq8Owt2pipuoeKdmwPrBYmGeah36hjAA75ryTdn+NkQNxrSoa3cWmgD8FrIb5nWIKGbjpMe8vcU1QbK1KIpmUzP2O4hc7+FEQg4rDUbb72DMirp2Z2EM5H1rxe6qJ0TqopfMiVni1SOakrnyhqIGKt6pD8wnxavvAcQMyHnQgloXQW28u9TuLCTId+hZ/hh//vh16WFiZLO3+rdZqhRtUak1p7a73oG+6u2Mz8ALOyC+ZEyKGsA/ANjir8GJaMKG5Ee9du6abS2KUhGrNafuDF7Xezh/b8o3PeBvI9xlzIm6dmfhZsjHJ/1KlH788llRC094p3dbKksDLkXPAQCTOmuEQe56D4UAvGrKN3lUJMFfjClR1+4snAG5ymJA/N4L4zamGoRwb5RzJcla7bInoIb7zYD1g5ygW/UejWjI4aTj/G2IUgLiw+0LancWhkGu9BAw7iGRkLAh+RGvHOezmS/3OL9KhiF6fKvujEBJVyTFedpPgDEPwP/52wiljBlRA/gRFJyJ9hUxhvgVM8aZTqrdr2Stcz35ngru98H51OtxJ4HJl0z5puf9bYQSxoSoa3cWrgSw3d92OCInfvM0vWB0eQ7sEtyXxswurYJ7ulDGgO2DxUK6R50ENj805ZuS/G2EqwS8qInoW/a8y+eJ6A0iClPSvnZnoRFyxFjA/q4CCUnrk7aVqtxtFNsaXJpXezqn7opASWckxXvSR4ATA+Df/W2EqwTsBx0AiGgygBcA5DBzJuTIr79Q2M0/Qs4uGdCMNyaumhaZflrNPm3myy6lbmIIHvnfB+aTy/P3IGZbsJT4CWhR29EBCCciHeToL5ejpXbt2pXxpuHYml4MKMpL5i+WJmxJ1pGhW63+JEu1S39fT7a0xoDrPZT/MeWb3M6E4ysCWtTMXAfgJwCuA6gH0MnMHyvo4uddQv+qN4xHw0/oLh1muDbH9BcCCZPXJj18Tq3+WGpzrcytB+53VwSKQ9z1HkoagL/ztxHOCGhRE9F4AA9AjsmdBCCSiB5zpe2uXbseA7BW7gjR53U1a141FpQ3UudFb9mrBnHGSasnR6SpJGxpGku9TpP8M7nvfh/MGhOu91C+Y8o3+SW82FUCWtSQaxFfZeZmZrZAPoCxwlmjXbt2hWOEHGMWsmW8Zzg96wP92QILrAG5BUNEtGLiA3Ei6VSJzrJZrlxxdg27eeqUAdv7S0Iq4MQVwiDXHw9YAl3U1wEsI6IIIiLIZXPKXWj3AoDJI75CEG+I7WtfNR7uuCjeUH1/WA0EEqetSfzSKTX6ksyXnSYscHdLawysejviXlO+6WF/G+GIgBa1vXbRHwCchVzMXQDwy9Ha7Nq1azyAnU77Jp5cqC9f8jvD0U+70e+TVENKSAibtjopfEaJp/1ItnrnGT3dFPWhLFJtUS8Icbucj7cJSKOGwszfY+a59tzLX2bmQSdN/gZyWVOX6BEGlu4xHos6qrt4WAL7vLCdI4hIWJX4YJRAome1qHhwtrMyt0zKl78ZsO0dO6veI5EGucJmwBHwolbCrl274iC73sogjCvX1a551VhwqYE6XHHvfYJIuhmrJj7oaaXFMMl6Y9Qyt+zGx6A7HCWd48jNPOMhQ0CuhIeUqAH8LQC3T9VYyZa+13Bm9l7DmcNmWAPCtUwKn7FqYti0C570IVkutY56gRv71GPc9b7JYlO+ab2/jRhOyIh6165dUQCe87gjgtggdKz5jbGgp1ys9Xs9YiIS1yR+yShAMLvbh2S5ph/tdaVbWgzY9i4Z0673UALubh1Qoiaib9hjvC8Q0TcVNn8G8hlYVWBC8lH9xaVvGI+c7KJ+XyTid4go6Gctn/jAcXfbs9SZMurrCre0usNR0qG53jf5TKBlIQ0YUdsLev8lgCUA5gPYQkQubfLvP5AqAJJXjsf10uCSNw3HYo/oygskSFZvjOEKkyPSVsYZJ7kZOMPJkq3TcXitwtVvzfW+i2/724ChBIyoAaQD+JSZ+5jZCqAAgKslUT67avXrkbPnHC3Q6QbUzyRCiKzQ3Vj7qrGg6obQ5tH81m0TiHTrkraCQG59sUiWqmuOXlNyoIMBSXO97+JhU75phr+NuEkgifo8gNVEFEdEEQDuB+Ba7DLwPBFPSky8snbZ8t9HLFi490hUVLPq4aBWkuZ8oD+X/q7h9OFBWNQ9/+wCOsEwZ2nCFreqfIxW5lbJlpbmeo+ICGCHv424ScCImpnLAfwbgI8BfAigCIDTfeP9B1JnQq49DQAgQti4ce2rshd8OGfZ8j0lkyZVHIeabjNBaBI61/zWeHjgvHjd7Xmuu0yLTF8x3pCoOBMpWxsdR34pWP0uMFGX0rHHCE+Y8k0+zSHviIARNQAw80vMvIiZ1wBoBzDq/qqdx+GgZI5eb85KnXVq+arVrzfPnnPkkF4/MPrWjhJbCYkn9JeXv24sPN1JfTVq9esMIjKsT95mJpDCQBnLbEdlbl1dKNNc71EZB+Bz/jYCCDBRE9FE+7/TIM+nX3eh2Zed98vJiYlX1y1d9vvIBQv3HomOblItwKSPzDm/NxyPL9CV+WwhTS8Y5+XEf0apG66TLDUjl7klwaXPQU84StqjNNd7FB7xtwFAgIkawB+JqAzAewC2M3PHaBfvP5C6HMBMVzu/6ZrPz/4ofdnyPSWTJper45oTwi/r6tfmGwuu1gqtaqclGpEZ47KWRuvjFdXMkiyXOkZ63tU7dUGm5no7YXMg1OIKKFEz82pmnsfM85l5vwtNlKY2uoVeb85KTT29fNXq15vnzC0s0Ov7nZ47doaNpLQP9UWZ7xhOFXp7IY2IwjYmP9oNwOXEDzZrTbijzpy1ZUB6b6kQ8Gmh/Iw+yib5vbJHQIlaCfsPpBKAhzzth4iTJ06sXrt02R+iFi5872h0dKNnrjmBmoWu1b8xHjaXiNeOeWrfaBjEsKyFEza57oZLI5e5ZRdWynrCUNoeJU+PNO7EIHHVpt6+gjfqGi4fu1671d/26PxtgAcsBqCoZtRoEMEYOa5j5fzsj2G16s9fv5bVXVc3dzEguPceERJO6isTSnXXz+SaF8bHcuR0tWwdyqzohTmXu85c77a2T3Ph8jjJ1lotiHEpQ590ZUurwEQ+38ILZIySdHldX/+NZzq7pqSbLakAbn5hpmBXTAx2dbr0fhHRVACvAkgEwAB+ycw/88S2oL1TA8j1Vsc6nSVzZuqZ5atWv94yZ27hIb2+3+0Klf1kXvQHw4nEg/rzBTZIbsdvO4KIIjZMeqwV8gfCKZL58gghr6OLWnO9ZcIk6eL9Pb0Ff6itv3L6Wm3aT5pb19oFPRQ9lH02rQB2MPM8AMsAbCcij7LJBO2d+st4c30s2k8uw9GBTfhoZiIap6g9BhEnTZxYnZSQUD3Y1xd7tLJyyfiuzkTlbzghrEpsXFstNFdttJh6pknx89W0M0yMWJA1fm1hSXvBamfX2ixXJF34smH2jf7dbne9VbU5WAiXpIpNvX0Nz3R2paRarHMAzHGh2Wfh2s4NmLkeclJNMHM3EZVDztpT5q7NQSnqpINFE0DiyjbECx/gAXyAB6Bnc9VclNVuxMcxC3A6QwfbqCeTlEAEY2Rkx8r582+55l03bsxdzCwoGsNGUurH+mKO46jC+8zZmWEwOM9K4iJzY5ZmV3UX1fVaO0dO42SHbS13VZpgJ6o+bKIOD80LKiIkqeze3r7mpzu7UmZYrHOhPG+8W8cxiSgFcmkoj04HErMq9cZ9StLBoocAvOnwAubuBDRdWIFCywbsmxUPZfWaXYGZGluap5VXXcnJsJgjlO/dMlpyrDMrsm0zVqllU7+15/S7NT/PcXKZZIx5vpuEsJibTxjMXWdXHfvOwpHNhPTcdrG5LZoS1bIzEImUpAube/panu7sSp1mtarh9WVgV6fLd1siGgf5vMO/MPNbngwclHdqDAkLHRGiqGYkLnsHX8I7+BIMPHgpA6X1G/HR+PkoyhAgiZ4aQMSJCROvJcYnXDP39cUcrapcMr6zM8l115wQf1p/ZdV5Xc25+80LYyfwOI8PBITrxuVkxK48cqHj6GhfFIJkra4UDXMX3XxitH3qnjCUtkWHoOvNzFESn7+/t7ftyc6uWVOstgyVR1gHF11oItJDrsj6mqeCBoJX1GuUXGwm4+xzyJl9DjkAc2ci6stWo0Bah09mj0eHRxFSRDBERnauzJq/D1ar/kLNdVNnXV26y675AFkWvGX4dHCGNPHQOkvGchGCRxUgMmJXmq50lzT027odFnSzmSt7RMNQj9Kx+12YGUKuN7MULUnnt/T0tT/Z2TU72WYzeXG01QD+x9lF9iy5LwEoZ2ZV6nUFnfuddLAoAkA31Fi5Z+YwDFSYUNy0CR/Gz8P5dAHscb/MaGppmV5+pSon3WyOcHlvV2C6utFi6pwuJWR7Mn6vtevk3ppfLHF4AUWcDYt99pa7rbP0FK85+nd33Y0Z4Oe3i42t0RQ0FR/vglmKlaTSz/X0dj7e2T0n0Wbz1TTiGnaNnpwCAIhoFYBCyNlybwYS/T0zf+DuwMEo6iXwcCHBEcRS6yTUVazGQVqLA3Oj0e1RyB8zzP19MacrqxbHdHYku+zejZfGHb3fvGBuOAxuF3Evbjt4rKLzpKPCB13G2G+NI5Lv0DpLb8mao9/OGn5RTxhKnv6W7q7nAx5m23hJKnmgu7fn8a6uuQk2yV/x6pOwq9Pn6aeD0f322vyOSYirw9SVv8Pj+B1/WQpH3/lsnG3dhI8S56B8Djk4DeYIIhgiIjtXZGV9IrvmNZkddbXpi5lFw2jt2oWela8ZC9sW2GYULrTOWEVuZAbMGr9ubnXPheYBW+9IH+hotjVcJl1y2i1LR6Awg9qVjus3mK1xNqn4Cz09fY91dqfHSdICf5sEed/5bV8PGoyi9s2dg0joR2TmcazGcawGsdQ8FdcvrcV+YTUK5kWiN8Z5J7fR6SwZM2acQ0rKuebWlmkXqqoWp5vNEY5dQcKEc7qrq8vEmuL7zQvHxXHUiCGejs2nCRuSHz3+Qe0vR7xL2cyV9YJd1Ex3z6kZ4HeXCrOVjOlzmC3xNqnki909fY92dWeMl6RFzhv5lCxoonYJv6zEMgkJ15GS8Bs8g9/w09ZI9JQswqn2TfhoUioq01zthwgJ8QnX18XFX7f090cfq6pcEt3RkZzp6PpBss5/23DSPF2KL1hvyVyqgxjm6lhR+vHLZ0UtPFHZfXbZ8Nck61VRXsuxWzWM3jCcb40hby4kuQezeaLNVvxQd8/gtq6ezJjAE/JQ/HL2PBhF7f8PGpGuF1FZh7EBh7EBAtvqp+Nq5Xp8YliBwoxwDDjNPU4EfURE1wpT1iewWnVlNTWZ7XW180Z2zQmGa2LL2leFgmvrLBktM6VElz/IC+M2pl7vLW8zS/13rA+wrW3oXuxdoi7MIPVzvbkL82CSzVb8cFeP5eHu7swYiRf72yQX8Yuog2qhLOlg0TQADhPoBQTM5mh0XcjBp12b8NGU6ah22W1mRnNr69QLVZWL55rNkQ5XnGOliKP3mxfOjoDRpQWgTnPLsQ/rXrpr0cwY87UWEiLjBdvgxXWFf30r/JEBfv55saE1hlQP2nEZ5oFJVlvx1u5u20NdPZlRzKqlf/YmNqbGLkTW13BCd5GUav5H69P3Vufl+rQuerDdqQN/JZbI0IWYBQdwLw7gXghsrU1F5ZUN2Be+FMczjBh0mMeKCAnx8TXr4uJqZNe8anF0R/uku1zzDqFv5evGIx3zbdMLc6ypThfSYgzxK2aMM5282lN6xzaXzXLlis5oih/ufvcaUdoaQ75/r5n7p1itxdu6eviL3T2mSOalPrfBBSRGRy/C625wXEcFT7UWS7P0xdLMCRU8bUovwhMhn7i6yWQAPkt3BQSfqFP8bYBSJNJNuYy5Uy5jLv6Xvz4Qi/YzS3G8dxM+nD4JN0Y8jnnLNTfth82mK6+pyWirrcnIYRZvB6YQYot111aXi3Wl95kXhCVw9Kjz+pz4zdNq+y51WqTBWwt8krmyH0aT3NsQCjN9uOrN3DvNai15pKsbX+juzYpgvmv+7w+Y0TcAQ20jj2+7zJMHSqSZ+iKeFXNBSpnUhugJcL0I40y4IGoiehnAFgBNzOxwjcUVgk3UwV0LmSisAxMWfYRcfIRc6NhSnYaL1zdgX+RinMjUw3pXNJkoWtNTUooxfXpxS2vr1BNVlYvnDHXNzWQ1vWM4ZZkqxR3aaDEt1UEcMbuJQELS+qRtRz6+8cqtENLbZW5vr377ZNWbuSfFYi15rKtbeKCnd34Y83KvjufQDFgs0NW2ILr5qpTcX8IzhSJpVtR5KSWxDvFJAKnxPsyEHNPtjFcA/Dfks9UeoYnaj1hJn1KOzJRyZALMfRPQemo5jgxsxMczhh8lJUJ8fHzN2ri4Gmt/f9TxK1WLI9vbJ8suMkFfI7auyxcKatZa5jXOkpJGPNQx3pi4alpk+unrveXy6zyQxmyzMN2OzuszemnVm7kr1WI5/1hXt+6zPb1ZRoajwBiVhwXbINzowLima5zYfV5KQZE0K7yUZ0y8ysmTbRBnAPBmIn6XovGY+bD9lJbHaKIOFIgi2hC/+H18Hu/j8w6PkhJBFxHRvTzTdOCma95aW5OxmFk0MvHUQ4YLU89KV47nmhfOjETYXfvgSxO2JN/oq+q2sjkKQLhkvVEmiMm35vmqrnozd6ZZLKVf7uw25vb0ZhngPSFLTC3diKiv5fjOcp5uLZZSw4qlmXGXeMqUARgnQ57b+gOfp4DSRB2gWMiQWors1FJk3zxKenYlDls2YN+sOLQmAXe65m2tU05UVS2ZPTgYmdwl9C9/w3i002SbdniJddYqGuJeCyRMXpv08OH99b9dAwCS5XIzxOQUwO56L/PM9Sbmjtlmy/nHu7qMm3v65hsA1Y6WMqOrF2F1DTyh/RJPsRRLqfoiKTW2jKdP7kZkPALz8+HzEFVN1MGAfJR06Z/wEP6Eh+4+SkpSfFx87doJcbXWgf6o41V217xUd31NhVh34T7zAt1Ejrm1ZRVnnLR6ckTaubq+ywskS7UBYWtFQHa9W9xwvYm5Ld1sLnuiszvsnt6++XoPhMyMgUHoa5s5trWSJw2U8EyxSJoVdUGaPqkJExKgYmVTH6FaIgxX0UQdhAw7StqRhPry1TgkraP9s2MjOm665hW1NfNaamozct41nNZNliYUbLKYcvTQRRIRrZj4QNxb137Wa5PL3EoAcGSe6643MbdkDJrLn+zqjtzY25elUyBkZtisEOvaENV0lZP7zkszUCSljivlGYnXeWIyQ5gFwKWKp0FArK8HDLbgk34ALodJjjlGOEpKzO1tbZNLqyqXzDYPRPFq69y62bZJSwCgqf/64YMNb6wJG/flkvVHd5m+/pxY3xxLkxx1T8zNWYPm8ic7u6LX9/WbRLkwnENsLDR0IrLhOk/sLpOmS0WcGl4ipSZU8aTJFuhGPdQSQlyozst1ukVFRG9ATqwQD6ARwPeY+SV3BgyaO7X9HLUm6NEgogGEp5/CsvRTWCYfJaXai2viDhrWTPhErx/gqvNVi8PPtcw6kWteND0hbOqqpPAZJW3mS819Rpxvjr3b9RaYG7MHByue6uiOXdPfbxKGJaiQGO09CK+7wfEdFTzVViTNMhRLqXEXeerkPoQlwcXV3xDGpc8sM29Ta8CguVMnHSwaBzk5goY7MEsR6LswH2fbVliOcPwNsy3m6mZh4WDa1L3X37xixWHjS5vFtQAgMNcvHBi8/HRnV+zK/oFMYvT3w1jbyOPbLvFkc4mUqiviWTFl0rTJ7Yj2+ZwxyKiuzsv1ae1qp6ImorkAHsDtLYE6AO/aS8/6jKSDRQYAg74cM5QhlpomcV3FgpbGtnvP9lpfTvxlWliEvvmeDr0lo9cYfoFniMVyIEbSDcSP9butJ9RU5+W6UmhBNUYVNRH9HYBtAH4HoNb+9BTINax+x8x5XrdwCEkHi4LDrQgiqM9aO63s8NlHzpTAwi0rENwFHgIOBtX/7Z73PAr7VIqzOfUzADKY2TL0SSL6dwAXAPhU1AAskCsgaHiKjfv1pW0nhcaBJQvGHxRTWvuN1ybnXrT078+AH1ZsQxUC+7xSqLNvZQnASKuhyVBQbVFFVC9bMxYRr/ccN+6/0SY2DqwVIRkSwy8arsXd0M9srJcM0U91A3qfTq1CHJuvB3R2p/4mgP1EdBm3T5pMg7yH+HUv2uUIM4BIP4wbElCXudJwurWbLNKtAxSbhVPFNwxsOG8Sku75zXtzGhKXnKTY5+abu98sZFuD0zI+Gk7xvP65QkYVNTN/SESzASzBnQtlp5jZ599A0O7U7mGROg3nWoup3byChv3Nn9e90/vXOl1Y/WTMZqA958yPZhxd8cMuY/Qjq639nx6xDhxdCMDhGXANp/g8g4zTRRFmlpj5BDP/0f444SdBA5qolcEs6S53FhoP1FuFdvOa4YLWw2rOoOqsNlGIAxE1xuKi0dKdMPfi61cBQBe+dJUh6pE6QLjqn18gJHC7Yqq7BNtKZ5+/DQgWhJaBUuP++ou6Kz2rCRgxf/gXxcPnQIgeJJoMACdnkxkAJjUcXxLVff0IAAi6pDRj7HNxJMSc8J31IYUmaic0+NuAgGfA1mg42nhUf6Y1k2w8auK7r4rv2xpFsRFE4QBQYBKm3nxtQdFPs0myXgcAImO0MeaZZaJxfgH8MEcMckJL1ET0MhE1EdH5Ic9NIKJ9RHTZ/q+SiKRa55eMUSQ26863FxgLGiKEHutKZ4UHIjDQO4Pqsy8a9E03n6uZSDNsJNdK1tkGx2WV7u7EkKmWPmLjWv24L5QB5POqE0FMaIkacoqWzcOe2wlgPzOnAdhv/9lV6lSyK6QQbvSdNn5yo05X17eWgChX2jwq7i8mQkSZ0XDHPmpdHK7c/H9ce7kpvrX0yNDXRf2MLGPMV3Wg8LPqWB/yNDm/RF28KmpmPoy7V/8eAJBv/38+gM8r6NKnWRkDHeqxXDMWNJw0lLbnECtLyfOk7kMdAJQbDHe408fThTui9jIv/GqFaBu8Y9+ahMgEY8yz2YI+9RAALcpvdELuTj0Sicx8031rwJ3pVJ1Rrb45QYhV6tWfbS0wHG1KogGb4+qWDohBT8cktGYDwFW9/o5kh4WZdMeXg8CSfuHZFw1gHhj6PBEJhnEPrNNHfOY0gA7Fv8PYodLXA/p1oYzlwHMl3/SXvWVLsCBe7T5m3F/fJTYPrCXArVrWX9F9UEoEAwA06cQ7aoI1xdJkq3BnwYSo3rrUKXUFI1YaFY0Ziw3RT/VoUWgj0g/A59uB/hB1I5Fc+cH+r5I5x1X4IewuEKAO80Xj/hsl+ktdK0gO03WbR8T9t8oC9dPdSRGuJuL68OfSKn+/xmDuOjNSf4I4foox9rmZJCYd9sSuEKRix569Pg+n9oeo3wXwhP3/TwB4x9WGDeuzzcDdH7iQxmxrM5xoKjR82pxGVva4akYS2honoHs+AHQIQgcTxQ6/5ug84a5IQwIo58yPJoG5Y6R+iXRGY/Qja3RhK49Ciye4SZk/BvX2ltYbAI4DmENEtUT0DOSTXffY48k3QflJL7+8UT6H2aar6DxsPNggCJ2W1aTS3+o53bsVZM/zfdmgvzHSNUczKI1HmBaFDbYnz6r646jvvy586UpD1KNaFJrMBX8M6u3V723MnMzMemaewswvMXMrM29k5jRm3sTMSmNjj3nF2ABCaOovMn5SX6W71rOGVD4G+aBYeCt5Y7nB0DHSNZ2RFG/WjbzAM6324IqI3vqjo40h6BLTjLHPxZMQc9wjY4Of0LtTe4lRP1BBTb+13lDYeMxwri2bJFa99E0K1ddEUX/GzZ/LjAaHsfSXJ9OId3EAWHTuxUywzeHrAEBkjDLGPLPcHoVmGe3aECb07tRe4iRC7UNi40F9SVuB8XBjjNBn9VoVi7/S/alq6M+Ver3DU3qHM8jhySy9tT8m88JLjXAhwZ0chfZgxRiMQmvesWevz7ezgCAUdcP67H4A5/xth1qINb0njftvNIr1/WvJy0cc7xc+vaP0TL1OdBh99ukcmsOj7DRMbCleML7jkkur3aI+xWSM+ap+jEWhHfLXwEEnajtB74JTt+WK8WD9aX1ZxxJieD0xXQZdrQwn8x3lbnsEwWHgT38YRfcbUDFan1ml/7NUsJlduhuREBkvR6HNOoSxEYV2yF8Da6L2NRapS3+6pcBwrGkqmaURq1N6g2/o3rrjMEw/UZ/kJJqvbBq1jPa6KFnDFhT/pw3MLp1zl6PQPrdOH7H5NADf1cD2D4f8NbAmal/BzGJl1xHjgfpBsXVwLfk4geJ6oeiO8M8ren0diEY9yVVgIqeHQ2K6rs5JavhU0Sq3aJy32BD9dC+gD9XtyaYde/b67XcLSlE3rM9uAG6fJgp0qG2wzHigvkxf1b2K/FAFcZlw4YKebNOHPldu0DvdSjw7i+axC7nW0y/+drXO0luixCZBjJ1ijH0ulcTkUIxCO+TPwYNS1Hb2+tsApwzamg3Hmo4YTrWkk5UznDfwDi+Ib9/lRpcZDQMjXTsUi47CusOd77USWMg5++PxYFZUQUWOQtu2Rhe+KtSi0A76c/BgFvUefxvgEImturKOAuOhBoPQbVnlLGGBNyFI0lKhfM7w5y8ZDC7ZVDyDXMpbHdHfPHVG9QfFSu0DAF3YklCKQmPIodB+I5hFfRwBeL5aaOg/a9x/45qupnctATHOW3iXTcLZEpH4rrI5dTqdS6mWC0w0Yn6zkZhx7YNVYf0tbuUyux2FFhvsUWgnduzZO2pgjrcJWlE3rM9mAG/6246bUK+1xnC44YShuG0hSUj1tz032a57Z0SXuEMUXJrbn0+huaygMGHO2R+ngSW3EgPIUWhPLxeN2cEchfZHVy4aKdWX/fm/IqIKIrpARD9yx4CgFbUd/7vgNu7Xn2stMBxpTBD6bcv8bc5QdLBasqjqrjpOVsBqHbnyyl1IAunaokbfrx6KwdITl17x22oFZt6FPmJDsEahMYDfu3jtKxiW6ouI1kPODDSfmTMA/MQdI4Ja1A3rs0/Bj6vg4jV7+ZqmgbUUgLWzHxCOFQmEuxI71uh1dSByuTb5mVmkaBErufHTxdFdVz1a1b4dhRYRTFFoR3bs2evS0WAHqb6eA5DHzIP2a9zKbxbUorbjcxecOs2XjQfqz+krOpcTY7LzFv7ha7r3RgwKKTcYRg0qGU6BSVCclGFB0X8uIslarbTdUOQotK9lC/pZBQiOKLTXPGw/G8BqIvqUiAqIaLE7nYSCqH3ngpulDsPJ5sOGE80zySIt8Nm4bhCGwf40qps/0mtlRkOvkr4uT0KapLB8jCiZI+eX/LwXHlZzsUehrdVH3HcGgR2F1g/XXW9H6ABMALAMwN8CeJOcBAiNRNCLumF9dhGAIq8OwizpLnUWGg/W2+zla0SvjqcC28QDRUQYN9JrFw0GZXc9ImqKxUWlNkzouJSR0FJ0xPmVzhGN6TkBHoX22o49ez2tm1UL4C2WOQm5smy8kzZ3EfSituPWgoIr3Cpfc9Vx+ZpA5GnxQ4d/22t6XbjS/j6dQ25V5sgoe3mlaB1QRYhyFNrzswI0Cu1nKvTxJwDrAcBemNIAQNFUCQgdUe+B2rnLBqwNhiONxwxnWk3OytcEGlHo7ZxCzdmOXm8ThAlK+ywwCVPcsUVgSbfo3IvhYFYlYoxINMhRaKuPAlA0jfAiB3bs2Xve+WW3cZDq62UAM+3bXL8D8AS7cGZ9OCEh6ob12VYAP1Wls1vlaxrHCb3eS1jgTZ4SPyolGjl9MAN8syCeEmoTbpfkUcq43hszptYeOO1OW0fowhavNEQ9Wg+IgRCFpvgu7SDVl5mZH2PmTGZeyMwH3DEmJERt51fwMKm8cKPvlPGTGzfs5WtGnI8GA4/p9jl0rxuGFMRTSl28+9uHaVVvrTEMdqgqbEGXOMsY+6y/o9CuIMDOIYSMqBvWZ/cA+IU7banHUm08VH/KUNq+mBgp6lrmW+LR0ZyAzmxHr18y6Bvd7fvYsJI8Ssk58+OpYFZ1BXtIFNph+CcK7b/8kdt7NEJG1Hb+Ey4cFbyFVerRn2kpMBxtmkSDklt7goHGs7q95USOV+fLjAZFJ6mGUphBM91tCwBh5o7E2ZVvuhydpgR9xIY1+nFf9HUUWgNkDzGgCClR289Z/9aVa8Wr3UeN++t7xJbBtSSvMoYED4mHYkd7fXhBPCU0x9Iki+BZPbMpdYeXR/bUeSXJhaif7usotB/s2LM3UBbrbhFSoraTh1HcMGofrLCXr1lJwF2nl4KZqdRUF40+02jXDC+Ip5TqJM9Pxi069+8mkmxeqTU+JArtELwbhVaFALxLAyEo6ob12ZUA/ueuFwZtrYYTTYWGky2z1ShfE4h8XfxTJdHoZ7eHF8RTypERSvIoRWcbiM688KsWMHtlLno7F9p9Z6AwEk4B/7Bjz96APEkWcqK2833cDClktukqOgqMhxpENcvXBCKfFY87LQs8UkE8JRydR7NHKsmjlITW0uwJ7eWFnvYzGnIU2jP9XohCO4tAOCHogJD8gDesz24D8E/28jVXdNd616pdvibQmEPXr0bQ4NzRrnFUEE8JXZEUZ9apU1I4q3T3csFmvqRGX44QxJjJchTaJDWj0Hbu2LM3YA+YhKSoAUBX2fXfhnNtepI4zfnVwc8LurevObvGUUE8pVyarM4Ks8A2w8KinxLsRw29hRyF9hdqRaG9v2PP3n1q2OUtQlbUtX+5xgZgu7/t8BX3CGemO7vGUUE8pRzOdFySRynR3dfSkuuPuZUCSSlyFNpjDYDobhBNN+QzzwFNyIoaAKrzcgvg+RnXgCeHLpYbyDrD2XUXjAZVFnZOzqG5DLi9NTacuZfeWK239BSp1d9oCLqJqcbY5yaSMN6d6qnf2bFnb8DlxRtOSIvazg64cdIlmHhB95ZLGTKq9HpVjoz2Gymqz+h6iiNnEFjIOfPjeDC7lLnU4/HIMM4Y89QKhbnQjmCkXZUAJORFXZ2X2wjgK/62w3swrxAuuLRuMFpBPKWUTaNWtfoCgPCBlikzr75XqmafzpBzoX3xogtRaIMAvhLIi2NDCXlRA0B1Xu47AP7X33Z4g/VCUYmOJJe2qXoEQbVgmwITRavV101Srn+0Mry/2aeHM0T99ExjzNcMoIgzo1z2gx179ipOEuEvxoSo7fw1oJ7LGCh8XfenTleu6yfqk4ic7mO7yrlUSmfAaZUPpSw6++M5YMntQyfuQEJEnDHmawsEfdoh3L0HfxKAW6l6/cWYEXV1Xm4fgEcAuFShMRgQYbMuoMp5rlx7Ra+vU3Nsi47CuiJQrmafAGCw9E6YV57v88UoOQrts8Oj0DoAbA3UyDFHjBlRA0B1Xu45AP/gbzvU4n7h0yKB2KUcVuVGvepJ+1wtyaOUpKbTOTGdVX5JWXQ7Cs1wHsBTO/bsrfaHHZ4wpkRt5ycAAjp4wFWe173rsvt7wWDoV3t8JSV5lJJd/N85JFn8ktXEHoX25x179v7JH+N7ypgTdXVeLgN4GEE+vzbCPDCXrrt8MOWyiwXxlHBhurKSPEoQJXNEdvHP+8Gs2n64Ag4SCd/xw7iqMOZEDQDVebkdAHIBuFXzKRB4SCwoIoLLK9C1Op3q6ZmUluRRyvjOy/MmNp9VJcWwAmoAbN2+e4NH+cr9yZgUNQBU5+VeAfB5KMmUEkB8RfxA0Z5ppygozh/tCqcVluRRSkbZ/60Wrf0XvDnGENoBbN6+e0PQftkDY1jUAFCdl3sMwFMIjpIut4hEf/d0anS5QoiSgnhKcackjxIILOac/UkkmL2dYaQfwGe3794QqMUCXGZMixoAqvNy3wDwPX/boYTHxY9LiFwvyKe0IJ4SKuWSPKpGlw0nsq8hZVrNPm+mKLIB2LZ99wavpFnyNWNe1ABQnZf7AwC/9rcdrvKE7mNFOdWUFsRTBBE1jodXz0QDwKwr76w2Dnac8lL3z2/fveEdL/XtczRR3+arCNCcU0MZj662RLRnK2mjtCCeUk66WZJHKTlnfjQdLKntFXxv++4Nv1S5T7+iidqOfavrawjwkzhf1b1/ngh6JW0UF8RTSEGmMNWb/d/EaO6cOOfSHlWyrtjZtX33hu+r2F9AoIl6CNV5uVydl7sdcv7wgOQvxIOKD1K4UxBPCbUJlGIjqJJVxRmT648sG9ddq8Y213e3797wTyr0E3Booh6B6rzcbwB40d92DGcSWupj0aM4E6o7BfGUUhsPn0V/LSz69/kepBhmAN/cvnvDD9W0KZDQRO2A6rzcvwHwr/62YyjP6965RKTsb+ZuQTyleFqSRwk622BU1vndbW6kGLYCeHL77g1qlJ0NWDRRj0J1Xu7fA/g65C0Pv/N58WiC0jaeFMRTQmEmpXp7jKHEtZVlxbVdUJJiuBvA57fv3vCqswuJ6GUiarKXlL353C4iqiOiIvvjfnfs9gWaqJ1QnZf7c8ghpS6dW/YWqVR3bRwNuHTMciieFMRTQksMJVtE37ngAGA6/8vlgm3QleQFlQCWbd+94X0Xu34FwOYRnv8PZs62Pz5w1U5fo4naBarzcj8CsALyh8MvvKB72y3BeFIQTylXE+GVUjqOENhmWHTuP0QnKYb3AViiJFKMmQ/De5U9vI4mahepzsstA7AYgKvf9qryGeGUW9tGZQaDz6YORzIERVttahDVUzNr8o1CRymGfwrgvu27N6h1lvzrRFRid8/Hq9Sn6miiVoD9dNdnIZf18VlN4vlUeSmMLG7NWa8a9D4T2rF0SlOjJI9SZl/es0Zv7j435Kk+AE9t373hWyqetvoFgFQA2QDqEYC7IzcZM6J2sPjxEBFdICKJiHJc6ce+l/09AGsgVz70Oi/o3nZ7D7hZFGNVNGVUuiIpblCvTkkeJRBAOWd/lAjmTgBnACzcvnvDK2qOwcyNzGxjecX9VwCWqNm/mowZUWPkxY/zAB4EoDh1TnVe7lEA8yFHoHn17rRGKJnlbts+H2xnDUWtkjxKCR9oS5x9ec8PASzfvnuD6pk/iWjoabQvQP7sBCReObkTiDDzYSJKGfZcOQAQuZcUpDovtxfA9pSd7/8JwMsApnhm5d2sEkpL9WQbtea0IzoEoR0+nvsdzqSIrGqfe+CXADxxz4FfnrhHhc6I6A0A6wDEE1Et5FN864goG/IXeDXkkOKAZCzdqb1GdV7uPgAmAL9Ru++/0r3t9irsZYPe53fNU7PVLcnjBCvkuW12ekW5avW4mHkbMyczs56ZpzDzS8z8ZWY2MXMWM3+Omf3ikbiCJmqVqM7L7ajOy30cwD0AStToU4Bky6GLivemb1KmUkE8JahdkmcUPgBgSq8o/5v0inLVkyoGM5qoVaY6L/cTAAsAPAN5ldRt7hVOFYvEiqPIblJmNPglx/kFlUvyDKMcwH3pFeW56RXlQZ080ltoovYC1Xm5UnVe7ssA0iBvf7mVx2u77h2PzkFX6fV+WTPxRkkeyMEgLwDISq8o/9AL/YcMxBxU6bncZujiB4BGyIsfbQD+C0AC5GoMRcz8GbXHTtn5/mQA/wzgywBcqjyph9V8yfh4PxFi3B135bTJJV2iqPhUl6forDz42o9tTHA95dIo9ADYDeCH6RXlqhckCEXGjKgDgZSd708H8A3IVThHrUD5sHjw5I/0v/JoL3R+ytRGNetnKeFXP7OejenDQg+6aIf8hfuz9IryoA3Z9Aea++1DqvNyr1Xn5f41gKkA/hZyjukR+Zq416MVZLUL4imlaCa5G3N+BcA3AUxPryj/niZo5Wii9gPVebmd1Xm5PwEwE8CjAO7IlBmBgd6ZVJ/tyRhqF8RTSoGJlOQZlwAcgBwIlJZeUf6z9Ipynx1ECTXGTPBJIFKdl2sF8DqA11N2vp8Nec79yKPi/itEWOFJ394oiKeEsmk0l4EuwqhVRIoAvAbgjfSKcr9+CYUSmqgDhOq83CIARSk73//2JvHMWgDbIFcQcauyhjcK4ilBEkhsjcLF+G4sHvZSNeQvstfSK8qDPnF+IKItlAUyu2JEyCv2DwLYBGC2q00fS048XBxmXOMly1zi6Y9sBZvP8mrIhyw+AvBnAMfTK8rd+tAR0csAtgBoYubMYa/tgFzRNIGZvZfnPAjQRB1M7IqZDGADgPUAVmIUka+bOvlsq070ZPXZXSTIhx0Oz6znT/JesR1JryhXJRiFiNZA3uJ6daioiWgq5GIMcwEs0kStiTp42RUTB2AZgOWQY8/nQD7zq1uQMvW6lWialy1ogRzhVWF/lAH4tPSJUq/N5+2HcvYOE/UfAPwAwDsAcsa6qLU5dTCzq7MVciaW29lYdsXoAcwUZHGnAJhuf0wCEAkgYtgjHMDwY2oDAHoh52VrHfKox20BV5Q+UerVGlquQEQPAKhj5mJ3T9uFGtqdWgOmfFM4ZHFbAPSVPlEaENlTR2LonZqIIgAcBHAvM3cSUTW0O7Umao3gYpioTQD243Zs/RQANwAsYeYGP5nod7TgEz/jIM3Sj4mowp7k7m0iivWjiQELM5cy80RmTmHmFAC1ABaOZUEDmqgDgVdwd5qlfQAymTkLclaP7/jaqEDEfijnOIA5RFRLRM/426ZARHO/A4CRVnSHvPYFAF9i5kd9bthtG+7aHyaiHwB4APIWVhOAJ5nZJ0XyNEZHu1MHPk9DDtrwJ6/gbm/ix/bUPtkA9gL4R18bpTEymqgDGCL6LuQ8XK/5046RKlYwc9eQHyPhh3zfGiOj7VMHKET0JGSXdyMH6ByJiP4FwOOQ97PX+9kcDTvanToAIaLNAL4N4HPM7FYqJF/AzN9l5qmQPYmv+9seDRlN1H7GwYruf0POjLLPXjZ1t1+NdM5rAL7obyM0ZDT3288w87YRnn7J54YohIjSmPlmiZ0HAJ+kBdZwAU3UGk5xULHifiKaA3lL6xqAZ/1nocZQtH1qDY0QQ5tTa2iEGJqoNTRCDE3UGhohhiZqDY0QQxO1hkaIoYlaQyPE0EStoRFiaKLW0AgxNFFraIQYmqg1NEIMTdQaGiGGJmoNjRBDE7WGRoihiVpDI8TQRK2hEWJootbQCDH+PwONVZGdoDM7AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] @@ -923,34 +863,90 @@ } ], "source": [ - "c.plot.pie(y=0, legend=False)" + "Xy_train = list(zip(X_train, y_train))\n", + "Xy_test = list(zip(X_test, y_test))\n", + "train_dict = {\"1\":[], \"2\":[],\"3\":[], \"4\":[], \"5\":[],\"6\":[], \"7\":[], \"8\":[],\"9\":[], \"10\":[], \"11\":[],\"12\":[], \"13\":[], \"14\":[], \"15\": [], \"16\": []}\n", + "\n", + "[train_dict[str(e[1])].append(e[0]) for e in Xy_train]\n", + "[print(f'Key: {k}: {len(v)}') for k, v in train_dict.items()]\n", + "pd.DataFrame.from_dict({k: len(v) for k, v in train_dict.items()}, orient='index').plot.pie(subplots=True, legend=False)" ] }, { "cell_type": "code", - "execution_count": 24, - "id": "fd3f3f1e", - "metadata": {}, + "execution_count": 27, + "id": "34e0af8d", + "metadata": { + "tags": [] + }, "outputs": [ { - "ename": "SyntaxError", - "evalue": "unmatched ']' (, line 1)", - "output_type": "error", - "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m ]]]\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m unmatched ']'\n" + "name": "stdout", + "output_type": "stream", + "text": [ + "Key: 1: 790\n", + "Key: 2: 59\n", + "Key: 3: 4330\n", + "Key: 4: 0\n", + "Key: 5: 545\n", + "Key: 6: 348\n", + "Key: 7: 5245\n", + "Key: 8: 3558\n", + "Key: 9: 2565\n", + "Key: 10: 4163\n", + "Key: 11: 3654\n", + "Key: 12: 2868\n", + "Key: 13: 2130\n", + "Key: 14: 2360\n", + "Key: 15: 2390\n", + "Key: 16: 2101\n" ] + }, + { + "data": { + "text/plain": [ + "array([], dtype=object)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "]" + "Xy_test = list(zip(X_test, y_test))\n", + "test_dict = {\"1\":[], \"2\":[],\"3\":[], \"4\":[], \"5\":[],\"6\":[], \"7\":[], \"8\":[],\"9\":[], \"10\":[], \"11\":[],\"12\":[], \"13\":[], \"14\":[], \"15\": [], \"16\": []}\n", + "\n", + "[test_dict[str(e[1])].append(e[0]) for e in Xy_test]\n", + "[print(f'Key: {k}: {len(v)}') for k, v in test_dict.items()]\n", + "pd.DataFrame.from_dict({k: len(v) for k, v in test_dict.items()}, orient='index').plot.pie(subplots=True, legend=False)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "615cccc9", + "execution_count": 28, + "id": "4b6d7b97", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 348 ms, sys: 22.5 ms, total: 371 ms\n", + "Wall time: 370 ms\n" + ] + } + ], "source": [ "%%time\n", "\n", @@ -958,34 +954,54 @@ "\n", "\n", "lb = LabelBinarizer()\n", - "yyy_train = lb.fit_transform(yy_train)\n", - "yyy_test = lb.fit_transform(yy_test)\n", - "\n", - "for e in test:\n", - " e['label'] = lb.transform([e['label']])\n", - " e['data'] = np.array(e['data'])\n", - " \n", - "# for e in train:\n", - "# e['label'] = lb.transform([e['label']])\n", - "# e['data'] = np.array(e['data'])" + "yy_train = lb.fit_transform(y_train)\n", + "yy_test = lb.transform(y_test)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "f56e5055", + "execution_count": 29, + "id": "90634662", "metadata": {}, "outputs": [], "source": [ - "print(XX_train.shape)\n", - "print(yyy_train.shape)\n", - "print(XX_test.shape)\n", - "print(yyy_test.shape)" + "for e in test:\n", + " e['label'] = lb.transform([e['label']])\n", + " e['data'] = np.array(e['data'])\n", + "\n", + " \n", + "for e in train:\n", + " e['label'] = lb.transform([e['label']])\n", + " e['data'] = np.array(e['data'])" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "02c58b6d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(57800, 5, 336)\n", + "(57800, 16)\n", + "(37106, 5, 336)\n", + "(37106, 16)\n" + ] + } + ], + "source": [ + "print(X_train.shape)\n", + "print(yy_train.shape)\n", + "print(X_test.shape)\n", + "print(yy_test.shape)" ] }, { "cell_type": "markdown", - "id": "f046e211", + "id": "ff2da104", "metadata": {}, "source": [ "# Building Model" @@ -993,8 +1009,8 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "53832797", + "execution_count": 31, + "id": "a5ef1b0f", "metadata": {}, "outputs": [], "source": [ @@ -1010,21 +1026,21 @@ " \n", " ncount = shape[0]*shape[1]\n", " \n", - " model.add(Flatten(input_shape=shape))\n", + " model.add(Flatten(input_shape=shape, name='flatten'))\n", " \n", - " model.add(Dropout(drop_count))\n", - " model.add(BatchNormalization())\n", + " model.add(Dropout(drop_count, name=f'dropout_{drop_count*100}'))\n", + " model.add(BatchNormalization(name='batchNorm'))\n", " \n", - " for i in range(1,layer_count):\n", + " for i in range(2,layer_count+2):\n", " neurons = int(ncount/pow(dense_steps,i))\n", - " if neurons <= classes*dense_steps:\n", + " if neurons <= classes:\n", " break\n", - " model.add(Dropout(drop_count*i))\n", + " model.add(Dropout(drop_count*i, name=f'HiddenDropout_{drop_count*i*100:.0f}'))\n", " model.add(Dense(neurons, activation='relu', \n", - " kernel_regularizer=l2(0.001))\n", + " kernel_regularizer=l2(0.001), name=f'Hidden_{i}')\n", " )\n", " \n", - " model.add(Dense(classes, activation='softmax'))\n", + " model.add(Dense(classes, activation='softmax', name='Output'))\n", " \n", " model.compile(\n", " optimizer=Adam(),\n", @@ -1032,14 +1048,13 @@ " metrics=[\"acc\"],\n", " )\n", " \n", - " return model\n", - "\n" + " return model" ] }, { "cell_type": "code", - "execution_count": null, - "id": "64f2aaa7", + "execution_count": 32, + "id": "ccbb5d69", "metadata": {}, "outputs": [], "source": [ @@ -1060,7 +1075,7 @@ " \n", " history = model.fit(X_train, \n", " y_train,\n", - " epochs=50,\n", + " epochs=epoch,\n", " batch_size=32,\n", " verbose=2,\n", " validation_data=(X_test, y_test),\n", @@ -1073,19 +1088,184 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "858670a8", + "execution_count": 33, + "id": "2032334e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "flatten (Flatten) (None, 1680) 0 \n", + "_________________________________________________________________\n", + "dropout_10.0 (Dropout) (None, 1680) 0 \n", + "_________________________________________________________________\n", + "batchNorm (BatchNormalizatio (None, 1680) 6720 \n", + "_________________________________________________________________\n", + "HiddenDropout_20 (Dropout) (None, 1680) 0 \n", + "_________________________________________________________________\n", + "Hidden_2 (Dense) (None, 186) 312666 \n", + "_________________________________________________________________\n", + "HiddenDropout_30 (Dropout) (None, 186) 0 \n", + "_________________________________________________________________\n", + "Hidden_3 (Dense) (None, 62) 11594 \n", + "_________________________________________________________________\n", + "Output (Dense) (None, 16) 1008 \n", + "=================================================================\n", + "Total params: 331,988\n", + "Trainable params: 328,628\n", + "Non-trainable params: 3,360\n", + "_________________________________________________________________\n", + "Epoch 1/50\n", + "1807/1807 - 7s - loss: 0.9538 - acc: 0.8336 - val_loss: 3.6780 - val_acc: 0.3465\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 2/50\n", + "1807/1807 - 6s - loss: 0.5806 - acc: 0.9273 - val_loss: 3.6350 - val_acc: 0.3550\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 3/50\n", + "1807/1807 - 6s - loss: 0.5180 - acc: 0.9391 - val_loss: 3.9988 - val_acc: 0.3526\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 4/50\n", + "1807/1807 - 6s - loss: 0.4804 - acc: 0.9477 - val_loss: 3.9750 - val_acc: 0.3467\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 5/50\n", + "1807/1807 - 6s - loss: 0.4737 - acc: 0.9476 - val_loss: 4.1912 - val_acc: 0.3614\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 6/50\n", + "1807/1807 - 6s - loss: 0.4542 - acc: 0.9515 - val_loss: 3.9345 - val_acc: 0.3631\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 7/50\n", + "1807/1807 - 6s - loss: 0.4476 - acc: 0.9516 - val_loss: 3.8092 - val_acc: 0.3848\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 8/50\n", + "1807/1807 - 7s - loss: 0.4408 - acc: 0.9528 - val_loss: 3.8813 - val_acc: 0.3970\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 9/50\n", + "1807/1807 - 7s - loss: 0.4283 - acc: 0.9537 - val_loss: 4.0705 - val_acc: 0.3612\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 10/50\n", + "1807/1807 - 6s - loss: 0.4218 - acc: 0.9543 - val_loss: 4.2684 - val_acc: 0.3690\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 11/50\n", + "1807/1807 - 6s - loss: 0.4198 - acc: 0.9563 - val_loss: 4.1950 - val_acc: 0.3870\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 12/50\n", + "1807/1807 - 6s - loss: 0.4149 - acc: 0.9553 - val_loss: 4.5124 - val_acc: 0.3501\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 13/50\n", + "1807/1807 - 6s - loss: 0.4078 - acc: 0.9571 - val_loss: 4.2129 - val_acc: 0.3756\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 14/50\n", + "1807/1807 - 6s - loss: 0.4025 - acc: 0.9578 - val_loss: 4.4079 - val_acc: 0.3655\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 15/50\n", + "1807/1807 - 6s - loss: 0.4055 - acc: 0.9575 - val_loss: 4.1757 - val_acc: 0.3840\n", + "Epoch 16/50\n", + "1807/1807 - 6s - loss: 0.4043 - acc: 0.9566 - val_loss: 4.3999 - val_acc: 0.3444\n", + "Epoch 17/50\n", + "1807/1807 - 6s - loss: 0.4010 - acc: 0.9566 - val_loss: 4.3559 - val_acc: 0.3768\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 18/50\n", + "1807/1807 - 6s - loss: 0.3933 - acc: 0.9594 - val_loss: 4.2061 - val_acc: 0.3845\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 19/50\n", + "1807/1807 - 6s - loss: 0.3968 - acc: 0.9579 - val_loss: 4.3063 - val_acc: 0.3800\n", + "Epoch 20/50\n", + "1807/1807 - 6s - loss: 0.3919 - acc: 0.9581 - val_loss: 4.3823 - val_acc: 0.3755\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 21/50\n", + "1807/1807 - 6s - loss: 0.3901 - acc: 0.9586 - val_loss: 4.3927 - val_acc: 0.3830\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 22/50\n", + "1807/1807 - 6s - loss: 0.3915 - acc: 0.9584 - val_loss: 4.2102 - val_acc: 0.3625\n", + "Epoch 23/50\n", + "1807/1807 - 6s - loss: 0.3854 - acc: 0.9585 - val_loss: 4.0813 - val_acc: 0.3962\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 24/50\n", + "1807/1807 - 6s - loss: 0.3871 - acc: 0.9587 - val_loss: 4.3345 - val_acc: 0.3638\n", + "Epoch 25/50\n", + "1807/1807 - 6s - loss: 0.3815 - acc: 0.9594 - val_loss: 4.2709 - val_acc: 0.3893\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 26/50\n", + "1807/1807 - 6s - loss: 0.3767 - acc: 0.9606 - val_loss: 4.4886 - val_acc: 0.3754\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 27/50\n", + "1807/1807 - 6s - loss: 0.3803 - acc: 0.9604 - val_loss: 4.2969 - val_acc: 0.3838\n", + "Epoch 28/50\n", + "1807/1807 - 6s - loss: 0.3804 - acc: 0.9595 - val_loss: 4.5919 - val_acc: 0.3615\n", + "Epoch 29/50\n", + "1807/1807 - 6s - loss: 0.3783 - acc: 0.9598 - val_loss: 4.5624 - val_acc: 0.3457\n", + "Epoch 30/50\n", + "1807/1807 - 6s - loss: 0.3762 - acc: 0.9595 - val_loss: 4.2288 - val_acc: 0.3515\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 31/50\n", + "1807/1807 - 6s - loss: 0.3771 - acc: 0.9609 - val_loss: 4.1085 - val_acc: 0.3797\n", + "Epoch 32/50\n", + "1807/1807 - 6s - loss: 0.3698 - acc: 0.9619 - val_loss: 4.1579 - val_acc: 0.3847\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 33/50\n", + "1807/1807 - 6s - loss: 0.3763 - acc: 0.9601 - val_loss: 4.4391 - val_acc: 0.3858\n", + "Epoch 34/50\n", + "1807/1807 - 6s - loss: 0.3725 - acc: 0.9607 - val_loss: 4.1958 - val_acc: 0.3683\n", + "Epoch 35/50\n", + "1807/1807 - 6s - loss: 0.3709 - acc: 0.9604 - val_loss: 4.1139 - val_acc: 0.3646\n", + "Epoch 36/50\n", + "1807/1807 - 6s - loss: 0.3673 - acc: 0.9618 - val_loss: 4.2390 - val_acc: 0.3969\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 37/50\n", + "1807/1807 - 6s - loss: 0.3686 - acc: 0.9616 - val_loss: 4.3510 - val_acc: 0.3647\n", + "Epoch 38/50\n", + "1807/1807 - 6s - loss: 0.3633 - acc: 0.9623 - val_loss: 4.4228 - val_acc: 0.3852\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 39/50\n", + "1807/1807 - 6s - loss: 0.3719 - acc: 0.9609 - val_loss: 4.2608 - val_acc: 0.3747\n", + "Epoch 40/50\n", + "1807/1807 - 6s - loss: 0.3668 - acc: 0.9608 - val_loss: 4.3543 - val_acc: 0.3529\n", + "Epoch 41/50\n", + "1807/1807 - 6s - loss: 0.3612 - acc: 0.9620 - val_loss: 4.0086 - val_acc: 0.3695\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 42/50\n", + "1807/1807 - 6s - loss: 0.3680 - acc: 0.9613 - val_loss: 4.2026 - val_acc: 0.3929\n", + "Epoch 43/50\n", + "1807/1807 - 6s - loss: 0.3576 - acc: 0.9633 - val_loss: 4.3106 - val_acc: 0.3515\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 44/50\n", + "1807/1807 - 6s - loss: 0.3651 - acc: 0.9605 - val_loss: 4.2105 - val_acc: 0.3962\n", + "Epoch 45/50\n", + "1807/1807 - 6s - loss: 0.3610 - acc: 0.9618 - val_loss: 4.4887 - val_acc: 0.3635\n", + "Epoch 46/50\n", + "1807/1807 - 6s - loss: 0.3681 - acc: 0.9606 - val_loss: 4.1679 - val_acc: 0.3470\n", + "Epoch 47/50\n", + "1807/1807 - 6s - loss: 0.3635 - acc: 0.9610 - val_loss: 4.1243 - val_acc: 0.4065\n", + "Epoch 48/50\n", + "1807/1807 - 6s - loss: 0.3568 - acc: 0.9624 - val_loss: 4.1263 - val_acc: 0.3691\n", + "INFO:tensorflow:Assets written to: training_1/cp.ckpt/assets\n", + "Epoch 49/50\n", + "1807/1807 - 6s - loss: 0.3585 - acc: 0.9622 - val_loss: 3.9652 - val_acc: 0.4077\n", + "Epoch 50/50\n", + "1807/1807 - 6s - loss: 0.3595 - acc: 0.9624 - val_loss: 4.0055 - val_acc: 0.3855\n", + "CPU times: user 8min 47s, sys: 46.3 s, total: 9min 34s\n", + "Wall time: 5min 33s\n" + ] + } + ], "source": [ "%%time\n", - "\n", - "model, history = train_model(np.array(XX_train), np.array(yyy_train), np.array(XX_test), np.array(yyy_test))" + "if 'model' not in locals():\n", + " tf.keras.backend.clear_session()\n", + " model, history = train_model(np.array(X_train), np.array(yy_train), np.array(X_test), np.array(yy_test))\n", + "else:\n", + " print(\"Loaded weights...\")\n", + " model.load_weights(checkpoint_path)" ] }, { "cell_type": "markdown", - "id": "6e905067", + "id": "3125ff7f", "metadata": {}, "source": [ "# Eval" @@ -1093,14 +1273,14 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "196dae1d", + "execution_count": 34, + "id": "03c2ed28", "metadata": {}, "outputs": [], "source": [ "def predict(model, entry):\n", " p_dict = dict()\n", - " predictions = np.argmax(model.predict(entry['data']), axis=-1)\n", + " predictions = np.argmax(model.predict(entry), axis=-1)\n", " for p in predictions:\n", " if p in p_dict:\n", " p_dict[p] += 1\n", @@ -1112,43 +1292,145 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "49aebfaa", + "execution_count": 35, + "id": "3a3df1c6", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.86 s, sys: 310 ms, total: 3.17 s\n", + "Wall time: 2.36 s\n" + ] + }, + { + "data": { + "text/plain": [ + "(43, 43)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "%%time\n", "\n", "ltest = [lb.inverse_transform(e['label'])[0] for e in test]\n", - "ptest = [predict(model, e) for e in test]\n", - "# for e in test:\n", - "# print(f\"Label: {lb.inverse_transform(e['label'])[0]:2d}\")\n", - "# print(f\"Prediction: {predict(model, e):2d}\\n_______________\")" + "ptest = [predict(model, e['data']) for e in test]\n", + "\n", + "len(ltest), len(ptest)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "6577cf5f", + "execution_count": 36, + "id": "ac38f7f4", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 3.85 s, sys: 350 ms, total: 4.2 s\n", + "Wall time: 2.93 s\n" + ] + }, + { + "data": { + "text/plain": [ + "(47, 47)" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "%%time\n", "\n", "ltrain = [lb.inverse_transform(e['label'])[0] for e in train]\n", - "ptrain = [predict(model, e) for e in train]\n", + "ptrain = [predict(model, e['data']) for e in train]\n", "\n", - "# for e in train:\n", - "# print(f\"Label: {lb.inverse_transform(e['label'])[0]:2d}\")\n", - "# print(f\"Prediction: {predict(model, e):2d}\\n_______________\")\n" + "\n", + "len(ltrain), len(ptrain)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "d62e2063", + "execution_count": 37, + "id": "626fa67e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16},\n", + " {1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16})" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(ltrain), set(ltest)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "3b643815", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.67 0.80 3\n", + " 2 0.00 0.00 0.00 1\n", + " 3 0.29 0.67 0.40 3\n", + " 4 0.00 0.00 0.00 0\n", + " 5 0.00 0.00 0.00 3\n", + " 6 1.00 0.33 0.50 3\n", + " 7 0.75 1.00 0.86 3\n", + " 8 0.00 0.00 0.00 3\n", + " 9 1.00 0.33 0.50 3\n", + " 10 0.00 0.00 0.00 3\n", + " 11 0.20 0.33 0.25 3\n", + " 12 0.60 1.00 0.75 3\n", + " 13 0.38 1.00 0.55 3\n", + " 14 0.00 0.00 0.00 3\n", + " 15 0.00 0.00 0.00 3\n", + " 16 0.75 1.00 0.86 3\n", + "\n", + " accuracy 0.44 43\n", + " macro avg 0.37 0.40 0.34 43\n", + "weighted avg 0.42 0.44 0.38 43\n", + "\n", + "CPU times: user 676 ms, sys: 176 ms, total: 852 ms\n", + "Wall time: 622 ms\n" + ] + } + ], "source": [ "%%time\n", "\n", @@ -1157,10 +1439,10 @@ "\n", "from sklearn.metrics import classification_report\n", "\n", - "set_digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }\n", + "set_digits = set(ltrain)\n", "\n", - "train_cm = confusion_matrix(ltrain, ptrain, normalize='true')\n", - "test_cm = confusion_matrix(ltest, ptest, normalize='true')\n", + "train_cm = confusion_matrix(ltrain, ptrain, labels=list(set_digits), normalize='true')\n", + "test_cm = confusion_matrix(ltest, ptest, labels=list(set_digits), normalize='true')\n", "\n", "df_cm = pd.DataFrame(test_cm, index=set_digits, columns=set_digits)\n", "plt.figure(figsize = (10,7))\n", @@ -1174,23 +1456,98 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "5041115f", + "execution_count": 39, + "id": "645ca873", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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fv345JNPyMrK4vrrr+fDDz+kY8eOjBgxotyYWrVqxXvvvUdKSgrfffcdI0aMIDs7mxkzZvD222/zxRdfkJaWxo4dOwC44ooruOOOOxg2bBiFhYVEo9Ga31DGmFpVZxN6dWvSh9Mll1xCMBgEYPfu3YwcOZLvvvsOESEUCpU7zfnnn09ycjLJycm0atWKzZs3067d/q+J79OnT+mwnj17smbNGjIyMjjuuONK7/MeMWIE48ePP2D+oVCIm2++mYULFxIMBvn2228BmDVrFldffTVpaWkANGvWjLy8PNavX8+wYcMA93CQMcZ/7KJoHNLT00u7//SnPzFgwACWLFnCtGnTKrwnOzk5ubQ7GAwSDocPqkxFHnnkEVq3bs2iRYvIzs6u8qKtMcb/LKFX0+7du2nb1v1/j+eff77G59+lSxdWr17NmjVrAJg8eXKFcbRp04ZAIMBLL71EJBIB4JxzzmHChAnk57t/ILVjxw4yMzNp164dU6ZMAaCoqKh0vDHGPyyhV9Ptt9/OnXfeSa9evapVo45XamoqTzzxBIMGDaJ3795kZmbSuHHjA8rdeOONvPDCC/To0YPly5eXnkUMGjSIIUOGkJWVRc+ePRk3bhwAL730Eo899hgnn3wyffv2ZdOmTTUeuzGmdomq1sqCs7KyNDs7e79hy5Yto1u3brUST12yZ88eMjIyUFVuuukmOnXqxK233lrbYZWy78mY2iMi81W13HukrYZeBz399NP07NmTE088kd27d3P99dfXdkjGmHqgzt7l0pDdeuutdapGboypH6yGbowxPmEJ3RhjfMISujHG+IQldGOM8QlL6DEGDBjAzJkz9xv26KOPMnr06Aqn6d+/PyW3Xw4ePJhdu3YdUGbMmDGl94NXZMqUKSxdurS0/89//jOzZs2qRvTGmIbOEnqMESNGMGnSpP2GTZo0qcIXZJU1ffp0mjRpclDLLpvQx44dy8CBAw9qXsaYhqnu3rY44w7YtLhm53nUj+C8ByscffHFF3P33XdTXFxMUlISa9asYcOGDfzkJz9h9OjRzJs3j4KCAi6++GLuvffeA6bv0KED2dnZtGjRggceeIAXXniBVq1a0b59e3r37g24e8zHjx9PcXExJ5xwAi+99BILFy5k6tSpzJ07l/vvv58333yT++67jwsuuICLL76Y999/n9tuu41wOMypp57K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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "print(f'cenario: {cenario}')\n", - "print(f'win_sz: {win_sz}')\n", - "print(f'stride_sz: {stride_sz}')\n", - "print(f'dense_steps: {dense_steps}')\n", - "print(f'layer_count: {layer_count}')\n", - "print(f'drop_count: {drop_count}')" + "def plot_keras_history(history, name='', acc='acc'):\n", + " \"\"\"Plots keras history.\"\"\"\n", + " import matplotlib.pyplot as plt\n", + "\n", + " training_acc = history.history[acc]\n", + " validation_acc = history.history['val_' + acc]\n", + " loss = history.history['loss']\n", + " val_loss = history.history['val_loss']\n", + "\n", + " epochs = range(len(training_acc))\n", + "\n", + " plt.ylim(0, 1)\n", + " plt.plot(epochs, training_acc, 'tab:blue', label='Training acc')\n", + " plt.plot(epochs, validation_acc, 'tab:orange', label='Validation acc')\n", + " plt.title('Training and validation accuracy ' + name)\n", + " plt.legend()\n", + "\n", + " plt.figure()\n", + "\n", + " plt.plot(epochs, loss, 'tab:green', label='Training loss')\n", + " plt.plot(epochs, val_loss, 'tab:red', label='Validation loss')\n", + " plt.title('Training and validation loss ' + name)\n", + " plt.legend()\n", + " plt.show()\n", + " plt.close()\n", + "plot_keras_history(history)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "39e60eaa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scenario: SYN\n", + "Window Size: 5\n", + "Strides: 1\n", + "Epochs: 50\n", + "HiddenL Count: 3\n", + "Neuron Factor: 3\n", + "Drop Factor: 0.1\n" + ] + } + ], + "source": [ + "print(f'Scenario: {cenario}')\n", + "print(f'Window Size: {win_sz}')\n", + "print(f'Strides: {stride_sz}')\n", + "print(f'Epochs: {epoch}')\n", + "print(f'HiddenL Count: {layer_count}')\n", + "print(f'Neuron Factor: {dense_steps}')\n", + "print(f'Drop Factor: {drop_count}')" ] }, { "cell_type": "code", "execution_count": null, - "id": "d25d662c", + "id": "7676ea0c", "metadata": {}, "outputs": [], "source": [] @@ -1213,7 +1570,8 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" - } + }, + "toc-showtags": false }, "nbformat": 4, "nbformat_minor": 5 diff --git a/2-second-project/tdt/training_1/cp.ckpt/keras_metadata.pb b/2-second-project/tdt/training_1/cp.ckpt/keras_metadata.pb index bb5271e..3099b13 100644 --- a/2-second-project/tdt/training_1/cp.ckpt/keras_metadata.pb +++ b/2-second-project/tdt/training_1/cp.ckpt/keras_metadata.pb @@ -1,17 +1,12 @@ -Oroot"_tf_keras_sequential*O{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 30, 338]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "flatten_input"}}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 30, 338]}, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization", "trainable": true, "dtype": "float32", "axis": [1], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}}, {"class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 3380, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dropout", "config": {"name": "dropout_2", "trainable": true, "dtype": "float32", "rate": 0.4, "noise_shape": null, "seed": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1126, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dropout", "config": {"name": "dropout_3", "trainable": true, "dtype": "float32", "rate": 0.6000000000000001, "noise_shape": null, "seed": null}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 375, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dropout", "config": {"name": "dropout_4", "trainable": true, "dtype": "float32", "rate": 0.8, "noise_shape": null, "seed": null}}, {"class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 125, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_4", "trainable": true, "dtype": "float32", "units": 16, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 31, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 32}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 30, 338]}, "is_graph_network": true, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 30, 338]}, "float32", "flatten_input"]}, "keras_version": "2.5.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 30, 338]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "flatten_input"}, "shared_object_id": 0}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 30, 338]}, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 1}, {"class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 2}, {"class_name": "BatchNormalization", "config": {"name": "batch_normalization", "trainable": true, "dtype": "float32", "axis": [1], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 3}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 4}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 6}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 7}, {"class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 8}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 3380, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 9}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 10}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 11}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 12}, {"class_name": "Dropout", "config": {"name": "dropout_2", "trainable": true, "dtype": "float32", "rate": 0.4, "noise_shape": null, "seed": null}, "shared_object_id": 13}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1126, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 14}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 15}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 16}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 17}, {"class_name": "Dropout", "config": {"name": "dropout_3", "trainable": true, "dtype": "float32", "rate": 0.6000000000000001, "noise_shape": null, "seed": null}, "shared_object_id": 18}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 375, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 19}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 20}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 21}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 22}, {"class_name": "Dropout", "config": {"name": "dropout_4", "trainable": true, "dtype": "float32", "rate": 0.8, "noise_shape": null, "seed": null}, "shared_object_id": 23}, {"class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 125, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 24}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 25}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 26}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 27}, {"class_name": "Dense", "config": {"name": "dense_4", "trainable": true, "dtype": "float32", "units": 16, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 28}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 29}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 30}]}}, "training_config": {"loss": "categorical_crossentropy", "metrics": [[{"class_name": "MeanMetricWrapper", "config": {"name": "acc", "dtype": "float32", "fn": "categorical_accuracy"}, "shared_object_id": 33}]], "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adam", "config": {"name": "Adam", "learning_rate": 0.0010000000474974513, "decay": 0.0, "beta_1": 0.8999999761581421, "beta_2": 0.9990000128746033, "epsilon": 1e-07, "amsgrad": false}}}}2 - root.layer-0"_tf_keras_layer*{"name": "flatten", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 30, 338]}, "stateful": false, "must_restore_from_config": false, "class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 30, 338]}, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 1, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 32}}2 - root.layer-1"_tf_keras_layer*{"name": "dropout", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 2}2 - root.layer_with_weights-0"_tf_keras_layer*{"name": "batch_normalization", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "BatchNormalization", "config": {"name": "batch_normalization", "trainable": true, "dtype": "float32", "axis": [1], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 3}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 4}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 6}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 7, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 2, "max_ndim": null, "min_ndim": null, "axes": {"1": 10140}}, "shared_object_id": 34}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 10140]}}2 - root.layer-3"_tf_keras_layer*{"name": "dropout_1", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 8}2 -root.layer_with_weights-1"_tf_keras_layer*{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 3380, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 9}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 10}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 11}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 12, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 10140}}, "shared_object_id": 35}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 10140]}}2 - root.layer-5"_tf_keras_layer*{"name": "dropout_2", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "dropout_2", "trainable": true, "dtype": "float32", "rate": 0.4, "noise_shape": null, "seed": null}, "shared_object_id": 13}2 -root.layer_with_weights-2"_tf_keras_layer*{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 1126, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 14}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 15}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 16}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 17, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 3380}}, "shared_object_id": 36}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 3380]}}2 - root.layer-7"_tf_keras_layer*{"name": "dropout_3", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "dropout_3", "trainable": true, "dtype": "float32", "rate": 0.6000000000000001, "noise_shape": null, "seed": null}, "shared_object_id": 18}2 - root.layer_with_weights-3"_tf_keras_layer*{"name": "dense_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 375, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 19}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 20}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 21}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 22, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 1126}}, "shared_object_id": 37}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1126]}}2 - - root.layer-9"_tf_keras_layer*{"name": "dropout_4", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "dropout_4", "trainable": true, "dtype": "float32", "rate": 0.8, "noise_shape": null, "seed": null}, "shared_object_id": 23}2 - root.layer_with_weights-4"_tf_keras_layer*{"name": "dense_3", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 125, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 24}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 25}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 26}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 27, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 375}}, "shared_object_id": 38}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 375]}}2 - root.layer_with_weights-5"_tf_keras_layer*{"name": "dense_4", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_4", "trainable": true, "dtype": "float32", "units": 16, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 28}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 29}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 30, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 125}}, "shared_object_id": 39}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 125]}}2 -root.keras_api.metrics.0"_tf_keras_metric*{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 40}2 -root.keras_api.metrics.1"_tf_keras_metric*{"class_name": "MeanMetricWrapper", "name": "acc", "dtype": "float32", "config": {"name": "acc", "dtype": "float32", "fn": "categorical_accuracy"}, "shared_object_id": 33}2 \ No newline at end of file +:root"_tf_keras_sequential*:{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 5, 336]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "flatten_input"}}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 5, 336]}, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dropout", "config": {"name": "dropout_10.0", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}}, {"class_name": "BatchNormalization", "config": {"name": "batchNorm", "trainable": true, "dtype": "float32", "axis": [1], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}}, "gamma_initializer": {"class_name": "Ones", "config": {}}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}}, "moving_variance_initializer": {"class_name": "Ones", "config": {}}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}}, {"class_name": "Dropout", "config": {"name": "HiddenDropout_20", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}}, {"class_name": "Dense", "config": {"name": "Hidden_2", "trainable": true, "dtype": "float32", "units": 186, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dropout", "config": {"name": "HiddenDropout_30", "trainable": true, "dtype": "float32", "rate": 0.30000000000000004, "noise_shape": null, "seed": null}}, {"class_name": "Dense", "config": {"name": "Hidden_3", "trainable": true, "dtype": "float32", "units": 62, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "Output", "trainable": true, "dtype": "float32", "units": 16, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 21, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 22}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 5, 336]}, "is_graph_network": true, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 5, 336]}, "float32", "flatten_input"]}, "keras_version": "2.5.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 5, 336]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "flatten_input"}, "shared_object_id": 0}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 5, 336]}, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 1}, {"class_name": "Dropout", "config": {"name": "dropout_10.0", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}, "shared_object_id": 2}, {"class_name": "BatchNormalization", "config": {"name": "batchNorm", "trainable": true, "dtype": "float32", "axis": [1], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 3}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 4}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 6}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 7}, {"class_name": "Dropout", "config": {"name": "HiddenDropout_20", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 8}, {"class_name": "Dense", "config": {"name": "Hidden_2", "trainable": true, "dtype": "float32", "units": 186, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 9}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 10}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 11}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 12}, {"class_name": "Dropout", "config": {"name": "HiddenDropout_30", "trainable": true, "dtype": "float32", "rate": 0.30000000000000004, "noise_shape": null, "seed": null}, "shared_object_id": 13}, {"class_name": "Dense", "config": {"name": "Hidden_3", "trainable": true, "dtype": "float32", "units": 62, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 14}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 15}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 16}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 17}, {"class_name": "Dense", "config": {"name": "Output", "trainable": true, "dtype": "float32", "units": 16, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 18}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 19}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 20}]}}, "training_config": {"loss": "categorical_crossentropy", "metrics": [[{"class_name": "MeanMetricWrapper", "config": {"name": "acc", "dtype": "float32", "fn": "categorical_accuracy"}, "shared_object_id": 23}]], "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adam", "config": {"name": "Adam", "learning_rate": 0.0010000000474974513, "decay": 0.0, "beta_1": 0.8999999761581421, "beta_2": 0.9990000128746033, "epsilon": 1e-07, "amsgrad": false}}}}2 + root.layer-0"_tf_keras_layer*{"name": "flatten", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 5, 336]}, "stateful": false, "must_restore_from_config": false, "class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 5, 336]}, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 1, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 22}}2 + root.layer-1"_tf_keras_layer*{"name": "dropout_10.0", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "dropout_10.0", "trainable": true, "dtype": "float32", "rate": 0.1, "noise_shape": null, "seed": null}, "shared_object_id": 2}2 +root.layer_with_weights-0"_tf_keras_layer*{"name": "batchNorm", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "BatchNormalization", "config": {"name": "batchNorm", "trainable": true, "dtype": "float32", "axis": [1], "momentum": 0.99, "epsilon": 0.001, "center": true, "scale": true, "beta_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 3}, "gamma_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 4}, "moving_mean_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 5}, "moving_variance_initializer": {"class_name": "Ones", "config": {}, "shared_object_id": 6}, "beta_regularizer": null, "gamma_regularizer": null, "beta_constraint": null, "gamma_constraint": null}, "shared_object_id": 7, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 2, "max_ndim": null, "min_ndim": null, "axes": {"1": 1680}}, "shared_object_id": 24}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1680]}}2 + root.layer-3"_tf_keras_layer*{"name": "HiddenDropout_20", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "HiddenDropout_20", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 8}2 +root.layer_with_weights-1"_tf_keras_layer*{"name": "Hidden_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "Hidden_2", "trainable": true, "dtype": "float32", "units": 186, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 9}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 10}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 11}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 12, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 1680}}, "shared_object_id": 25}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 1680]}}2 + root.layer-5"_tf_keras_layer*{"name": "HiddenDropout_30", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dropout", "config": {"name": "HiddenDropout_30", "trainable": true, "dtype": "float32", "rate": 0.30000000000000004, "noise_shape": null, "seed": null}, "shared_object_id": 13}2 +root.layer_with_weights-2"_tf_keras_layer*{"name": "Hidden_3", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "Hidden_3", "trainable": true, "dtype": "float32", "units": 62, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 14}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 15}, "kernel_regularizer": {"class_name": "L2", "config": {"l2": 0.0010000000474974513}, "shared_object_id": 16}, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 17, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 186}}, "shared_object_id": 26}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 186]}}2 +root.layer_with_weights-3"_tf_keras_layer*{"name": "Output", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "Output", "trainable": true, "dtype": "float32", "units": 16, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 18}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 19}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 20, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 62}}, "shared_object_id": 27}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 62]}}2 +lroot.keras_api.metrics.0"_tf_keras_metric*{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 28}2 +mroot.keras_api.metrics.1"_tf_keras_metric*{"class_name": "MeanMetricWrapper", "name": "acc", "dtype": "float32", "config": {"name": "acc", "dtype": "float32", "fn": "categorical_accuracy"}, "shared_object_id": 23}2 \ No newline at end of file diff --git a/2-second-project/tdt/training_1/cp.ckpt/saved_model.pb b/2-second-project/tdt/training_1/cp.ckpt/saved_model.pb index 5f17e5c..ef1712e 100644 Binary files a/2-second-project/tdt/training_1/cp.ckpt/saved_model.pb and b/2-second-project/tdt/training_1/cp.ckpt/saved_model.pb differ diff --git a/2-second-project/tdt/training_1/cp.ckpt/variables/variables.data-00000-of-00001 b/2-second-project/tdt/training_1/cp.ckpt/variables/variables.data-00000-of-00001 index 2a9e64d..fbbffd8 100644 Binary files a/2-second-project/tdt/training_1/cp.ckpt/variables/variables.data-00000-of-00001 and b/2-second-project/tdt/training_1/cp.ckpt/variables/variables.data-00000-of-00001 differ diff --git a/2-second-project/tdt/training_1/cp.ckpt/variables/variables.index b/2-second-project/tdt/training_1/cp.ckpt/variables/variables.index index c4acc8c..4765b61 100644 Binary files a/2-second-project/tdt/training_1/cp.ckpt/variables/variables.index and b/2-second-project/tdt/training_1/cp.ckpt/variables/variables.index differ diff --git a/README.md b/README.md index 53a7174..fa6d9e3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ # group-l-name-zensiert Group L -Name zensiert \ No newline at end of file +Name zensiert + +## Projekt 1 +Dateipfad: + +## Projekt 2 +Dateipfad: