Skip to content

Instantly share code, notes, and snippets.

@prhbrt
Created April 19, 2017 07:23
Show Gist options
  • Save prhbrt/fa151010569e4dc18354296ba4f14efc to your computer and use it in GitHub Desktop.
Save prhbrt/fa151010569e4dc18354296ba4f14efc to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# MNIST vanishing gradients experiment\n",
"\n",
"This experiment tries to check the effects of different weight initializations for the MNIST handwritten digit classification problem. The idea is to create a convolutional neural network, and verify the learnning curves of different initial weight standard deviations.\n",
"\n",
"The expectation was that, as I understand from the [Xavier, Glorot 2010] paper, weight intialization should be important to combat vanishing gradients. However, the experiment shows that this is not the case. Initial weights between $0.0001$ and $1$ standard deviation seem to provide reasonable ($>0.9$ accuracy) results within just $2$ minutes of calculation on a NVidia 960M (laptop-)GPU.\n",
"\n",
"[Xavier, Glorot 2010] http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf\n",
"\n",
"My motivation for this experiment was that the Tensorflow-tutorial on MNIST didn't mention anything about the standard deveation of weight initialization, nor does it use Batch normalization. Hence I was wondering where the $0.1$-values they used came from.\n",
"\n",
"The only reason for this weight-robust performance I can think off at the moment is due to the relative shallow network used."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import time\n",
"from tensorflow.examples.tutorials.mnist import input_data\n",
"import tensorflow as tf\n",
"from tensorflow.python.client import device_lib\n",
"\n",
"import numpy\n",
"import matplotlib.pyplot as pyplot\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load the MNIST data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Extracting MNIST_data/train-images-idx3-ubyte.gz\n",
"Extracting MNIST_data/train-labels-idx1-ubyte.gz\n",
"Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n",
"Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n"
]
}
],
"source": [
"mnist = input_data.read_data_sets('MNIST_data', one_hot=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create weight variables\n",
"(with a certain stddev)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def weight_variable(shape, w=0.1):\n",
" initial = tf.truncated_normal(shape, stddev=w)\n",
" return tf.Variable(initial)\n",
"\n",
"def bias_variable(shape, w=0.1):\n",
" initial = tf.constant(w, shape=shape)\n",
" return tf.Variable(initial)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Building the network"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def conv2d(x, W):\n",
" return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')\n",
"\n",
"def max_pool_2x2(x):\n",
" return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],\n",
" strides=[1, 2, 2, 1], padding='SAME')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def build_network_for_weight_initialization(w):\n",
" \"\"\" Builds a CNN for the MNIST-problem:\n",
" - 32 5x5 kernels convolutional layer with bias and ReLU activations\n",
" - 2x2 maxpooling\n",
" - 64 5x5 kernels convolutional layer with bias and ReLU activations\n",
" - 2x2 maxpooling\n",
" - Fully connected layer with 1024 nodes + bias and ReLU activations\n",
" - dropout\n",
" - Fully connected softmax layer for classification (of 10 classes)\n",
" \n",
" Returns the x, and y placeholders for the train data, the output\n",
" of the network and the dropbout placeholder as a tuple of 4 elements.\n",
" \"\"\"\n",
" x = tf.placeholder(tf.float32, shape=[None, 784])\n",
" y_ = tf.placeholder(tf.float32, shape=[None, 10])\n",
"\n",
" x_image = tf.reshape(x, [-1,28,28,1])\n",
" W_conv1 = weight_variable([5, 5, 1, 32], w)\n",
" b_conv1 = bias_variable([32], w)\n",
"\n",
" h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)\n",
" h_pool1 = max_pool_2x2(h_conv1)\n",
" W_conv2 = weight_variable([5, 5, 32, 64], w)\n",
" b_conv2 = bias_variable([64], w)\n",
"\n",
" h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)\n",
" h_pool2 = max_pool_2x2(h_conv2)\n",
" \n",
" W_fc1 = weight_variable([7 * 7 * 64, 1024], w)\n",
" b_fc1 = bias_variable([1024], w)\n",
"\n",
" h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])\n",
" h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)\n",
" \n",
" keep_prob = tf.placeholder(tf.float32)\n",
" h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)\n",
" \n",
" W_fc2 = weight_variable([1024, 10], w)\n",
" b_fc2 = bias_variable([10], w)\n",
"\n",
" y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2\n",
" \n",
" return (x, y_, y_conv, keep_prob)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Experiment setup\n",
"\n",
"Train network 3 times for several weights between $0.0001$ and $1.0$ and plot the learning curve"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"def evaluate_for_weight_init(w):\n",
" \"\"\" Returns an accuracy learning curve for a network trained on\n",
" 10000 batches of 50 samples. The learning curve has one item\n",
" every 100 batches.\"\"\"\n",
" with tf.Session() as sess:\n",
" x, y_, y_conv, keep_prob = build_network_for_weight_initialization(w)\n",
" cross_entropy = tf.reduce_mean(\n",
" tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))\n",
" train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)\n",
" correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))\n",
" accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n",
" sess.run(tf.global_variables_initializer())\n",
" lr = []\n",
" for _ in range(100):\n",
" for i in range(100):\n",
" batch = mnist.train.next_batch(50)\n",
" train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})\n",
" assert mnist.test.images.shape[0] == 10000\n",
" # This way the accuracy-evaluation fits in my 2GB laptop GPU.\n",
" a = sum(\n",
" accuracy.eval(feed_dict={\n",
" x: mnist.test.images[2000*i:2000*(i+1)],\n",
" y_: mnist.test.labels[2000*i:2000*(i+1)],\n",
" keep_prob: 1.0})\n",
" for i in range(5)) / 5\n",
" lr.append(a)\n",
" return lr"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ws = [0.0001, 0.0003, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1.0]\n",
"# accuracies = [] # Uncomment to reset the experiment"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Run this cell multiple (3) times to get more 'statistical significance'\n",
"accuracies.append([])\n",
"for w in ws:\n",
" accuracies[-1].append(evaluate_for_weight_init(w))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Results\n",
"\n",
"The plot shows that $>0.1$ standard degrades performance significantly, but still the $0.94$ accuracy is OK and not a sign of vanishing or exploding gradient. The "
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\ng8ziTHRx64L2P7aHsWCMJU8uwfQe0yttu4Vd5YEhO7l2qnTb/xqNNQ2tTqdDYmLiAxWPh77gXdcX\nGvHiWn2vPMaDAAAgAElEQVSh0ykZHf08L1zoyZycI7x6dTaDg5sxNfUnkpKZbVCQC4uKomrcpkql\n4tGjR6lWq2kwGNi/f3+uXrGaMa/G8FyHc1ReUDJ7dzajX4zmlWlXmB+YT12BjqlrUhnWL4zKMOXt\n/hXpGD0hmqpkVRVHrBmb0tPZ5PRpeoaE8IfUVB7LzeXbcXF8MiKCcSUlJMlDCgW9QkJYoLvLYmvr\nVrJ7d8lU1c+P9PYmv/yS9PQkFy4kd+8mXVzIf/6R6hcVkW5u5J0Z3DZsIDMejHWXzqDj1P1TKcwX\nuCViS4V1zqWe40L/hRy8eTBdl7lyadBShqWHccSvI+i6zJXdf+5ORYmCoihySeASCvMFTjswjWqd\ntLCfW5rLsPSwB3I+9UVjv6cnTZrEl156iSUlJQwKCqK9vX2l1lYdOnRgWloa09LS2LFjR65bt46k\nZG3l7e3NVatWUaPRcPXq1fT29i5nbVXZvmfPnmVQUBC1Wi1VKhWXLFlCW1tbZlTyva3sekK2tmrc\nX7S6oNMpmZKynMHBHoyNfYN6/e2Hc2npNQYHN2VOzp+MjZ3O+PiZVbZ148aNMlM+pVLJwYMHs2XL\nlvTw8OCEsRPYtWlXBjgEMPbNWOqL68dUs9LzMhjKrJjuZGN6Oj1DQhhXUsJzhYV8LiqKfcLC+HVS\nEr9NSaFrUBB3ZmWxaXAwA/Lzb++oUkl+Dr6+5MmT5C1ROXOGfO01cv9tiyEGBEji4upKtmpFTppU\nr+eWpkzjnpg91BuqvoZqnZrjfh/Hp7Y+xfNp5+m2zI2H4g6Vbc8pyeEre1+h13denHVsFg/HHWax\n5rZ/hSiKPHX9FPNV+eXavZZ3rVIz64fB3Va/BgOZmlr1Po39nn7YaWgDAgLYtWtX2tra0snJiYMG\nDWJQUFCl/X1kxQPACACxAOIBzK5gewsAxwFEAjgJoNkd25YCiAZwGcDKStqv9KI9yhQXX2ZQkCuj\noydQqbxYYZ2CgjMMDHRicLA7dbqCCusoFAq+9tprtLS0ZNu2bfkfv/+wi1sXvvHGG9Tr9Tznf47P\nWT/HgxMOsvR6wznfkeTu7Gx2OHeOFgEBtA4I4JQrV5iqVjOmuJhTr1wpE47KOJWXR8fAQH56h5kk\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fee2e04bad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pyplot.plot(numpy.array(accuracies).mean(0).T)\n",
"pyplot.ylim(0.9, 1)\n",
"pyplot.xlim(0,140)\n",
"pyplot.xlabel('batch (x 100)')\n",
"pyplot.ylabel('test accuracy')\n",
"pyplot.legend(ws)\n",
"None"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment