Skip to content

Instantly share code, notes, and snippets.

@Orbifold
Created August 23, 2018 12:36
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 Orbifold/b67247a0c9299aca15ffa125341009ae to your computer and use it in GitHub Desktop.
Save Orbifold/b67247a0c9299aca15ffa125341009ae to your computer and use it in GitHub Desktop.
Linear regression with MXNet.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Linear regression with MXNet"
],
"metadata": {}
},
{
"cell_type": "code",
"source": [
"import mxnet as mx\n",
"from mxnet import nd, autograd, gluon\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"data_ctx = mx.cpu()\n",
"model_ctx = mx.cpu()"
],
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"~/conda/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py:46: DeprecationWarning: OpenSSL.rand is deprecated - you should use os.urandom instead\n",
" import OpenSSL.SSL\n"
]
}
],
"execution_count": 1,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"num_inputs = 2\n",
"num_outputs = 1\n",
"num_examples = 1000\n",
"\n",
"def real_fn(X):\n",
" return 2 * X[:, 0] - 3.4 * X[:, 1] + 4.2\n",
"\n",
"X = nd.random_normal(shape=(num_examples, num_inputs))\n",
"noise = 0.01 * nd.random_normal(shape=(num_examples,))\n",
"y = real_fn(X) + noise"
],
"outputs": [],
"execution_count": 2,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"batch_size = 4\n",
"train_data = gluon.data.DataLoader(gluon.data.ArrayDataset(X, y), batch_size=batch_size, shuffle=True)"
],
"outputs": [],
"execution_count": 3,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"net = gluon.nn.Dense(1, in_units=2)"
],
"outputs": [],
"execution_count": 4,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"print(net.weight)\n",
"print(net.bias)"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Parameter dense0_weight (shape=(1, 2), dtype=float32)\n",
"Parameter dense0_bias (shape=(1,), dtype=float32)\n"
]
}
],
"execution_count": 5,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"net.collect_params().initialize(mx.init.Normal(sigma=1.), ctx=model_ctx)"
],
"outputs": [],
"execution_count": 6,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"net(nd.array([[0,1]]))"
],
"outputs": [
{
"output_type": "execute_result",
"execution_count": 7,
"data": {
"text/plain": [
"\n",
"[[-1.3058136]]\n",
"<NDArray 1x1 @cpu(0)>"
]
},
"metadata": {}
}
],
"execution_count": 7,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"square_loss = gluon.loss.L2Loss()"
],
"outputs": [],
"execution_count": 8,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.0001})"
],
"outputs": [],
"execution_count": 9,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"epochs = 150\n",
"loss_sequence = []\n",
"num_batches = num_examples / batch_size\n",
"\n",
"for e in range(epochs):\n",
" cumulative_loss = 0\n",
" # inner loop\n",
" for i, (data, label) in enumerate(train_data):\n",
" data = data.as_in_context(model_ctx)\n",
" label = label.as_in_context(model_ctx)\n",
" with autograd.record():\n",
" output = net(data)\n",
" loss = square_loss(output, label)\n",
" loss.backward()\n",
" trainer.step(batch_size)\n",
" cumulative_loss += nd.mean(loss).asscalar()\n",
" print(\"Epoch %s, loss: %s\" % (e, cumulative_loss / num_examples))\n",
" loss_sequence.append(cumulative_loss)"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 0, loss: 2.7113678157925607\n",
"Epoch 1, loss: 2.5795415766239165\n",
"Epoch 2, loss: 2.4541269619464874\n",
"Epoch 3, loss: 2.3348282388448713\n",
"Epoch 4, loss: 2.2213501752614975\n",
"Epoch 5, loss: 2.113367976427078\n",
"Epoch 6, loss: 2.0106545008420946\n",
"Epoch 7, loss: 1.9128991372585296\n",
"Epoch 8, loss: 1.8199285967350005\n",
"Epoch 9, loss: 1.7314712901711464\n",
"Epoch 10, loss: 1.6473155253529548\n",
"Epoch 11, loss: 1.5672483497262002\n",
"Epoch 12, loss: 1.491078361749649\n",
"Epoch 13, loss: 1.4186117897629738\n",
"Epoch 14, loss: 1.3496565409302712\n",
"Epoch 15, loss: 1.2840780556797982\n",
"Epoch 16, loss: 1.2216709453463555\n",
"Epoch 17, loss: 1.162293390750885\n",
"Epoch 18, loss: 1.105811959862709\n",
"Epoch 19, loss: 1.0520711150765418\n",
"Epoch 20, loss: 1.0009514333605767\n",
"Epoch 21, loss: 0.95231286662817\n",
"Epoch 22, loss: 0.9060354414582252\n",
"Epoch 23, loss: 0.862010746061802\n",
"Epoch 24, loss: 0.8201237805783749\n",
"Epoch 25, loss: 0.780276043370366\n",
"Epoch 26, loss: 0.7423611706793308\n",
"Epoch 27, loss: 0.7062875881791115\n",
"Epoch 28, loss: 0.6719751496911048\n",
"Epoch 29, loss: 0.6393293917477131\n",
"Epoch 30, loss: 0.6082637111544609\n",
"Epoch 31, loss: 0.578710649073124\n",
"Epoch 32, loss: 0.5505954122543335\n",
"Epoch 33, loss: 0.5238473320901393\n",
"Epoch 34, loss: 0.4983994086384773\n",
"Epoch 35, loss: 0.4741862567961216\n",
"Epoch 36, loss: 0.45115084782242776\n",
"Epoch 37, loss: 0.42923357504606247\n",
"Epoch 38, loss: 0.4083809304535389\n",
"Epoch 39, loss: 0.38854364366829397\n",
"Epoch 40, loss: 0.36966929471492765\n",
"Epoch 41, loss: 0.35171456199884416\n",
"Epoch 42, loss: 0.33463025364279747\n",
"Epoch 43, loss: 0.3183785715252161\n",
"Epoch 44, loss: 0.30291297268867495\n",
"Epoch 45, loss: 0.28820096438378096\n",
"Epoch 46, loss: 0.27420299936831\n",
"Epoch 47, loss: 0.2608845283389091\n",
"Epoch 48, loss: 0.24821310175955297\n",
"Epoch 49, loss: 0.23615999141335486\n",
"Epoch 50, loss: 0.22468971230648457\n",
"Epoch 51, loss: 0.21377902992069722\n",
"Epoch 52, loss: 0.20339755322039127\n",
"Epoch 53, loss: 0.19351965060085058\n",
"Epoch 54, loss: 0.18412317997962235\n",
"Epoch 55, loss: 0.17518107267469168\n",
"Epoch 56, loss: 0.16667483854293824\n",
"Epoch 57, loss: 0.15858063255622984\n",
"Epoch 58, loss: 0.15088152593746781\n",
"Epoch 59, loss: 0.14355444251745939\n",
"Epoch 60, loss: 0.13658440142497422\n",
"Epoch 61, loss: 0.12995274115353822\n",
"Epoch 62, loss: 0.12364327760413289\n",
"Epoch 63, loss: 0.11763978493213653\n",
"Epoch 64, loss: 0.11192909374274314\n",
"Epoch 65, loss: 0.10649548701196909\n",
"Epoch 66, loss: 0.10132535001263022\n",
"Epoch 67, loss: 0.09640615732222796\n",
"Epoch 68, loss: 0.09172646640986204\n",
"Epoch 69, loss: 0.08727357058227062\n",
"Epoch 70, loss: 0.08303805483132601\n",
"Epoch 71, loss: 0.0790058258101344\n",
"Epoch 72, loss: 0.07517149670049549\n",
"Epoch 73, loss: 0.07152289288863539\n",
"Epoch 74, loss: 0.06805129644647241\n",
"Epoch 75, loss: 0.0647481979355216\n",
"Epoch 76, loss: 0.06160551110934466\n",
"Epoch 77, loss: 0.05861566048115492\n",
"Epoch 78, loss: 0.0557710908902809\n",
"Epoch 79, loss: 0.05306435045599937\n",
"Epoch 80, loss: 0.050488863822072745\n",
"Epoch 81, loss: 0.04803905757144093\n",
"Epoch 82, loss: 0.04570811653975397\n",
"Epoch 83, loss: 0.043489952296018604\n",
"Epoch 84, loss: 0.04137968973442912\n",
"Epoch 85, loss: 0.03937138960044831\n",
"Epoch 86, loss: 0.037460879892110825\n",
"Epoch 87, loss: 0.0356435053832829\n",
"Epoch 88, loss: 0.03391404440253973\n",
"Epoch 89, loss: 0.03226874783448875\n",
"Epoch 90, loss: 0.030703252350911498\n",
"Epoch 91, loss: 0.029213676789775492\n",
"Epoch 92, loss: 0.02779654618538916\n",
"Epoch 93, loss: 0.02644826531596482\n",
"Epoch 94, loss: 0.025165069661103188\n",
"Epoch 95, loss: 0.023944479756057263\n",
"Epoch 96, loss: 0.022782894434407352\n",
"Epoch 97, loss: 0.021677913954481483\n",
"Epoch 98, loss: 0.020626577369868754\n",
"Epoch 99, loss: 0.019626039378345013\n",
"Epoch 100, loss: 0.018674104558303952\n",
"Epoch 101, loss: 0.01776835938729346\n",
"Epoch 102, loss: 0.01690695836022496\n",
"Epoch 103, loss: 0.016087146033532916\n",
"Epoch 104, loss: 0.01530721583776176\n",
"Epoch 105, loss: 0.014565310759469867\n",
"Epoch 106, loss: 0.01385922425193712\n",
"Epoch 107, loss: 0.013187152079306543\n",
"Epoch 108, loss: 0.012547998392954469\n",
"Epoch 109, loss: 0.011939744890201836\n",
"Epoch 110, loss: 0.011361180235631764\n",
"Epoch 111, loss: 0.010810663416981697\n",
"Epoch 112, loss: 0.010286685751751064\n",
"Epoch 113, loss: 0.009788204517215491\n",
"Epoch 114, loss: 0.00931400292366743\n",
"Epoch 115, loss: 0.008862799366936087\n",
"Epoch 116, loss: 0.008433393939165399\n",
"Epoch 117, loss: 0.008024955290369689\n",
"Epoch 118, loss: 0.007636295366333798\n",
"Epoch 119, loss: 0.007266398513689637\n",
"Epoch 120, loss: 0.00691438973066397\n",
"Epoch 121, loss: 0.006579601499019191\n",
"Epoch 122, loss: 0.006261118083726615\n",
"Epoch 123, loss: 0.005958052480593324\n",
"Epoch 124, loss: 0.00566945843398571\n",
"Epoch 125, loss: 0.005394873068202287\n",
"Epoch 126, loss: 0.00513376785768196\n",
"Epoch 127, loss: 0.004885284634307027\n",
"Epoch 128, loss: 0.0046489134593866764\n",
"Epoch 129, loss: 0.004424064236460253\n",
"Epoch 130, loss: 0.004210209384793415\n",
"Epoch 131, loss: 0.0040066773153375835\n",
"Epoch 132, loss: 0.0038129280564608054\n",
"Epoch 133, loss: 0.0036285838466719724\n",
"Epoch 134, loss: 0.0034531862314324826\n",
"Epoch 135, loss: 0.0032863791410345585\n",
"Epoch 136, loss: 0.0031275631298776714\n",
"Epoch 137, loss: 0.002976552771171555\n",
"Epoch 138, loss: 0.0028328257801476867\n",
"Epoch 139, loss: 0.002695904175430769\n",
"Epoch 140, loss: 0.002565709551097825\n",
"Epoch 141, loss: 0.002441938458941877\n",
"Epoch 142, loss: 0.0023241431822534652\n",
"Epoch 143, loss: 0.0022119790550787\n",
"Epoch 144, loss: 0.0021053332465235143\n",
"Epoch 145, loss: 0.002003820699523203\n",
"Epoch 146, loss: 0.001907310605805833\n",
"Epoch 147, loss: 0.0018154382390202955\n",
"Epoch 148, loss: 0.0017279924581525847\n",
"Epoch 149, loss: 0.0016448109191842376\n"
]
}
],
"execution_count": 10,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"plt.figure(num=None,figsize=(8, 6))\n",
"plt.plot(loss_sequence)\n",
"\n",
"# Adding some bells and whistles to the plot\n",
"plt.grid(True, which=\"both\")\n",
"plt.xlabel('epoch',fontsize=14)\n",
"plt.ylabel('average loss',fontsize=14)"
],
"outputs": [
{
"output_type": "execute_result",
"execution_count": 11,
"data": {
"text/plain": [
"Text(0,0.5,'average loss')"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
],
"image/png": [
"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\n"
]
},
"metadata": {}
}
],
"execution_count": 11,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"params = net.collect_params() # this returns a ParameterDict\n",
"\n",
"print('The type of \"params\" is a ',type(params))\n",
"\n",
"# A ParameterDict is a dictionary of Parameter class objects\n",
"# therefore, here is how we can read off the parameters from it.\n",
"\n",
"for param in params.values():\n",
" print(param.name,param.data())"
],
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"The type of \"params\" is a <class 'mxnet.gluon.parameter.ParameterDict'>\n",
"dense0_weight \n",
"[[ 1.9945382 -3.3480418]]\n",
"<NDArray 1x2 @cpu(0)>\n",
"dense0_bias \n",
"[4.0999794]\n",
"<NDArray 1 @cpu(0)>\n"
]
}
],
"execution_count": 12,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [],
"outputs": [],
"execution_count": null,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"language": "python",
"display_name": "Python 3"
},
"kernel_info": {
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.6.3",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"nteract": {
"version": "0.9.0"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment