553 lines
96 KiB
Plaintext
553 lines
96 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ca6b3acc-43af-4928-81c8-5d4e9eae7618",
|
|
"metadata": {},
|
|
"source": [
|
|
"<a href=\"https://www.nvidia.com/dli\"> <img src=\"images/DLI_Header.png\" alt=\"Header\" style=\"width: 400px;\"/> </a>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "661bf3fc-9c36-4746-8de1-adab50f021d7",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Enhancing Data Science Outcomes With Efficient Workflow #"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "19f9e914-8815-4144-9f8b-58c3d9cb0045",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 01 - Machine Learning Classification Task Primer ##\n",
|
|
"This lab covers the machine learning model development step of the data science workflow. Model development involves model building, evaluation, fine-tuning, model selection, and model persistence. \n",
|
|
"\n",
|
|
"<p><img src='images/pipeline_overview_2.png' width=1080></p>\n",
|
|
"\n",
|
|
"**Table of Contents**\n",
|
|
"<br>\n",
|
|
"In this notebook, we will train a classification model and discuss model evaluation. This notebook covers the below sections: \n",
|
|
"1. [Machine Learning Classification Task](#s1-1)\n",
|
|
"2. [Model Development](#s1-2)\n",
|
|
" * [Random Forest](#s1-2.1)\n",
|
|
" * [Exercise #1 - Model Evaluation](#s1-e1)\n",
|
|
"3. [Enhanced Model Evaluation](#s1-3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ba06fefe-92bd-4186-91fb-eabeb17119d4",
|
|
"metadata": {},
|
|
"source": [
|
|
"<a name='s1-1'></a>\n",
|
|
"## Machine Learning Classification ##\n",
|
|
"Classification is a machine learning task that learns how to <mark>assign a class label to examples</mark> from a domain. Throughout the lab, we will focus on developing a binary classification model, which predicts a given input data as one of two classes. Classification requires a dataset with many examples of inputs and labels from which to train. As the size of the dataset grows, the computation and time required can become a bottleneck for model development. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "23fe1e86-796d-4c95-a62a-b0fdb77b28e2",
|
|
"metadata": {},
|
|
"source": [
|
|
"<a name='s1-2'></a>\n",
|
|
"## Model Development ##\n",
|
|
"We will build a classification model to predict the binary outcome. We break down the procedure into the following steps: \n",
|
|
"1. Load data\n",
|
|
"2. Train model\n",
|
|
"3. Evaluate\n",
|
|
"\n",
|
|
"We start by importing data. For this experiment, we will train a [RandomForestClassifier](https://scikit-learn.org/0.17/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier)\n",
|
|
"<mark>\n",
|
|
"A random forest is a meta estimator that fits a number of decision tree classifiers on various sub-samples of the dataset and use averaging to improve the predictive accuracy and control over-fitting. The sub-sample size is always the same as the original input sample size but the samples are drawn with replacement if bootstrap=True (default).\n",
|
|
"</mark>\n",
|
|
"from [scikit-learn](https://scikit-learn.org/stable/). From the previous exercises, we wrote the processed data into 4 Parquet files. We will load these files in parallel with Dask. Since we are training with the CPU, we will load the data into the host memory with `dask.dataframe.read_parquet()`[[doc]](https://scikit-learn.org/stable/). For comparison, we start with using the original features only. W"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "2d1e23af-c524-474c-8009-17860ced4874",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# import dependencies\n",
|
|
"import warnings\n",
|
|
"warnings.filterwarnings('ignore')\n",
|
|
"\n",
|
|
"from sklearn.ensemble import RandomForestClassifier\n",
|
|
"from sklearn.model_selection import train_test_split\n",
|
|
"from sklearn.metrics import roc_curve, classification_report, precision_recall_curve, roc_auc_score, confusion_matrix, accuracy_score, f1_score\n",
|
|
"\n",
|
|
"import dask.dataframe as dd\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import time"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "ea2c9d20-fa24-4104-9fc7-3e45eed7b43a",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# specify features list\n",
|
|
"features_list=['brand', 'cat_0', 'cat_1', 'cat_2', 'cat_3', \n",
|
|
" 'price', 'ts_hour', 'ts_minute', 'ts_weekday']\n",
|
|
"\n",
|
|
"include=features_list+['target']\n",
|
|
"\n",
|
|
"# read data with Dask\n",
|
|
"ddf=dd.read_parquet('processed_parquet', columns=include)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "9d59fb18-f657-4218-b421-c241e6018670",
|
|
"metadata": {
|
|
"scrolled": true,
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<IPython.core.display.Image object>"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# visualize graph\n",
|
|
"ddf.visualize()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "9fff5abf-8838-4986-9771-8595a6a752d6",
|
|
"metadata": {},
|
|
"source": [
|
|
"<p><img src='images/tip.png' width=720></p>\n",
|
|
"Because the data is likely loaded multiple times during model development and fine-tuning, the Parquet file format offers better data loading performance overall than the CSV file. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "38b27115-e828-427b-a5d2-ea418afdf763",
|
|
"metadata": {},
|
|
"source": [
|
|
"Next, we define the target and features. We will force the data to be loaded into memory with `.compute()`. Data needs to be split into a train and test set, which can be accomplished with `sklearn.model_selection.train_test_split()`[[doc]](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split). The train-test split procedure gives us the ability to estimate the performance of machine learning algorithms when they are used to make predictions on data not used to train the model. It is considered a better evaluation. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "4c6180f1-be62-4827-b86f-67036cd127d7",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# load data in memory\n",
|
|
"X=ddf[features_list].compute()\n",
|
|
"y=ddf['target'].compute()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "efca7534-a270-4805-b601-175f67ff731c",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# split data into train and test sets\n",
|
|
"X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=42)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "4921eb77-95db-4339-91d4-87d81a2d0335",
|
|
"metadata": {},
|
|
"source": [
|
|
"Next, we will define the classification model. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "f2082686-8469-41e8-b4dc-b8842b35501c",
|
|
"metadata": {},
|
|
"source": [
|
|
"<a name='s1-2.1'></a>\n",
|
|
"### Random Forest ###\n",
|
|
"The **Random Forest** algorithm is a popular choice for classification and regression problems. It's an ensemble model that trains multiple decision trees and uses a consensus mechanism to make the final prediction. By having multiple trees trained on subsets of the data, it reduces the issue of overfitting with individual decision trees. \n",
|
|
"\n",
|
|
"Random forests use the techniques of bagging (bootstrap aggregation) and feature subsampling to make sure that no two resulting decision trees are the same. With bagging, each decision tree is trained upon a different sample of the original dataset. In the bootstrapped dataset, a given sample (row) of the training data can exist multiple times due to replacement. When the algorithm decides on a split during tree building, only a random sample of features (columns) is considered. Feature subsampling can highlight different aspects of the dataset that might go unnoticed if they are overpowered by more prominent features. \n",
|
|
"\n",
|
|
"<p><img src='images/random_forest.png' width=720></p>\n",
|
|
"\n",
|
|
"skikit-learn's `RandomForestClassifier()` supports a number of model parameters: \n",
|
|
"* `n_estimators` (default=100): the number of trees in the forest\n",
|
|
"* `max_depth` (default=None): the maximum depth of the tree\n",
|
|
"* `min_samples_leaf` (default=1) and `min_samples_split` (default=2): the minimum number of samples required to be a leaf node and split. \n",
|
|
"\n",
|
|
"Though we are using the default parameters, we will work to optimize them in the following exercises. \n",
|
|
"\n",
|
|
"<p><img src='images/tip.png' width=720></p>\n",
|
|
"\n",
|
|
"Ensemble methods based on decision tress are popular because they produce good results and can be easily interpreted. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "b61316a7-ebca-4eee-aba6-a0da42b49e1c",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# initialize classifier\n",
|
|
"rf=RandomForestClassifier()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "3cc26449-5233-4dad-8d11-4b024ab4acb4",
|
|
"metadata": {
|
|
"scrolled": true,
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Training 1846272 samples took 4.79 minutes. \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# train model\n",
|
|
"start=time.time()\n",
|
|
"rf.fit(X_train, y_train)\n",
|
|
"elapsed_time=time.time()-start\n",
|
|
"\n",
|
|
"print(f'Training {len(X_train)} samples took {round(elapsed_time/60, 2)} minutes. ')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a4c4505f-672f-4cfc-97a7-3971b71d7a6f",
|
|
"metadata": {},
|
|
"source": [
|
|
"<p><img src='images/tip.png' width=720></p>\n",
|
|
"\n",
|
|
"The number of trees and training time are close to linearly correlated. Training 350 trees would likely take - "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "00eaddb2-f5f3-47d6-879d-dd2a37c8119f",
|
|
"metadata": {
|
|
"scrolled": true,
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"16.77 minutes\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# estimate training time\n",
|
|
"print(f'{round(elapsed_time/100/60*350, 2)} minutes')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "f4bb8632-5efb-4018-9e7c-9cd752d9477c",
|
|
"metadata": {},
|
|
"source": [
|
|
"<a name='s1-e1'></a>\n",
|
|
"### Exercise #1 - Model Evaluation ###\n",
|
|
"Once the model has been fitted to the data, we need to evaluate model performance. In addition to model performance, inference performance is also an important consideration. We can use the `.score()`[[doc]](https://scikit-learn.org/stable/modules/generated/sklearn.dummy.DummyClassifier.html#sklearn.dummy.DummyClassifier.score) method to get the overall accuracy score of the model. In addition to model accuracy, we are also interested in the model inference performance, i.e., how many predictions can the model produce. \n",
|
|
"\n",
|
|
"**Instructions**: <br>\n",
|
|
"* Modify the `<FIXME>`s only and execute the below cell to calculate the training and testing accuracy scores. \n",
|
|
"* Execute the cell below to calculate the throughput. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "2480ad43-bcd8-47d4-97cd-07352dc9e122",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Train score: 0.97 | Test score: 0.65\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# evaluate model performance\n",
|
|
"train_score=rf.score(X_train, y_train)\n",
|
|
"test_score=rf.score(X_test, y_test)\n",
|
|
"\n",
|
|
"print(f'Train score: {round(train_score, 2)} | Test score: {round(test_score, 2)}')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"id": "466042c5-4d67-4fd0-a4f5-6996af999be6",
|
|
"metadata": {
|
|
"scrolled": true,
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Throughput is: 17665.96 per seconds. \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# evaluate model inference performance\n",
|
|
"start=time.time()\n",
|
|
"prediction_test=rf.predict_proba(X_test)\n",
|
|
"elapsed_time=time.time()-start\n",
|
|
"\n",
|
|
"throughput=round(len(X_test)/elapsed_time, 2)\n",
|
|
"print(f'Throughput is: {throughput} per seconds. ')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "273d73f6-1043-4344-b427-f20f18515cb1",
|
|
"metadata": {},
|
|
"source": [
|
|
"<a name='s1-3'></a>\n",
|
|
"## Enhanced Model Evaluation ##\n",
|
|
"Generally, the overall accuracy is not the best measure to determine the performance of classification models, particularly those that are trained with imbalanced or skewed datasets. We saw from the previous exercise that the model suffers from overfitting based on the accuracy score discrepancies between the train and test set. [Precision, recall, and F1 score](https://en.wikipedia.org/wiki/Precision_and_recall) are recommended alternatives to help select the right classification model. The f1 score is the weighted average of precision and recall. \n",
|
|
"\n",
|
|
"Furthermore, we can use the [AUC-ROC Curve](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) to calculate the area under the receiver operating characteristic curve from prediction scores. It is used to measure how well a model is capable of distinguishing between classes. This can be done with the `.roc_auc_score()`[[doc]](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html) function. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"id": "5349884f-4e0a-4918-a163-982099d19aa1",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# get probability of positive class\n",
|
|
"prediction_proba=prediction_test[:, 1]\n",
|
|
"\n",
|
|
"# get prediction label if using best threshold\n",
|
|
"threshold=0.5\n",
|
|
"prediction_label=(prediction_proba >= threshold).astype('int64')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"id": "62f79929-e4d9-439c-a058-076ea402800e",
|
|
"metadata": {
|
|
"scrolled": true,
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Classification Report: \n",
|
|
" precision recall f1-score support\n",
|
|
"\n",
|
|
" 0 0.69 0.77 0.72 363564\n",
|
|
" 1 0.59 0.49 0.54 251861\n",
|
|
"\n",
|
|
" accuracy 0.65 615425\n",
|
|
" macro avg 0.64 0.63 0.63 615425\n",
|
|
"weighted avg 0.65 0.65 0.65 615425\n",
|
|
"\n",
|
|
"Confusion Matrix: \n",
|
|
" [[278557 85007]\n",
|
|
" [127675 124186]]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# generate classification report and confusion matrix\n",
|
|
"print(\"Classification Report: \\n\", classification_report(y_test, prediction_label))\n",
|
|
"print(\"Confusion Matrix: \\n\", confusion_matrix(y_test, prediction_label))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"id": "353997bd-2b97-441b-849b-766237a81ee3",
|
|
"metadata": {
|
|
"scrolled": true,
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"F1 Score is 0.54. \n",
|
|
"Area Under the Receiver Operating Characteristic Curve is 0.71. \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# calculate precision, recall, and f1 score\n",
|
|
"precision, recall, thresholds=precision_recall_curve(y_test, prediction_proba)\n",
|
|
"f1=f1_score(y_test, prediction_label)\n",
|
|
"\n",
|
|
"# calculate AUC ROC\n",
|
|
"auc_roc=roc_auc_score(y_test, prediction_proba)\n",
|
|
"\n",
|
|
"print(f'F1 Score is {round(f1, 2)}. ')\n",
|
|
"print(f'Area Under the Receiver Operating Characteristic Curve is {round(auc_roc, 2)}. ')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"id": "c361d0ee-df53-4cae-b6e7-71f241dd2465",
|
|
"metadata": {
|
|
"scrolled": true,
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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YOqP1LJlS2JjY/nss8+oXLkyGzdupFu3bg889l2bN2/G09MzVy1HUVFRvPrqq7z77ruMHz+etWvXMmbMGHx8fMzvN6fX5a5169axc+dOxo0bh5eXFx4eHoApsRw0aBDly5cHYN++fbz11ltcuXLFfA0Axo0bx8cff0znzp159913cXFx4Z9//uHSpUsAzJw5k4EDB3LhwoVMLVFGo5Hnn3+enTt3Mnr0aJo0acKlS5cYP348LVq04NChQxlakY4cOcKpU6f44IMP8Pf3x8HBIcvrNGXKFD788EM++OADnn76adLS0jh9+rS5f82AAQOIjY3l66+/Zs2aNXh7ewPZt9ikp6fTrl07du7cyfDhw2nVqhXp6ens27eP8PBwmjRpkqP/P1GEKCEKuUWLFilA7du3T6WlpamEhAS1ceNG5eXlpZ5++mmVlpZmrhsQEKDq16+foUwppTp06KC8vb2VwWBQSinVr18/ZW1trU6ePJnteSdPnqwsLCzUwYMHM5SvWrVKAWrDhg3mMj8/P9W7d2/z9s8//6wAtXnzZnNZenq68vHxUS+99JK5bNCgQcrR0VFdunQpwzmmTp2qAHXixAmllFKhoaEKUJUqVVKpqakPu2Rq8ODBClCnT5/Ots6pU6cUoIYMGWIuA5SdnZ2KiorKEHdAQICqXLlyvsadnp6u0tLSVP/+/VX9+vUzvObg4JDh+t61detWBaitW7eay3r37q0AtWLFigx127dvr6pVq2be/vbbbxWgfv/99wz1Bg0apAC1aNGiB8Zra2urGjVq9MA6/9W8eXMFqP3792cor1Gjhmrbtm22+z3ougDKxcVFxcbGPvDcBoNBpaWlqY8++ki5ubkpo9GolFLq4sWLytLSUr366qsP3P+5555Tfn5+mcqXLVumALV69eoM5QcPHlSAmjlzprnMz89PWVpaqjNnzmQ6zv2/Px06dFD16tV7YEyff/65AlRoaGim15o3b66aN29u3l6yZIkC1Lx58x54TFF8yG0pUWQ0atQIa2trnJycePbZZylVqhTr16/HysrUAHn+/HlOnz5tbhVJT083P9q3b09kZCRnzpwB4Pfff6dly5ZUr1492/P9+uuv1KpVi3r16mU4Vtu2bR86Qqddu3Z4eXllaMHYtGkTV69epV+/fhnO0bJlS3x8fDKco127dgBs3749w3E7deqEtbV1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\n",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# calculate fpr and tpr using sklearn\n",
|
|
"fpr, tpr, _=roc_curve(y_test, prediction_proba)\n",
|
|
"\n",
|
|
"# plot ROC\n",
|
|
"plt.plot(fpr, tpr, label=f'ROC Curve (Area = {round(auc_roc, 2)})')\n",
|
|
"plt.plot([0, 1], [0, 1], linestyle='--', label='ROC Random')\n",
|
|
"plt.xlabel('False Positive Rate')\n",
|
|
"plt.ylabel('True Positive Rate')\n",
|
|
"plt.title('Receiver Operating Characteristic')\n",
|
|
"plt.legend(loc='lower right')\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2e9e7819-efcf-4255-bcb4-01a356398639",
|
|
"metadata": {},
|
|
"source": [
|
|
"<p><img src='images/tip.png' width=720></p>\n",
|
|
"\n",
|
|
"When calculating various metrics, it's important to understand when `y_score` or `y_pred` should be used. They differ in that `y_score` is the probability estimates `y_pred` is the estimated target labels. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"id": "dec6bac8-b48f-438a-a357-b57b7efb5964",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'status': 'ok', 'restart': False}"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# clean GPU memory\n",
|
|
"import IPython\n",
|
|
"app = IPython.Application.instance()\n",
|
|
"app.kernel.do_shutdown(restart=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "58b0916b-3413-4822-a65c-e03c659222a7",
|
|
"metadata": {},
|
|
"source": [
|
|
"This will serve as the baseline machine learning model. Going forward, we will work towards improving model performance and model inference performance. \n",
|
|
"\n",
|
|
"**Well Done!** Let's move to the [next notebook](2_02_accelerated_model_development.ipynb). "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "85aff521-bafe-452e-98a3-5b4c2ba288d9",
|
|
"metadata": {},
|
|
"source": [
|
|
"<a href=\"https://www.nvidia.com/dli\"> <img src=\"images/DLI_Header.png\" alt=\"Header\" style=\"width: 400px;\"/> </a>"
|
|
]
|
|
}
|
|
],
|
|
"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.9.16"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|