Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
sunilmallya committed Sep 26, 2017
1 parent b235fb4 commit f835a14
Showing 1 changed file with 22 additions and 168 deletions.
190 changes: 22 additions & 168 deletions cnn_mnist_gluon_simplified.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,9 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": null,
"metadata": {
"collapsed": false
"collapsed": true
},
"outputs": [],
"source": [
Expand All @@ -122,163 +122,53 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": null,
"metadata": {
"collapsed": false
"collapsed": true
},
"outputs": [
{
"data": {
"text/plain": [
"{'_batch_sampler': <mxnet.gluon.data.sampler.BatchSampler at 0x10b07bd10>,\n",
" '_dataset': <mxnet.gluon.data.vision.MNIST at 0x10b07ba50>}"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"train_data.__dict__"
]
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": null,
"metadata": {
"collapsed": false
"collapsed": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"HybridSequential(\n",
" (0): HybridSequential(\n",
" (0): Conv2D(20, kernel_size=(5, 5), stride=(1, 1))\n",
" (1): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)\n",
" (2): Conv2D(50, kernel_size=(5, 5), stride=(1, 1))\n",
" (3): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)\n",
" )\n",
" (1): Flatten\n",
" (2): Dense(512, Activation(relu))\n",
" (3): Dense(10, linear)\n",
")\n",
"Epoch 0. Loss: 0.0550339012977, Train_acc 0.987516666667, Test_acc 0.9882\n",
"Epoch 1. Loss: 0.0430203394256, Train_acc 0.991333333333, Test_acc 0.9901\n",
"Epoch 2. Loss: 0.0261364316174, Train_acc 0.994883333333, Test_acc 0.991\n",
"Epoch 3. Loss: 0.0220908905365, Train_acc 0.996566666667, Test_acc 0.9921\n",
"Epoch 4. Loss: 0.0174940514529, Train_acc 0.996866666667, Test_acc 0.9919\n",
"Epoch 5. Loss: 0.0138277958493, Train_acc 0.997283333333, Test_acc 0.9901\n",
"Epoch 6. Loss: 0.0104377611519, Train_acc 0.998066666667, Test_acc 0.9921\n",
"Epoch 7. Loss: 0.0120992395219, Train_acc 0.998816666667, Test_acc 0.9929\n",
"Epoch 8. Loss: 0.00728318977314, Train_acc 0.996816666667, Test_acc 0.9894\n",
"Epoch 9. Loss: 0.00985936332206, Train_acc 0.995416666667, Test_acc 0.9877\n"
]
}
],
"outputs": [],
"source": [
"num_fc = 512\n",
"num_classes = 10 #num_outputs\n",
"convs = [(20,5,2), (50,5,2)]\n",
"\n",
"ctx = mx.cpu()\n",
"ctx = mx.gpu()\n",
"cnn = BaseCNNClassifier(ctx)\n",
"cnn.build_model(convs, num_fc, num_classes)\n",
"cnn.compile_model(optimizer='adam')\n",
"cnn.fit(train_data, test_data, epochs=10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Do CIFAR\n",
"\n",
"https://github.com/ilkarman/DeepLearningFrameworks/blob/master/Gluon_CIFAR.ipynb"
]
},
{
"cell_type": "code",
"execution_count": null,
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Lets try CIFAR now"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n",
"Done.\n",
"Extracting files...\n",
"Done.\n",
"Preparing train set...\n",
"Preparing test set...\n",
"Done.\n",
"((50000, 3, 32, 32), (10000, 3, 32, 32), (50000,), (10000,))\n",
"(dtype('float32'), dtype('float32'), dtype('int32'), dtype('int32'))\n",
"CPU times: user 5.27 s, sys: 3.81 s, total: 9.08 s\n",
"Wall time: 1min 34s\n"
]
}
],
"source": [
"%%time\n",
"from utils import *\n",
"\n",
"# Data into format for library\n",
"x_train, x_test, y_train, y_test = cifar_for_library(channel_first=True)\n",
"\n",
"print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
"print(x_train.dtype, x_test.dtype, y_train.dtype, y_test.dtype)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X_train, y_train = self.from_numpy(X_train, y_train)\n",
"train_loader = mx.gluon.data.DataLoader(mx.gluon.data.ArrayDataset(X_train, y_train),\n",
" batch_size=batch_size, shuffle=True)\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading ./data/cifar-10-binary.tar.gz from https://apache-mxnet.s3-accelerate.dualstack.amazonaws.com/gluon/dataset/cifar10/cifar-10-binary.tar.gz...\n"
]
}
],
"source": [
"batch_size = 32\n",
"\n",
"def transformer(data, label):\n",
" data = mx.image.imresize(data, 224, 224)\n",
" data = mx.nd.transpose(data, (2,0,1))\n",
Expand All @@ -296,10 +186,8 @@
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand All @@ -319,21 +207,12 @@
" (1): Flatten\n",
" (2): Dense(512, Activation(relu))\n",
" (3): Dense(10, linear)\n",
")\n"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-10-a80e4672de52>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mcnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuild_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconvs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_fc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_classes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mcnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moptimizer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'adam'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mcnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_data\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest_data\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m<ipython-input-1-845d0bf89d10>\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, train_data, test_data, epochs)\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[0;31m# Keep a moving average of the losses\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;31m##########################\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 74\u001b[0;31m \u001b[0mcurr_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masscalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 75\u001b[0m moving_loss = (curr_loss if ((i == 0) and (e == 0)) \n\u001b[1;32m 76\u001b[0m else (1 - smoothing_constant) * moving_loss + (smoothing_constant) * curr_loss)\n",
"\u001b[0;32m/usr/local/lib/python2.7/site-packages/mxnet/ndarray/ndarray.pyc\u001b[0m in \u001b[0;36masscalar\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1473\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1474\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The current array is not a scalar\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1475\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masnumpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1476\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1477\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mastype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python2.7/site-packages/mxnet/ndarray/ndarray.pyc\u001b[0m in \u001b[0;36masnumpy\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1455\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1456\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mctypes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata_as\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mctypes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mc_void_p\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1457\u001b[0;31m ctypes.c_size_t(data.size)))\n\u001b[0m\u001b[1;32m 1458\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1459\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
")\n",
"Epoch 0. Loss: 1.47114814304, Train_acc 0.511003521127, Test_acc 0.474959935897\n",
"Epoch 1. Loss: 1.23667258255, Train_acc 0.602792893726, Test_acc 0.546875\n",
"Epoch 2. Loss: 1.04258822086, Train_acc 0.72685259283, Test_acc 0.608173076923\n",
"Epoch 3. Loss: 0.844378689356, Train_acc 0.828885243278, Test_acc 0.62359775641\n",
"Epoch 4. Loss: 0.628420212727, Train_acc 0.881722151088, Test_acc 0.612279647436\n"
]
}
],
Expand All @@ -342,37 +221,12 @@
"num_classes = 10 #num_outputs\n",
"convs = [(50,3,2), (50,3,2), (100,3,2), (100,3,2)]\n",
"\n",
"ctx = mx.cpu()\n",
"ctx = mx.gpu()\n",
"cnn = BaseCNNClassifier(ctx)\n",
"cnn.build_model(convs, num_fc, num_classes)\n",
"cnn.compile_model(optimizer='adam')\n",
"cnn.fit(train_data, test_data, epochs=5)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def yield_batch(X, y, batchsize=64, shuffle=False):\n",
" \n",
" def shuffle_data(X, y):\n",
" s = np.arange(len(X))\n",
" np.random.shuffle(s)\n",
" X = X[s]\n",
" y = y[s]\n",
" return X, y\n",
"\n",
" assert len(X) == len(y)\n",
" if shuffle:\n",
" X, y = shuffle_data(X, y)\n",
" # Only complete batches are submitted\n",
" for i in range(len(X)//batchsize):\n",
" yield X[i*batchsize:(i+1)*batchsize], y[i*batchsize:(i+1)*batchsize]"
]
}
],
"metadata": {
Expand All @@ -391,7 +245,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
"version": "2.7.12"
}
},
"nbformat": 4,
Expand Down

0 comments on commit f835a14

Please sign in to comment.