1579 lines
199 KiB
Plaintext
1579 lines
199 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b91d212e",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Constants"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "1bf63c18",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"\n",
|
|
"os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true' # this is required\n",
|
|
"os.environ['CUDA_VISIBLE_DEVICES'] = '0' # set to '0' for GPU0, '1' for GPU1 or '2' for GPU2. Check \"gpustat\" in a terminal."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"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)\n",
|
|
"\n",
|
|
"pd.set_option('display.float_format', lambda x: '%.2f' % x)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "85e6ab7c",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Config"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "3f97f28e",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Possibilities: 'SYY', 'SYN', 'SNY', 'SNN', \n",
|
|
"# 'JYY', 'JYN', 'JNY', 'JNN'\n",
|
|
"cenario = 'SYN'\n",
|
|
"\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 = 3\n",
|
|
"# how much to drop\n",
|
|
"drop_count = 0.1"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "fddb1e58",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Helper Functions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "8d1865b9",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from matplotlib import pyplot as plt\n",
|
|
"\n",
|
|
"def pplot(dd):\n",
|
|
" x = dd.shape[0]\n",
|
|
" fix = int(x/3)+1\n",
|
|
" fiy = 3\n",
|
|
" fig, axs = plt.subplots(fix, fiy, figsize=(3*fiy, 9*fix))\n",
|
|
" \n",
|
|
" for i in range(x):\n",
|
|
" axs[int(i/3)][i%3].plot(dd[i])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "09693b32",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Loading Data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "ccbd870e",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"from glob import glob\n",
|
|
"from tqdm import tqdm\n",
|
|
"\n",
|
|
"def dl_from_blob(filename, user_filter=None):\n",
|
|
" \n",
|
|
" dic_data = []\n",
|
|
" \n",
|
|
" for p in tqdm(glob(glob_path)):\n",
|
|
" path = p\n",
|
|
" filename = path.split('/')[-1].split('.')[0]\n",
|
|
" splitname = filename.split('_')\n",
|
|
" user = int(splitname[0][1:])\n",
|
|
" if (user_filter):\n",
|
|
" if (user != user_filter):\n",
|
|
" continue\n",
|
|
" scenario = splitname[1][len('Scenario'):]\n",
|
|
" heightnorm = splitname[2][len('HeightNormalization'):] == 'True'\n",
|
|
" armnorm = splitname[3][len('ArmNormalization'):] == 'True'\n",
|
|
" rep = int(splitname[4][len('Repetition'):])\n",
|
|
" session = int(splitname[5][len('Session'):])\n",
|
|
" data = pd.read_csv(path)\n",
|
|
" dic_data.append(\n",
|
|
" {\n",
|
|
" 'filename': path,\n",
|
|
" 'user': user,\n",
|
|
" 'scenario': scenario,\n",
|
|
" 'heightnorm': heightnorm,\n",
|
|
" 'armnorm': armnorm,\n",
|
|
" 'rep': rep,\n",
|
|
" 'session': session,\n",
|
|
" 'data': data \n",
|
|
" }\n",
|
|
" )\n",
|
|
" return dic_data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "f0f4201c",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import pickle\n",
|
|
"\n",
|
|
"def save_pickle(f, structure):\n",
|
|
" _p = open(f, 'wb')\n",
|
|
" pickle.dump(structure, _p)\n",
|
|
" _p.close()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "83695ce1",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def load_pickles(f) -> list:\n",
|
|
" _p = open(pickle_file, 'rb')\n",
|
|
" _d = pickle.load(_p)\n",
|
|
" _p.close()\n",
|
|
" \n",
|
|
" return _d"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "92216c47",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Loading data...\n",
|
|
"../data.pickle found...\n",
|
|
"768\n",
|
|
"CPU times: user 614 ms, sys: 2.53 s, total: 3.14 s\n",
|
|
"Wall time: 3.14 s\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%time\n",
|
|
"\n",
|
|
"def load_data() -> list:\n",
|
|
" if os.path.isfile(pickle_file):\n",
|
|
" print(f'{pickle_file} found...')\n",
|
|
" return load_pickles(pickle_file)\n",
|
|
" print(f'Didn\\'t find {pickle_file}...')\n",
|
|
" all_data = dl_from_blob(glob_path)\n",
|
|
" print(f'Creating {pickle_file}...')\n",
|
|
" save_pickle(pickle_file, all_data)\n",
|
|
" return all_data\n",
|
|
"\n",
|
|
"print(\"Loading data...\")\n",
|
|
"dic_data = load_data()\n",
|
|
"print(len(dic_data))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "6f337a51",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"CPU times: user 97 µs, sys: 302 µs, total: 399 µs\n",
|
|
"Wall time: 402 µs\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%time\n",
|
|
"\n",
|
|
"# Categorized Data\n",
|
|
"cdata = dict() \n",
|
|
"# Sorting, HeightNorm, ArmNorm\n",
|
|
"cdata['SYY'] = list() \n",
|
|
"cdata['SYN'] = list() \n",
|
|
"cdata['SNY'] = list() \n",
|
|
"cdata['SNN'] = list() \n",
|
|
"\n",
|
|
"# Jenga, HeightNorm, ArmNorm\n",
|
|
"cdata['JYY'] = list() \n",
|
|
"cdata['JYN'] = list() \n",
|
|
"cdata['JNY'] = list() \n",
|
|
"cdata['JNN'] = list() \n",
|
|
"\n",
|
|
"for d in dic_data:\n",
|
|
" if d['scenario'] == 'Sorting':\n",
|
|
" if d['heightnorm']:\n",
|
|
" if d['armnorm']:\n",
|
|
" cdata['SYY'].append(d)\n",
|
|
" else:\n",
|
|
" cdata['SYN'].append(d)\n",
|
|
" else:\n",
|
|
" if d['armnorm']:\n",
|
|
" cdata['SNY'].append(d)\n",
|
|
" else:\n",
|
|
" cdata['SNN'].append(d)\n",
|
|
" elif d['scenario'] == 'Jenga':\n",
|
|
" if d['heightnorm']:\n",
|
|
" if d['armnorm']:\n",
|
|
" cdata['JYY'].append(d)\n",
|
|
" else:\n",
|
|
" cdata['JYN'].append(d)\n",
|
|
" else:\n",
|
|
" if d['armnorm']:\n",
|
|
" cdata['JNY'].append(d)\n",
|
|
" else:\n",
|
|
" cdata['JNN'].append(d)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b9500a64",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Preprocessing"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"id": "c7c9d655",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def drop(entry, data=True) -> pd.DataFrame:\n",
|
|
" droptable = ['participantID', 'FrameID', 'Scenario', 'HeightNormalization', 'ArmNormalization', 'Repetition', 'Session', 'Unnamed: 0']\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": 11,
|
|
"id": "f5b437a2",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\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",
|
|
" centry = pickle.loads(pickle.dumps(entry['data']))\n",
|
|
" else:\n",
|
|
" centry = pickle.loads(pickle.dumps(entry))\n",
|
|
" \n",
|
|
" centry['LeftHandTrackingAccuracy'] = (centry['LeftHandTrackingAccuracy'] == 'High') * 1.0\n",
|
|
" centry['RightHandTrackingAccuracy'] = (centry['RightHandTrackingAccuracy'] == 'High') * 1.0\n",
|
|
" \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['LeftHandTrackingAccuracy'] == 0.0, left_Hand_cols] = np.nan\n",
|
|
" centry.loc[centry['RightHandTrackingAccuracy'] == 0.0, right_Hand_cols] = np.nan\n",
|
|
"\n",
|
|
" return centry"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"id": "f126154b",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from tensorflow.keras.preprocessing.sequence import pad_sequences\n",
|
|
"\n",
|
|
"def pad(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",
|
|
" cols = centry.columns\n",
|
|
" pentry = pad_sequences(centry.T.to_numpy(),\n",
|
|
" maxlen=(int(centry.shape[0]/stride_sz)+1)*stride_sz,\n",
|
|
" dtype='float64',\n",
|
|
" padding='pre', \n",
|
|
" truncating='post',\n",
|
|
" value=np.nan\n",
|
|
" ) \n",
|
|
" pdentry = pd.DataFrame(pentry.T, columns=cols)\n",
|
|
" pdentry.loc[0] = [0 for _ in cols]\n",
|
|
" return pdentry"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"id": "d50c3391",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def interpol(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",
|
|
" return centry.interpolate(limit_direction='both')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"id": "60629469",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from tensorflow.keras.preprocessing import timeseries_dataset_from_array\n",
|
|
"\n",
|
|
"def slicing(entry, label, data=True):\n",
|
|
" if data:\n",
|
|
" centry = pickle.loads(pickle.dumps(entry['data']))\n",
|
|
" else:\n",
|
|
" centry = pickle.loads(pickle.dumps(entry))\n",
|
|
" \n",
|
|
" return timeseries_dataset_from_array(\n",
|
|
" data=centry, \n",
|
|
" targets=[label for _ in range(centry.shape[0])], \n",
|
|
" sequence_length=win_sz,\n",
|
|
" sequence_stride=stride_sz, \n",
|
|
" batch_size=8, \n",
|
|
" seed=177013\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"id": "4de2497d",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"100%|██████████| 96/96 [00:05<00:00, 16.44it/s] \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"acc_data = pd.DataFrame()\n",
|
|
"\n",
|
|
"for e in tqdm(cdata[cenario]):\n",
|
|
" acc_data = acc_data.append(e['data'], ignore_index=True)\n",
|
|
"\n",
|
|
"ddacc_data = rem_low_acc(drop(acc_data, False),False)\n",
|
|
"\n",
|
|
"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": "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:14<00:00, 6.79it/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"CPU times: user 12.8 s, sys: 1.54 s, total: 14.3 s\n",
|
|
"Wall time: 14.1 s\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%time\n",
|
|
"\n",
|
|
"classes = 16 # dynamic\n",
|
|
"\n",
|
|
"def preproc(data):\n",
|
|
" res_list = list()\n",
|
|
" \n",
|
|
" for e in tqdm(data):\n",
|
|
" res_list.append(preproc_entry(e))\n",
|
|
" \n",
|
|
" return res_list\n",
|
|
" \n",
|
|
"def preproc_entry(entry, data = True):\n",
|
|
" entry2 = pickle.loads(pickle.dumps(entry))\n",
|
|
" entry2['data'] = drop(entry2, data)\n",
|
|
" \n",
|
|
" entry3 = pickle.loads(pickle.dumps(entry2))\n",
|
|
" entry3['data'] = rem_low_acc(entry3, data)\n",
|
|
" \n",
|
|
" entry1 = pickle.loads(pickle.dumps(entry3))\n",
|
|
" entry1['data'] = norm(entry1, data)\n",
|
|
" \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(entry8))\n",
|
|
" entry7['data'] = slicing(entry7, entry7['user'], data)\n",
|
|
" \n",
|
|
" return entry7\n",
|
|
"\n",
|
|
"pdata = preproc(cdata[cenario])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"id": "a067392e",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[<matplotlib.lines.Line2D at 0x7f37f07b3fa0>]"
|
|
]
|
|
},
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"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": [
|
|
"[<matplotlib.lines.Line2D at 0x7f37f0654970>]"
|
|
]
|
|
},
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"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": [
|
|
"[<matplotlib.lines.Line2D at 0x7f37f05d9310>]"
|
|
]
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"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": [
|
|
"[<matplotlib.lines.Line2D at 0x7f37f05524c0>]"
|
|
]
|
|
},
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"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 123 µs, sys: 105 µs, total: 228 µs\n",
|
|
"Wall time: 238 µs\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(48, 48)"
|
|
]
|
|
},
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"%%time\n",
|
|
"train = np.array([x['data'] for x in pdata if x['session'] == 1])\n",
|
|
"test = np.array([x['data'] for x in pdata if x['session'] == 2])\n",
|
|
"\n",
|
|
"len(train), len(test)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"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": [
|
|
"(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"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%%time\n",
|
|
"\n",
|
|
"X_train = list()\n",
|
|
"y_train = list()\n",
|
|
"\n",
|
|
"X_test = list()\n",
|
|
"y_test = list()\n",
|
|
"\n",
|
|
"train = list()\n",
|
|
"test = list()\n",
|
|
"\n",
|
|
"for x in tqdm(pdata):\n",
|
|
" if x['session'] == 1:\n",
|
|
" train.append(\n",
|
|
" {\n",
|
|
" 'label': x['user'],\n",
|
|
" 'data': list()\n",
|
|
" })\n",
|
|
" for y in x['data'].unbatch().as_numpy_iterator():\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",
|
|
" 'label': x['user'],\n",
|
|
" 'data': list()\n",
|
|
" })\n",
|
|
" for y in x['data'].unbatch().as_numpy_iterator():\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",
|
|
"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)\n",
|
|
"\n",
|
|
"print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"id": "27f1c824",
|
|
"metadata": {
|
|
"jupyter": {
|
|
"source_hidden": true
|
|
},
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"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"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array([<AxesSubplot:ylabel='0'>], dtype=object)"
|
|
]
|
|
},
|
|
"execution_count": 26,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"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": 27,
|
|
"id": "34e0af8d",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"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([<AxesSubplot:ylabel='0'>], dtype=object)"
|
|
]
|
|
},
|
|
"execution_count": 27,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"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": 28,
|
|
"id": "4b6d7b97",
|
|
"metadata": {},
|
|
"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",
|
|
"from sklearn.preprocessing import LabelBinarizer\n",
|
|
"\n",
|
|
"\n",
|
|
"lb = LabelBinarizer()\n",
|
|
"yy_train = lb.fit_transform(y_train)\n",
|
|
"yy_test = lb.transform(y_test)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"id": "90634662",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"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": "ff2da104",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Building Model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 31,
|
|
"id": "a5ef1b0f",
|
|
"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\n",
|
|
"from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau\n",
|
|
"from tensorflow.keras.optimizers import Adam\n",
|
|
"\n",
|
|
"def build_model(shape, classes):\n",
|
|
" model = Sequential()\n",
|
|
" \n",
|
|
" ncount = shape[0]*shape[1]\n",
|
|
" \n",
|
|
" model.add(Flatten(input_shape=shape, name='flatten'))\n",
|
|
" \n",
|
|
" model.add(Dropout(drop_count, name=f'dropout_{drop_count*100}'))\n",
|
|
" model.add(BatchNormalization(name='batchNorm'))\n",
|
|
" \n",
|
|
" for i in range(2,layer_count+2):\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.compile(\n",
|
|
" optimizer=Adam(),\n",
|
|
" loss=\"categorical_crossentropy\", \n",
|
|
" metrics=[\"acc\"],\n",
|
|
" )\n",
|
|
" \n",
|
|
" return model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 32,
|
|
"id": "ccbb5d69",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"checkpoint_file = './goat.weights'\n",
|
|
"\n",
|
|
"def train_model(X_train, y_train, X_test, y_test):\n",
|
|
" model = build_model(X_train[0].shape, 16)\n",
|
|
" \n",
|
|
" model.summary()\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",
|
|
" reduce_lr = ReduceLROnPlateau(monitor='loss', factor=0.5, patience=5, min_lr=0.0001)\n",
|
|
"\n",
|
|
" callbacks = [model_checkpoint, reduce_lr]\n",
|
|
" \n",
|
|
" history = model.fit(X_train, \n",
|
|
" y_train,\n",
|
|
" epochs=epoch,\n",
|
|
" batch_size=32,\n",
|
|
" verbose=2,\n",
|
|
" validation_data=(X_test, y_test),\n",
|
|
" callbacks=callbacks\n",
|
|
" )\n",
|
|
" \n",
|
|
" model.load_weights(checkpoint_path)\n",
|
|
" return model, history\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 33,
|
|
"id": "2032334e",
|
|
"metadata": {},
|
|
"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",
|
|
"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": "3125ff7f",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Eval"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 34,
|
|
"id": "03c2ed28",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def predict(model, entry):\n",
|
|
" p_dict = dict()\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",
|
|
" else:\n",
|
|
" p_dict[p] = 1\n",
|
|
" prediction = max(p_dict, key=p_dict.get)\n",
|
|
" return prediction+1"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 35,
|
|
"id": "3a3df1c6",
|
|
"metadata": {},
|
|
"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['data']) for e in test]\n",
|
|
"\n",
|
|
"len(ltest), len(ptest)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 36,
|
|
"id": "ac38f7f4",
|
|
"metadata": {},
|
|
"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['data']) for e in train]\n",
|
|
"\n",
|
|
"\n",
|
|
"len(ltrain), len(ptrain)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 37,
|
|
"id": "626fa67e",
|
|
"metadata": {},
|
|
"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": [
|
|
"<Figure size 720x504 with 2 Axes>"
|
|
]
|
|
},
|
|
"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",
|
|
"from sklearn.metrics import confusion_matrix\n",
|
|
"import seaborn as sn\n",
|
|
"\n",
|
|
"from sklearn.metrics import classification_report\n",
|
|
"\n",
|
|
"set_digits = set(ltrain)\n",
|
|
"\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",
|
|
"sn_plot = sn.heatmap(df_cm, annot=True, cmap=\"Greys\")\n",
|
|
"plt.ylabel(\"True Label\")\n",
|
|
"plt.xlabel(\"Predicted Label\")\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"print(classification_report(ltest, ptest, zero_division=0))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 39,
|
|
"id": "645ca873",
|
|
"metadata": {},
|
|
"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": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"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": "7676ea0c",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.8.10"
|
|
},
|
|
"toc-showtags": false
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|