{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":46105,"databundleVersionId":5087314,"sourceType":"competition"},{"sourceId":5315518,"sourceType":"datasetVersion","datasetId":3036481}],"dockerImageVersionId":30627,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tqdm import tqdm","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-01-06T11:49:51.275514Z","iopub.execute_input":"2024-01-06T11:49:51.276202Z","iopub.status.idle":"2024-01-06T11:49:51.280929Z","shell.execute_reply.started":"2024-01-06T11:49:51.276171Z","shell.execute_reply":"2024-01-06T11:49:51.279902Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset = pd.read_csv(\"/kaggle/input/asl-signs/train.csv\")\ndataset['path'] = \"/kaggle/input/asl-signs/\" + dataset['path']\ndataset.iloc[0][\"path\"]","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:49:51.286495Z","iopub.execute_input":"2024-01-06T11:49:51.287259Z","iopub.status.idle":"2024-01-06T11:49:51.443720Z","shell.execute_reply.started":"2024-01-06T11:49:51.287224Z","shell.execute_reply":"2024-01-06T11:49:51.442585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ROWS_PER_FRAME = 543\ndef load_relevant_data_subset(pq_path):\n    data_columns = ['x', 'y', 'z']\n    data = pd.read_parquet(pq_path, columns=data_columns)\n    n_frames = int(len(data) / ROWS_PER_FRAME)\n    data = data.values.reshape(n_frames, ROWS_PER_FRAME, len(data_columns))\n    return data.astype(np.float32)","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:49:51.445232Z","iopub.execute_input":"2024-01-06T11:49:51.445544Z","iopub.status.idle":"2024-01-06T11:49:51.451210Z","shell.execute_reply.started":"2024-01-06T11:49:51.445519Z","shell.execute_reply":"2024-01-06T11:49:51.450272Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_data(file_path):\n    # Load Raw Data\n    data = load_relevant_data_subset(file_path)\n    # Process Data Using Tensorflow\n    data = preprocess_layer(data)\n    \n    return data","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:49:51.452658Z","iopub.execute_input":"2024-01-06T11:49:51.453505Z","iopub.status.idle":"2024-01-06T11:49:51.465992Z","shell.execute_reply.started":"2024-01-06T11:49:51.453469Z","shell.execute_reply":"2024-01-06T11:49:51.464635Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ROOT_DIR = \"/kaggle/input/gislr-dataset-public\"\nX_train = np.load(f\"{ROOT_DIR}/X_train.npy\")\nY_train = np.load(f\"{ROOT_DIR}/y_train.npy\")\nX_val = np.load(f\"{ROOT_DIR}/X_val.npy\")\nY_val = np.load(f\"{ROOT_DIR}/y_val.npy\")\nNON_EMPTY_FRAME_IDXS = np.load(f\"{ROOT_DIR}/NON_EMPTY_FRAME_IDXS.npy\")","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:49:51.468929Z","iopub.execute_input":"2024-01-06T11:49:51.469268Z","iopub.status.idle":"2024-01-06T11:50:44.111951Z","shell.execute_reply.started":"2024-01-06T11:49:51.469240Z","shell.execute_reply":"2024-01-06T11:50:44.111079Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train=tf.convert_to_tensor(X_train)\nY_train=tf.convert_to_tensor(Y_train)\nX_val=tf.convert_to_tensor(X_val)\nY_val=tf.convert_to_tensor(Y_val)\nX.shape, Y.shape, NON_EMPTY_FRAME_IDXS.shape","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:50:44.113101Z","iopub.execute_input":"2024-01-06T11:50:44.113412Z","iopub.status.idle":"2024-01-06T11:50:52.002657Z","shell.execute_reply.started":"2024-01-06T11:50:44.113387Z","shell.execute_reply":"2024-01-06T11:50:52.001755Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nX_10 = tf.gather(X, np.argwhere(np.isin(Y,np.arange(10))).squeeze() )\nY_10 = tf.gather(Y, np.argwhere(np.isin(Y,np.arange(10))).squeeze() )\nX_10.shape, Y_10.shape","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:50:52.003719Z","iopub.execute_input":"2024-01-06T11:50:52.003985Z","iopub.status.idle":"2024-01-06T11:50:52.067459Z","shell.execute_reply.started":"2024-01-06T11:50:52.003962Z","shell.execute_reply":"2024-01-06T11:50:52.066472Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"BATCH_ALL_SIGNS_N=4\nNUM_CLASSES=250\nINPUT_SIZE=64\nN_COLS=66\nN_DIMS=3\n# Custom sampler to get a batch containing N times all signs\ndef get_train_batch_all_signs(X, y, n=BATCH_ALL_SIGNS_N):\n    # Dictionary mapping ordinally encoded sign to corresponding sample indices\n    CLASS2IDXS = {}\n    for i in range(NUM_CLASSES):\n        CLASS2IDXS[i] = np.argwhere(y == i).squeeze().astype(np.int32)\n            \n    while True:\n        # Lists to store batch tensors in\n        X_batch = []\n        y_batch = []\n        \n        # Fill batch arrays\n        for i in range(NUM_CLASSES):\n            idxs = np.random.choice(CLASS2IDXS[i], n)\n            X_batch.append(tf.gather(X, idxs))\n            y_batch.append(tf.gather(y, idxs))\n        \n        # Stack lists of tensors into a single tensor\n        X_batch = tf.concat(X_batch, axis=0)\n        y_batch = tf.concat(y_batch, axis=0)\n        \n        yield X_batch, y_batch\n        ","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:50:52.068508Z","iopub.execute_input":"2024-01-06T11:50:52.068776Z","iopub.status.idle":"2024-01-06T11:50:52.076672Z","shell.execute_reply.started":"2024-01-06T11:50:52.068752Z","shell.execute_reply":"2024-01-06T11:50:52.075733Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_gen = tf.keras.preprocessing.image.ImageDataGenerator(\n    horizontal_flip=True,\n    featurewise_std_normalization=True,\n    shear_range=0.2,\n    samplewise_std_normalization=True,\n    validation_split=0.2,\n)\nimg_gen.fit(X_train)","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:52:10.977854Z","iopub.execute_input":"2024-01-06T11:52:10.978565Z","iopub.status.idle":"2024-01-06T11:52:45.010175Z","shell.execute_reply.started":"2024-01-06T11:52:10.978530Z","shell.execute_reply":"2024-01-06T11:52:45.009081Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"frames = tf.keras.layers.Input([64, 66, 3], dtype=tf.float32, name='frames')\nmodel1 = tf.keras.models.Sequential()\nmodel2 = tf.keras.models.Sequential()\nresnet = tf.keras.applications.ResNet50(\n    include_top=False,\n    weights=\"imagenet\",\n    input_tensor=frames,\n    pooling='max',\n    classes=250,\n    classifier_activation=\"softmax\",\n)\n\neff_net = tf.keras.applications.EfficientNetB5(\n    include_top=False,\n    weights=\"imagenet\",\n    input_tensor=frames,\n    pooling=None,\n    classes=250,\n    classifier_activation=\"softmax\",\n)\nfor layer in resnet.layers:\n    layer.trainable = True\nfor layer in eff_net.layers:\n    layer.trainable = True\nmodel1.add(resnet)\nmodel1.add(tf.keras.layers.Flatten())\nmodel1.add(tf.keras.layers.BatchNormalization())\nmodel1.add(tf.keras.layers.Dense(1024,activation = 'relu'))\nmodel1.add(tf.keras.layers.Dropout(0.5))\nmodel1.add(tf.keras.layers.BatchNormalization())\nmodel1.add(tf.keras.layers.Dense(512,activation = 'relu'))\nmodel1.add(tf.keras.layers.Dense(250,activation = 'softmax'))\nmodel1.summary()\n\nmodel2.add(eff_net)\nmodel2.add(tf.keras.layers.Flatten())\nmodel2.add(tf.keras.layers.BatchNormalization())\nmodel2.add(tf.keras.layers.Dense(1024,activation = 'relu'))\nmodel2.add(tf.keras.layers.Dropout(0.5))\nmodel2.add(tf.keras.layers.BatchNormalization())\nmodel2.add(tf.keras.layers.Dense(512,activation = 'relu'))\nmodel2.add(tf.keras.layers.Dense(250,activation = 'softmax'))\nmodel2.summary()","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:52:45.012057Z","iopub.execute_input":"2024-01-06T11:52:45.012380Z","iopub.status.idle":"2024-01-06T11:52:54.948599Z","shell.execute_reply.started":"2024-01-06T11:52:45.012351Z","shell.execute_reply":"2024-01-06T11:52:54.947651Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss = tf.keras.losses.SparseCategoricalCrossentropy()\n    \n# Adam Optimizer with weight decay\noptimizer = tf.optimizers.Adam()\n\n# TopK Metrics\nmetrics = [\n    tf.keras.metrics.SparseCategoricalAccuracy(name='acc'),\n    tf.keras.metrics.SparseTopKCategoricalAccuracy(k=5, name='top_5_acc'),\n    tf.keras.metrics.SparseTopKCategoricalAccuracy(k=10, name='top_10_acc'),\n]\nmodel1.compile(loss=loss, optimizer=tf.optimizers.Adam(), metrics=metrics)\nmodel2.compile(loss=loss, optimizer=tf.optimizers.Adam(), metrics=metrics)","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:52:54.949858Z","iopub.execute_input":"2024-01-06T11:52:54.950148Z","iopub.status.idle":"2024-01-06T11:52:54.999534Z","shell.execute_reply.started":"2024-01-06T11:52:54.950123Z","shell.execute_reply":"2024-01-06T11:52:54.998666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tf.keras.backend.clear_session()\nmodel1.fit(img_gen.flow(X_train,Y_train),verbose=1, epochs=15, validation_data=(X_val,Y_val))","metadata":{"execution":{"iopub.status.busy":"2024-01-06T11:52:55.001434Z","iopub.execute_input":"2024-01-06T11:52:55.001761Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model2.fit(img_gen.flow(X,Y),verbose=1, epochs=15)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow_datasets as tfds\nds = tfds.load(\"cifar10\", as_supervised=True)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ds['train']","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}