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 karenyyng/f3ec681cf05b750d3a860b08b062878a to your computer and use it in GitHub Desktop.
Save karenyyng/f3ec681cf05b750d3a860b08b062878a to your computer and use it in GitHub Desktop.
C3D Model for Keras

C3D Model for Keras

This is the C3D model used with a fork of Caffe to the Sports1M dataset migrated to Keras. Details about the network architecture can be found in the following arXiv paper:

Tran, Du, et al. "Learning Spatiotemporal Features With 3D Convolutional Networks." Proceedings of the IEEE International Conference on Computer Vision. 2015.

Content

Download: weights

Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sports 1M C3D Network to Keras"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook is trying to explain detailed the steps needed to port the network parameters trained on a Caffe's fork to Keras. The network was trained over the Sports1M Dataset, and the Caffe version was a fork which implements the 3D convolution. More info at the [paper](http://arxiv.org/abs/1412.0767).\n",
"\n",
"The first step is to obtain the parameters [file](https://www.dropbox.com/s/vr8ckp0pxgbldhs/conv3d_deepnetA_sport1m_iter_1900000?dl=0) related to the network. This file is stored as a caffemodel. To read this file it will be needed to generate the python output of the [proto definition](https://raw.githubusercontent.com/facebook/C3D/master/src/caffe/proto/caffe.proto) at the fork of caffe [C3D](https://github.com/facebook/C3D).\n",
"\n",
"To compile the proto file and then be able to read the caffemodel file with python require to recompile the protobuf library increasing the limit size. By definition, protobuf is thought to treat no large amount of data and it is limitated to read files smaller than 64MB. We can increase that limit following these steps:\n",
"1. Cloning the protobuf repository.\n",
"```sh\n",
"git clone https://github.com/google/protobuf\n",
"```\n",
"2. Change the following line of code.\n",
"\n",
"```diff\n",
"diff --git a/src/google/protobuf/io/coded_stream.h b/src/google/protobuf/io/coded_stream.h\n",
"index c81a33a..eeb8863 100644\n",
"--- a/src/google/protobuf/io/coded_stream.h\n",
"+++ b/src/google/protobuf/io/coded_stream.h\n",
"@@ -609,7 +609,7 @@ class LIBPROTOBUF_EXPORT CodedInputStream {\n",
" // Return the size of the buffer.\n",
" int BufferSize() const;\n",
" \n",
"- static const int kDefaultTotalBytesLimit = 64 << 20; // 64MB\n",
"+ static const int kDefaultTotalBytesLimit = 256 << 20; // 256MB\n",
" \n",
" static const int kDefaultTotalBytesWarningThreshold = 32 << 20; // 32MB\n",
"```\n",
"\n",
"3. Follow the instructions [here](https://github.com/google/protobuf/blob/master/src/README.md) to recompile the protoc compiler.\n",
"\n",
"4. Follow the instructions [here](https://github.com/google/protobuf/blob/master/python/README.md) to install the python protobuf with the reading file size increased.\n",
"\n",
"5. Compile the `caffe.proto` file for python.\n",
"```sh\n",
"protoc --python_out=. caffe.proto\n",
"```\n",
"\n",
"Once protobuf is build, it is also required to have all the depencies ok Keras and Theano (it is going to use as the backend of Keras because is the only one that supports 3D convolutions)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sports1M pre-trained model C3D"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Following the definition of the caffe proto of the C3D network used to train Sports1M and the paper, we define the same model in Keras."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using Theano backend.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--------------------------------------------------------------------------------\n",
"Initial input shape: (None, 3, 16, 112, 112)\n",
"--------------------------------------------------------------------------------\n",
"Layer (name) Output Shape Param # \n",
"--------------------------------------------------------------------------------\n",
"Convolution3D (conv1) (None, 64, 16, 112, 112) 5248 \n",
"MaxPooling3D (pool1) (None, 64, 16, 56, 56) 0 \n",
"Convolution3D (conv2) (None, 128, 16, 56, 56) 221312 \n",
"MaxPooling3D (pool2) (None, 128, 8, 28, 28) 0 \n",
"Convolution3D (conv3a) (None, 256, 8, 28, 28) 884992 \n",
"Convolution3D (conv3b) (None, 256, 8, 28, 28) 1769728 \n",
"MaxPooling3D (pool3) (None, 256, 4, 14, 14) 0 \n",
"Convolution3D (conv4a) (None, 512, 4, 14, 14) 3539456 \n",
"Convolution3D (conv4b) (None, 512, 4, 14, 14) 7078400 \n",
"MaxPooling3D (pool4) (None, 512, 2, 7, 7) 0 \n",
"Convolution3D (conv5a) (None, 512, 2, 7, 7) 7078400 \n",
"Convolution3D (conv5b) (None, 512, 2, 7, 7) 7078400 \n",
"ZeroPadding3D (zeropadding3d) (None, 512, 2, 9, 9) 0 \n",
"MaxPooling3D (pool5) (None, 512, 1, 4, 4) 0 \n",
"Flatten (flatten) (None, 8192) 0 \n",
"Dense (fc6) (None, 4096) 33558528 \n",
"Dropout (dropout) (None, 4096) 0 \n",
"Dense (fc7) (None, 4096) 16781312 \n",
"Dropout (dropout) (None, 4096) 0 \n",
"Dense (fc8) (None, 487) 1995239 \n",
"--------------------------------------------------------------------------------\n",
"Total params: 79991015\n",
"--------------------------------------------------------------------------------\n",
"None\n"
]
}
],
"source": [
"from keras.models import Sequential\n",
"from keras.layers.core import Dense, Dropout, Flatten\n",
"from keras.layers.convolutional import Convolution3D, MaxPooling3D, ZeroPadding3D\n",
"from keras.optimizers import SGD\n",
"\n",
"def get_model(summary=False):\n",
" \"\"\" Return the Keras model of the network\n",
" \"\"\"\n",
" model = Sequential()\n",
" # 1st layer group\n",
" model.add(Convolution3D(64, 3, 3, 3, activation='relu', \n",
" border_mode='same', name='conv1',\n",
" subsample=(1, 1, 1), \n",
" input_shape=(3, 16, 112, 112)))\n",
" model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2), \n",
" border_mode='valid', name='pool1'))\n",
" # 2nd layer group\n",
" model.add(Convolution3D(128, 3, 3, 3, activation='relu', \n",
" border_mode='same', name='conv2',\n",
" subsample=(1, 1, 1)))\n",
" model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), \n",
" border_mode='valid', name='pool2'))\n",
" # 3rd layer group\n",
" model.add(Convolution3D(256, 3, 3, 3, activation='relu', \n",
" border_mode='same', name='conv3a',\n",
" subsample=(1, 1, 1)))\n",
" model.add(Convolution3D(256, 3, 3, 3, activation='relu', \n",
" border_mode='same', name='conv3b',\n",
" subsample=(1, 1, 1)))\n",
" model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), \n",
" border_mode='valid', name='pool3'))\n",
" # 4th layer group\n",
" model.add(Convolution3D(512, 3, 3, 3, activation='relu', \n",
" border_mode='same', name='conv4a',\n",
" subsample=(1, 1, 1)))\n",
" model.add(Convolution3D(512, 3, 3, 3, activation='relu', \n",
" border_mode='same', name='conv4b',\n",
" subsample=(1, 1, 1)))\n",
" model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), \n",
" border_mode='valid', name='pool4'))\n",
" # 5th layer group\n",
" model.add(Convolution3D(512, 3, 3, 3, activation='relu', \n",
" border_mode='same', name='conv5a',\n",
" subsample=(1, 1, 1)))\n",
" model.add(Convolution3D(512, 3, 3, 3, activation='relu', \n",
" border_mode='same', name='conv5b',\n",
" subsample=(1, 1, 1)))\n",
" model.add(ZeroPadding3D(padding=(0, 1, 1)))\n",
" model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2), \n",
" border_mode='valid', name='pool5'))\n",
" model.add(Flatten())\n",
" # FC layers group\n",
" model.add(Dense(4096, activation='relu', name='fc6'))\n",
" model.add(Dropout(.5))\n",
" model.add(Dense(4096, activation='relu', name='fc7'))\n",
" model.add(Dropout(.5))\n",
" model.add(Dense(487, activation='softmax', name='fc8'))\n",
" if summary:\n",
" print(model.summary())\n",
" return model\n",
"\n",
"model = get_model(summary=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Loading parameters"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now lets load all the parametes. One thing to consider is that this operation waste a lot of computer memory (arround 3GB of RAM) due to ineficiencies of protobuf with large serialized objects.\n",
"\n",
"Due to differences between the order of saving the parametes in caffe, some transformations to the matrix should be made."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import caffe_pb2 as caffe\n",
"import numpy as np\n",
"\n",
"p = caffe.NetParameter()\n",
"p.ParseFromString(\n",
" open('model/conv3d_deepnetA_sport1m_iter_1900000', 'rb').read()\n",
")\n",
"\n",
"def rot90(W):\n",
" for i in range(W.shape[0]):\n",
" for j in range(W.shape[1]):\n",
" for k in range(W.shape[2]):\n",
" W[i, j, k] = np.rot90(W[i, j, k], 2)\n",
" return W\n",
"\n",
"params = []\n",
"conv_layers_indx = [1, 4, 7, 9, 12, 14, 17, 19]\n",
"fc_layers_indx = [22, 25, 28]\n",
"\n",
"for i in conv_layers_indx:\n",
" layer = p.layers[i]\n",
" weights_b = np.array(layer.blobs[1].data, dtype=np.float32)\n",
" weights_p = np.array(layer.blobs[0].data, dtype=np.float32).reshape(\n",
" layer.blobs[0].num, layer.blobs[0].channels, layer.blobs[0].length,\n",
" layer.blobs[0].height, layer.blobs[0].width\n",
" )\n",
" weights_p = rot90(weights_p)\n",
" params.append([weights_p, weights_b])\n",
"for i in fc_layers_indx:\n",
" layer = p.layers[i]\n",
" weights_b = np.array(layer.blobs[1].data, dtype=np.float32)\n",
" weights_p = np.array(layer.blobs[0].data, dtype=np.float32).reshape(\n",
" layer.blobs[0].num, layer.blobs[0].channels, layer.blobs[0].length,\n",
" layer.blobs[0].height, layer.blobs[0].width)[0,0,0,:,:].T\n",
" params.append([weights_p, weights_b])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that all the params are loaded, lets put it to the model."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"model_layers_indx = [0, 2, 4, 5, 7, 8, 10, 11] + [15, 17, 19] #conv + fc\n",
"for i, j in zip(model_layers_indx, range(11)):\n",
" model.layers[i].set_weights(params[j])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the future, we save the model definition to json and also its weights for whatever use we would like to do with them.\n",
"\n",
"You can also download them from here: [model](https://gist.githubusercontent.com/albertomontesg/d8b21a179c1e6cca0480ebdf292c34d2/raw/1e2620258ce619e18d3219cf962a3f0a0ed17093/sports_1M.json) and [weights](https://drive.google.com/open?id=0BzmDUR5_3US0V1hjV3VvREJ3NGs)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import h5py\n",
"\n",
"model.save_weights('sports1M_weights.h5', overwrite=True)\n",
"json_string = model.to_json()\n",
"with open('sports1M_model.json', 'w') as f:\n",
" f.write(json_string)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Testing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For now on, it is highly recommended to reestart the kernel and reload the weights from the saved file. Doing this will only require 300MB instead of 3GB of memory. Also compile the model with a sgd and optimizer. This will not affect on testing due it work for training, but is necessary to compile the model so theano tensor's operations could be done in forward direction."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using Theano backend.\n"
]
}
],
"source": [
"from keras.models import model_from_json\n",
"\n",
"model = model_from_json(open('sports1M_model.json', 'r').read())\n",
"model.load_weights('sports1M_weights.h5')\n",
"model.compile(loss='mean_squared_error', optimizer='sgd')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For testing we are going to load all the labels corresponding to the Sports1M dataset as can be found [here](https://raw.githubusercontent.com/gtoderici/sports-1m-dataset/master/labels.txt)."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total labels: 487\n"
]
}
],
"source": [
"with open('dataset/labels.txt', 'r') as f:\n",
" labels = [line.strip() for line in f.readlines()]\n",
"print('Total labels: {}'.format(len(labels)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For testing we are also going to load a [video](https://www.youtube.com/watch?v=dM06AMFLsrc) from the Sports1M dataset and pass it through the model. For this is required to have [OpenCV3](https://github.com/Itseez/opencv) and [ffmpeg](https://www.ffmpeg.org/) to be able to load videos."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import cv2\n",
"import numpy as np\n",
"\n",
"cap = cv2.VideoCapture('dM06AMFLsrc.mp4')\n",
"\n",
"vid = []\n",
"while True:\n",
" ret, img = cap.read()\n",
" if not ret:\n",
" break\n",
" vid.append(cv2.resize(img, (171, 128)))\n",
"vid = np.array(vid, dtype=np.float32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot a frame of the video. As can be seen, the video correspond to the label: **basquetball**"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x122b014a8>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAU8AAAD/CAYAAABxcFQzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvVuIbNmWnveviIzIyIy8577U7VTVcRc+3bYbG4MtGWHa\nIAmMDOonH2Rk060GP8lYtozpy7vB3WCE/OobbWFwy/ZD68EPojEtgcGgBrtRW63uI7lOnVO1d+2d\ne+c1MiMyMiKWH7K+mX+MnGvFyn2p3KcVA5LMjFhrrnkZ8x//GHPMuYqyLLWUpSxlKUu5m7TuuwJL\nWcpSlvKTKEvwXMpSlrKUV5AleC5lKUtZyivIEjyXspSlLOUVZAmeS1nKUpbyCrIEz6UsZSlLeQV5\na+BZFMW/XRTFPy6K4o+Lovjlt/WcpSxlKUu5DyneRp5nURQtSX8s6c9KeiLpH0j6S2VZ/uM3/rCl\nLGUpS7kHeVvM81+X9IOyLL8oy/JK0v8s6eff0rOWspSlLOVbl7cFnh9K+rH9/+U3ny1lKUtZyp8I\nWbmvBxdFsdwXupSlLOUnQsqyLOJnbws8v5L0sf3/0Tef3ZKiuFWnpbwBKcty2bdvUZb9++pStc5C\nf3rf5q79tvu9qr5vy23/B5I+K4rik6IoupL+kqS/85aetZSlLOVPgDRZvH6XDNZbYZ5lWU6LoviP\nJP1dXQP0f1eW5R++jWctZSlL+cmSoigaAWXVvdIN0PL7PkD1raQqNXrwNzHPd8mS/EmSpVv5dmXZ\nv68m3mcRe3Jue9X9s9lsroy3ORZlWX6rMc9GslS+tyfLvn27suzfZlIUhVZWVrS9va39/X212221\nWi0VRZF+ZrOZptPp3D3xbwdarj89PdXh4aEmk0kC029T7hU8l7KUpfzJlk6no83NTf2pP/Wn9Of/\n/J/X6uqqVldX1el01Ol0tLKyotFopMFgkO5xYEW+YX8qy1JXV1e6uLjQ7//+7+vv//2/r6OjI52f\nn3/rbVuC51KWspQ3LjDFtbU1ffjhh/rggw/04MEDjcdjSdLOzo42NzfV6XR0dHSki4sLSboFmrly\ne72ednZ2dHx8rO985zuaTqc6Pz/P3vc2w5JL8FzKUpby1qTf7+uzzz7T2tqaPv/8c33xxRcaDAb6\n2Z/9Wb333nvqdDr64osv9Ad/8AdqtVpqtVqJYUbBXd/b29PP/MzPaG1tTZ999pmOj4/15MmTbz2U\nsgTPpSxlKW9N2u22er2eZrOZXr58qV6vp93dXX388cfa3t7Wy5cvdX5+rsFgkFinA2cE0el0qm63\nq/Pzc11dXWllZUWt1u2My29jIXwJnktZylLemETQarVaWllZ0XQ61Wg00kcffaRPP/1UP/3TP61W\nq6XT01OVZZkWjOL9uf8nk4mGw6Emk8lCN/9tyhI8l7KUpbxVabVaWl9fV7vd1ne/+11973vf08OH\nD1WWpT755BMdHBzoBz/4gcbjsSaTiaTqlKb7WFWvkiV4LmUpS3lrAjPs9Xra3NzUBx98oA8//FC9\nXk+j0Ui9Xk/9fl9bW1saDAYaDoe3VtvLstRsNtNsNtPKyoo6nU5Kd7pPWYLnUpaylLcmLP70ej3t\n7+9re3tbvV5P4/FYh4eH+vLLLzUcDvXgwQNJ1zFNzwVFLi8vNZlMtLq6qn6/r9XV1XtnoUvwXMpS\n7lF+0vZzv4rQRk+OJ19zMBio1WrpvffeU6vV0tramnZ3d9XpdDQajVSWpVqtls7OzjQcDrWxsaHt\n7W31+31dXV3deo4vOL3t3UdL8FzKUpby1oVFnsvLy8Qu2+22ptOp1tbWtL+/r263q8vLS33ve9/T\n2tqanj9/rul0qk6noxcvXujs7Ezb29taXV1VWZZzifVIBM63KUvwXMpSlvLGJLedsixLjcdjnZ2d\n6eLiQpeXl+p0OtrY2NBHH32k2WymXq+nw8NDnZycaDqdajwe68svv9R4PFav19Pe3p4ePXqk4XCo\n8Xis6XS6dNuXspSmUscmftJd26YS23lfB/s0FWKe4/FYg8FAZ2dnOj8/1/b2tjY2NvThhx+mFfbx\neKyDg4Pkyv/Tf/pPdXFxofX1df3pP/2n9dFHH+nzzz/X6empJM3th+dZ36YswXMpS1nKW5XZbKbL\ny0tdXV3pyZMnWl9f10/91E+p2+3q5ORET5480ZMnT/SjH/1I4/FYo9FIRVFoPB7r9PRUx8fH+vGP\nf6zV1VV98cUXGg6H2tvbu3eDuQTPpbzz8q6xqyUDvrtMJhNNp9O0jXJzc1Pb29u6vLzUwcGB/uAP\n/kBnZ2eSpBcvXqgoCl1eXmo0Gmk0GunJkydqtVp68uSJJGlzc/OtxjeblLkEz6UsZSlvTYqiULvd\nlnQNoE+fPtXZ2ZnW1tb0ySefaGtrS+12W6enp7q8vFRZlvqjP/ojSdfpSe12W51ORwcHB7q4uNBg\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x139fb63c8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"plt.imshow(vid[2000]/256)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now from the video extract a 16 frame clip and crop the center to get a 3x16x112x112 clip."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"X = vid[2000:2016, 8:120, 30:142, :].transpose((3, 0, 1, 2))\n",
"output = model.predict_on_batch(np.array([X]))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x110e579e8>]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x139fb5e80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(output[0][0])"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Position of maximum probability: 367\n",
"Maximum probability: 0.45910\n",
"Corresponding label: basketball\n",
"\n",
"Top 5 probabilities and labels:\n",
"0.45910 basketball\n",
"0.39566 streetball\n",
"0.02090 greco-roman wrestling\n",
"0.01479 freestyle wrestling\n",
"0.01391 slamball\n"
]
}
],
"source": [
"print('Position of maximum probability: {}'.format(output[0].argmax()))\n",
"print('Maximum probability: {:.5f}'.format(max(output[0][0])))\n",
"print('Corresponding label: {}'.format(labels[output[0].argmax()]))\n",
"\n",
"# sort top five predictions from softmax output\n",
"top_inds = output[0][0].argsort()[::-1][:5] # reverse sort and take five largest items\n",
"print('\\nTop 5 probabilities and labels:')\n",
"_ =[print('{:.5f} {}'.format(output[0][0][i], labels[i])) for i in top_inds]"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"As can be seen on the previous results, the classification of the video has been done correctly, giving as output the **basketball** category."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment