Skip to content

Instantly share code, notes, and snippets.

@khanrc
Created March 27, 2017 13:13
Show Gist options
  • Save khanrc/e7744b08e4845f00f12c4bb75947d4e6 to your computer and use it in GitHub Desktop.
Save khanrc/e7744b08e4845f00f12c4bb75947d4e6 to your computer and use it in GitHub Desktop.
Why does BN shows bad performance?
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"import numpy as np\n",
"from tensorflow.examples.tutorials.mnist import input_data"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"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": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def weight_init(shape):\n",
" return tf.truncated_normal(shape, stddev=0.1)\n",
"\n",
"def bias_init(shape):\n",
" return tf.constant(0.1, shape=shape)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# 참조한 image completion 코드에서는 다른 식으로 구현하는데, 그게 더 빠른가?\n",
"# 특이하게 구현함. https://github.com/bamos/dcgan-completion.tensorflow/blob/master/ops.py\n",
"def lrelu(x, leak=0.2):\n",
" return tf.maximum(x, x*leak)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def batch_norm(summed_input, is_training):\n",
"# return summed_input # without BN\n",
" return tf.layers.batch_normalization(summed_input, training=is_training)\n",
"# return tf.contrib.layers.batch_norm(summed_input, center=True, scale=True, is_training=is_training)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"X = tf.placeholder(tf.float32, shape=[None, 784])\n",
"Y = tf.placeholder(tf.float32, shape=[None, 10])\n",
"isTraining = tf.placeholder(tf.bool)\n",
"\n",
"X_img = tf.reshape(X, [-1, 28, 28, 1])\n",
"\n",
"W1 = tf.Variable(weight_init([5, 5, 1, 64]))\n",
"a1 = tf.nn.conv2d(X_img, W1, strides=[1, 2, 2, 1], padding='SAME')\n",
"bn1 = batch_norm(a1, isTraining)\n",
"h1 = lrelu(bn1)\n",
"\n",
"W2 = tf.Variable(weight_init([5, 5, 64, 128]))\n",
"a2 = tf.nn.conv2d(h1, W2, strides=[1, 2, 2, 1], padding='SAME')\n",
"bn2 = batch_norm(a2, isTraining)\n",
"h2 = lrelu(bn2)\n",
"\n",
"W3 = tf.Variable(weight_init([6272, 10]))\n",
"b3 = tf.Variable(bias_init([10]))\n",
"h2_flat = tf.reshape(h2, [-1, 6272])\n",
"\n",
"# last layer activation = logit\n",
"logits = tf.matmul(h2_flat, W3) + b3\n",
"y_prob = tf.nn.softmax(logits)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"loss = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y)\n",
"solver = tf.train.AdamOptimizer().minimize(loss)\n",
"\n",
"pred = tf.argmax(logits, axis=1)\n",
"correction = tf.equal(pred, tf.argmax(Y, axis=1))\n",
"accuracy = tf.reduce_mean(tf.cast(correction, \"float\"))"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def train():\n",
" # moving average 때문에 얘를 해줘야 된다는데 잘 모르겠음\n",
"# update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)\n",
"# with tf.control_dependencies(update_ops):\n",
"# solver = tf.train.AdamOptimizer().minimize(loss)\n",
" \n",
" batch_size = 100\n",
" total_batch = mnist.train.num_examples / batch_size\n",
" history = []\n",
"\n",
" sess = tf.Session()\n",
" sess.run(tf.global_variables_initializer())\n",
"\n",
" for epoch in range(20):\n",
" loss_sum = 0\n",
" for i in range(total_batch / 20):\n",
" batch = mnist.train.next_batch(batch_size)\n",
"\n",
" loss_cur, _ = sess.run([loss, solver], feed_dict={X: batch[0], Y: batch[1], isTraining: True})\n",
" loss_sum += np.average(loss_cur)\n",
"\n",
" # accuracy & loss calc\n",
" train_loss = loss_sum / total_batch\n",
" test_loss = np.average(sess.run(loss, feed_dict={X: mnist.test.images, Y: mnist.test.labels, isTraining: False}))\n",
"\n",
" # calculate accuracy for both train and test\n",
" train_acc = sess.run(accuracy, {X: mnist.train.images[:10000], Y: mnist.train.labels[:10000], isTraining: False})\n",
" test_acc = sess.run(accuracy, {X: mnist.test.images, Y: mnist.test.labels, isTraining: False})\n",
" print(\"[{:3}] train: {:.5f} / test: {:.5f} | [acc] train: {:.4f} / test: {:.4f}\"\n",
" .format(epoch+1, train_loss, test_loss, train_acc, test_acc))\n",
" history.append([train_acc, test_acc])\n",
" \n",
" return history"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1] train: 0.09933 / test: 0.91327 | [acc] train: 0.7063 / test: 0.7109\n",
"[ 2] train: 0.03134 / test: 0.72089 | [acc] train: 0.7733 / test: 0.7688\n",
"[ 3] train: 0.02466 / test: 0.58913 | [acc] train: 0.8204 / test: 0.8157\n",
"[ 4] train: 0.01961 / test: 0.58911 | [acc] train: 0.8132 / test: 0.8059\n",
"[ 5] train: 0.01623 / test: 0.52179 | [acc] train: 0.8423 / test: 0.8364\n",
"[ 6] train: 0.01490 / test: 0.50786 | [acc] train: 0.8437 / test: 0.8377\n",
"[ 7] train: 0.01406 / test: 0.60412 | [acc] train: 0.8132 / test: 0.8066\n",
"[ 8] train: 0.01543 / test: 0.36792 | [acc] train: 0.8970 / test: 0.8918\n",
"[ 9] train: 0.01334 / test: 0.51397 | [acc] train: 0.8392 / test: 0.8344\n",
"[ 10] train: 0.01105 / test: 0.33871 | [acc] train: 0.8963 / test: 0.8996\n",
"[ 11] train: 0.01148 / test: 0.42032 | [acc] train: 0.8746 / test: 0.8715\n",
"[ 12] train: 0.00850 / test: 0.39172 | [acc] train: 0.8764 / test: 0.8757\n",
"[ 13] train: 0.00964 / test: 0.33129 | [acc] train: 0.8993 / test: 0.8964\n",
"[ 14] train: 0.00824 / test: 0.37483 | [acc] train: 0.8709 / test: 0.8752\n",
"[ 15] train: 0.00761 / test: 0.33696 | [acc] train: 0.8985 / test: 0.8976\n",
"[ 16] train: 0.00666 / test: 0.46873 | [acc] train: 0.8461 / test: 0.8455\n",
"[ 17] train: 0.00812 / test: 0.39674 | [acc] train: 0.8618 / test: 0.8708\n",
"[ 18] train: 0.00765 / test: 0.27524 | [acc] train: 0.9177 / test: 0.9147\n",
"[ 19] train: 0.00679 / test: 0.32662 | [acc] train: 0.8976 / test: 0.8992\n",
"[ 20] train: 0.00762 / test: 0.26807 | [acc] train: 0.9156 / test: 0.9176\n"
]
}
],
"source": [
"history_bn = train()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"history = np.array(history)\n",
"history_bn = np.array(history_bn)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f2240343110>"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nkR77/3v+gYDXzbjnAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f2256772590>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history[:, 1], label=\"without bn\")\n",
"plt.plot(history_bn[:, 1], label=\"bn\")\n",
"plt.legend(loc=4)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment