Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ElisonSherton/cd21b00e19806054485a656549bf9265 to your computer and use it in GitHub Desktop.
Save ElisonSherton/cd21b00e19806054485a656549bf9265 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "20eb6a2a-df6b-496c-b5ca-61922e1b1717",
"metadata": {},
"outputs": [],
"source": [
"from fastai.tabular.all import *\n",
"from sklearn.datasets import make_multilabel_classification"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "6501e60f-db0e-4d61-bc88-7f7b9e03e7ff",
"metadata": {},
"outputs": [],
"source": [
"# Make a 20 input x 5 output sample -> target dataset\n",
"X, y = make_multilabel_classification(n_samples = 100, n_features = 4)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "69f79e1a-e840-4d94-8fa0-5af1ca225710",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>feat_1</th>\n",
" <th>feat_2</th>\n",
" <th>feat_3</th>\n",
" <th>feat_4</th>\n",
" <th>feat_5</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>8.0</td>\n",
" <td>10.0</td>\n",
" <td>9.0</td>\n",
" <td>6.0</td>\n",
" <td>a</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9.0</td>\n",
" <td>15.0</td>\n",
" <td>11.0</td>\n",
" <td>8.0</td>\n",
" <td>b</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" feat_1 feat_2 feat_3 feat_4 feat_5\n",
"0 8.0 10.0 9.0 6.0 a\n",
"1 9.0 15.0 11.0 8.0 b"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train = pd.DataFrame(X, columns = [f\"feat_{idx+1}\" for idx in range(X.shape[1])])\n",
"num_cols = train.columns.tolist()\n",
"categories = [\"a\"] * 50 + [\"b\"] * 25 + [\"c\"] * 25; random.shuffle(categories)\n",
"train[\"feat_5\"] = categories\n",
"cat_cols = [\"feat_5\"]\n",
"train.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "dc9d29c5-15e1-46b1-882a-15e22b563103",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>target_1</th>\n",
" <th>target_2</th>\n",
" <th>target_3</th>\n",
" <th>target_4</th>\n",
" <th>target_5</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" target_1 target_2 target_3 target_4 target_5\n",
"0 0 0 0 0 0\n",
"1 0 1 0 0 0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define the target\n",
"target = pd.DataFrame(y, columns = [f\"target_{idx+1}\" for idx in range(y.shape[1])])\n",
"y_names = target.columns.tolist()\n",
"target.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8eb9e37e-15bb-4052-ac06-846215d5fe9e",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>feat_1</th>\n",
" <th>feat_2</th>\n",
" <th>feat_3</th>\n",
" <th>feat_4</th>\n",
" <th>feat_5</th>\n",
" <th>target_1</th>\n",
" <th>target_2</th>\n",
" <th>target_3</th>\n",
" <th>target_4</th>\n",
" <th>target_5</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>8.0</td>\n",
" <td>10.0</td>\n",
" <td>9.0</td>\n",
" <td>6.0</td>\n",
" <td>a</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9.0</td>\n",
" <td>15.0</td>\n",
" <td>11.0</td>\n",
" <td>8.0</td>\n",
" <td>b</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" feat_1 feat_2 feat_3 feat_4 feat_5 target_1 target_2 target_3 \\\n",
"0 8.0 10.0 9.0 6.0 a 0 0 0 \n",
"1 9.0 15.0 11.0 8.0 b 0 1 0 \n",
"\n",
" target_4 target_5 \n",
"0 0 0 \n",
"1 0 0 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train = pd.concat([train, target], axis = 1)\n",
"train.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "23d06c08-c66f-42f6-acbd-17a466b0d091",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# Define a random splitter\n",
"splits = RandomSplitter(valid_pct=0.2)(range_of(train))\n",
"\n",
"to = TabularPandas(train, procs=[Categorify,Normalize],\n",
" cat_names = cat_cols,\n",
" cont_names = num_cols,\n",
" y_names = y_names,\n",
" splits=splits)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "16ffdc44-9983-4455-9077-6bf429d0e172",
"metadata": {},
"outputs": [],
"source": [
"dls = to.dataloaders(bs=16).to(\"cuda\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c31466d2-ae19-4811-ae99-daf24ae9f73e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([16, 1]), torch.Size([16, 4]), torch.Size([16, 5]))"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"xb_cat, xb_cont, yb = dls.one_batch()\n",
"xb_cat.shape, xb_cont.shape, yb.shape"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "de8521e5-18bd-426b-ad97-a61ea8f0c257",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" /* Turns off some styling */\n",
" progress {\n",
" /* gets rid of default border in Firefox and Opera. */\n",
" border: none;\n",
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
" background-size: auto;\n",
" }\n",
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
" background: #F44336;\n",
" }\n",
"</style>\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"SuggestedLRs(valley=0.0010000000474974513)"
]
},
"execution_count": 9,
"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": [
"# Specify the loss function and appropriate metric\n",
"learn = tabular_learner(dls, metrics=[accuracy_multi], loss_func = BCEWithLogitsLossFlat())\n",
"learn.lr_find()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "8f4db69b-0cb6-4742-989f-33b33c18e940",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" /* Turns off some styling */\n",
" progress {\n",
" /* gets rid of default border in Firefox and Opera. */\n",
" border: none;\n",
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
" background-size: auto;\n",
" }\n",
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
" background: #F44336;\n",
" }\n",
"</style>\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: left;\">\n",
" <th>epoch</th>\n",
" <th>train_loss</th>\n",
" <th>valid_loss</th>\n",
" <th>accuracy_multi</th>\n",
" <th>time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>0.705741</td>\n",
" <td>0.687174</td>\n",
" <td>0.610000</td>\n",
" <td>00:00</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>0.672940</td>\n",
" <td>0.658388</td>\n",
" <td>0.660000</td>\n",
" <td>00:00</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>0.635036</td>\n",
" <td>0.623204</td>\n",
" <td>0.650000</td>\n",
" <td>00:00</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>0.610399</td>\n",
" <td>0.598147</td>\n",
" <td>0.660000</td>\n",
" <td>00:00</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>0.596583</td>\n",
" <td>0.580337</td>\n",
" <td>0.680000</td>\n",
" <td>00:00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Train the model\n",
"learn.fit_one_cycle(5, 1e-3)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment