├── .gitignore ├── 021 Reading Data ├── random.data └── 01 Reading Data From Files.ipynb ├── 001 Hello World ├── 01 Hello World.ipynb └── 02 Numpy to TensorFlow.ipynb ├── 006 Matrix └── 001 Matrix Multiplication.ipynb ├── 003 Basic Mathematical Operations └── 001 Add.ipynb ├── 020 Data Manipulation ├── 05 range_input_producer.ipynb ├── 01 Convert To Tensor .ipynb ├── 03 Embedding Lookup.ipynb ├── 04 strided_slice.ipynb └── 02 Split, Slice, and Join.ipynb ├── 005 Array Operations ├── 0001 One Hot Vector.ipynb └── 002 ReduceMean.ipynb ├── 002 Variable ├── 02 Sharing Variables.ipynb ├── 01 Creation, Initialization, Saving, and Loading.ipynb └── 03 Variable Scope.ipynb ├── 200 MNIST └── 006 MNIST MultiLayer Perceptron.ipynb ├── 202 Logistic Regression with Regularization ├── titanic-logistic-regression-with-tensorflow.ipynb └── test.csv └── 010 Partial Differential Equations └── 01 Partial Differential Equations.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | # Project 2 | .idea 3 | .ipynb_checkpoints 4 | 5 | # Python 6 | *.pyc 7 | *.py~ 8 | 9 | # Dataset 10 | _dataset -------------------------------------------------------------------------------- /021 Reading Data/random.data: -------------------------------------------------------------------------------- 1 | 0,0.11074834488960074,1.7099860350765592,3.687902979662868, 2 | 1,-2.4967768565918362,1.4841636429678278,1.3211551538061077, 3 | 2,-0.4991637754688644,0.11133605098129183,5.089928448454691, 4 | 3,-0.8268802523654445,0.9344967881771236,5.439801533747579, 5 | 4,-0.9756282749554903,0.3363737199665942,3.291773330383719, 6 | 5,-2.8648743769196057,0.0661153649740855,5.03475588662393, 7 | 6,-0.3641233282871058,2.768433756668663,1.5993242291751433, 8 | 7,-0.26399830878806774,0.9900415796011218,2.1772022269390434, 9 | 8,-0.5667247601487606,0.5482186086310598,9.175617279771844, 10 | 9,-0.5170690934842015,2.2641959773355573,5.878481342892184, 11 | -------------------------------------------------------------------------------- /001 Hello World/01 Hello World.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import tensorflow as tf\n", 12 | "from time import sleep" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 2, 18 | "metadata": { 19 | "collapsed": true 20 | }, 21 | "outputs": [], 22 | "source": [ 23 | "hello = tf.constant('Hello, TensorFlow and Anderson!')" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 3, 29 | "metadata": { 30 | "collapsed": false 31 | }, 32 | "outputs": [ 33 | { 34 | "name": "stdout", 35 | "output_type": "stream", 36 | "text": [ 37 | "b'Hello, TensorFlow and Anderson!'\n" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.01, allow_growth=True)\n", 43 | "with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) as sess:\n", 44 | " print(sess.run(hello))" 45 | ] 46 | } 47 | ], 48 | "metadata": { 49 | "kernelspec": { 50 | "display_name": "Python 3", 51 | "language": "python", 52 | "name": "python3" 53 | }, 54 | "language_info": { 55 | "codemirror_mode": { 56 | "name": "ipython", 57 | "version": 3.0 58 | }, 59 | "file_extension": ".py", 60 | "mimetype": "text/x-python", 61 | "name": "python", 62 | "nbconvert_exporter": "python", 63 | "pygments_lexer": "ipython3", 64 | "version": "3.6.0" 65 | } 66 | }, 67 | "nbformat": 4, 68 | "nbformat_minor": 0 69 | } -------------------------------------------------------------------------------- /006 Matrix/001 Matrix Multiplication.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stdout", 12 | "output_type": "stream", 13 | "text": [ 14 | "Populating the interactive namespace from numpy and matplotlib\n" 15 | ] 16 | } 17 | ], 18 | "source": [ 19 | "%pylab inline\n", 20 | "\n", 21 | "import tensorflow as tf\n", 22 | "import numpy as np" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 2, 28 | "metadata": { 29 | "collapsed": false 30 | }, 31 | "outputs": [], 32 | "source": [ 33 | "matrix1 = tf.constant([[1,2,3], [4,5,6]])\n", 34 | "matrix2 = tf.constant([[0, 1], [2, 2], [7, 9]])\n", 35 | "\n", 36 | "product_matrix = tf.matmul(matrix1, matrix2)" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 3, 42 | "metadata": { 43 | "collapsed": false 44 | }, 45 | "outputs": [ 46 | { 47 | "name": "stdout", 48 | "output_type": "stream", 49 | "text": [ 50 | "[[25 32]\n", 51 | " [52 68]]\n" 52 | ] 53 | } 54 | ], 55 | "source": [ 56 | "session = tf.Session()\n", 57 | "result = session.run(product_matrix)\n", 58 | "session.close()\n", 59 | "print result" 60 | ] 61 | } 62 | ], 63 | "metadata": { 64 | "kernelspec": { 65 | "display_name": "Python 2", 66 | "language": "python", 67 | "name": "python2" 68 | }, 69 | "language_info": { 70 | "codemirror_mode": { 71 | "name": "ipython", 72 | "version": 2 73 | }, 74 | "file_extension": ".py", 75 | "mimetype": "text/x-python", 76 | "name": "python", 77 | "nbconvert_exporter": "python", 78 | "pygments_lexer": "ipython2", 79 | "version": "2.7.10" 80 | } 81 | }, 82 | "nbformat": 4, 83 | "nbformat_minor": 0 84 | } 85 | -------------------------------------------------------------------------------- /001 Hello World/02 Numpy to TensorFlow.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "import tensorflow as tf" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 2, 18 | "metadata": { 19 | "collapsed": true 20 | }, 21 | "outputs": [], 22 | "source": [ 23 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.01, allow_growth=True)\n", 24 | "sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 14, 30 | "metadata": { 31 | "collapsed": false 32 | }, 33 | "outputs": [ 34 | { 35 | "name": "stdout", 36 | "output_type": "stream", 37 | "text": [ 38 | "variable: [1 2 3]\n", 39 | "placeholder: [1 2 3]\n" 40 | ] 41 | } 42 | ], 43 | "source": [ 44 | "np_value = np.array([1,2,3])\n", 45 | "\n", 46 | "variable = tf.Variable(np_value)\n", 47 | "placeholder = tf.placeholder('int32')\n", 48 | "\n", 49 | "sess.run(tf.global_variables_initializer())\n", 50 | "print('variable:', sess.run(variable))\n", 51 | "print('placeholder:', sess.run(placeholder, feed_dict={placeholder: np_value}))" 52 | ] 53 | } 54 | ], 55 | "metadata": { 56 | "kernelspec": { 57 | "display_name": "Python 3", 58 | "language": "python", 59 | "name": "python3" 60 | }, 61 | "language_info": { 62 | "codemirror_mode": { 63 | "name": "ipython", 64 | "version": 3 65 | }, 66 | "file_extension": ".py", 67 | "mimetype": "text/x-python", 68 | "name": "python", 69 | "nbconvert_exporter": "python", 70 | "pygments_lexer": "ipython3", 71 | "version": "3.6.0" 72 | } 73 | }, 74 | "nbformat": 4, 75 | "nbformat_minor": 2 76 | } 77 | -------------------------------------------------------------------------------- /003 Basic Mathematical Operations/001 Add.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "import tensorflow as tf" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 16, 18 | "metadata": { 19 | "collapsed": true 20 | }, 21 | "outputs": [], 22 | "source": [ 23 | "X = tf.Variable([[1,2,3], [4,5,6], [7,8,9]])\n", 24 | "Y = tf.Variable(5)\n", 25 | "T = tf.Variable([0, 0, 1])\n", 26 | "\n", 27 | "s = tf.add(X, Y, name='sum')\n" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 21, 33 | "metadata": { 34 | "collapsed": false 35 | }, 36 | "outputs": [ 37 | { 38 | "name": "stdout", 39 | "output_type": "stream", 40 | "text": [ 41 | "X + Y\n", 42 | "[[ 6 7 8]\n", 43 | " [ 9 10 11]\n", 44 | " [12 13 14]]\n", 45 | "\n", 46 | "X + T\n", 47 | "[[ 1 2 4]\n", 48 | " [ 4 5 7]\n", 49 | " [ 7 8 10]]\n" 50 | ] 51 | } 52 | ], 53 | "source": [ 54 | "init_var_op = tf.initialize_all_variables()\n", 55 | "with tf.Session() as sess:\n", 56 | " sess.run(init_var_op)\n", 57 | " \n", 58 | " print 'X + Y' \n", 59 | " print sess.run( tf.add(X, Y, name='sum') )\n", 60 | " \n", 61 | " print \n", 62 | " print 'X + T'\n", 63 | " print sess.run(tf.add(X, T))" 64 | ] 65 | } 66 | ], 67 | "metadata": { 68 | "kernelspec": { 69 | "display_name": "Python 3", 70 | "language": "python", 71 | "name": "python3" 72 | }, 73 | "language_info": { 74 | "codemirror_mode": { 75 | "name": "ipython", 76 | "version": 3 77 | }, 78 | "file_extension": ".py", 79 | "mimetype": "text/x-python", 80 | "name": "python", 81 | "nbconvert_exporter": "python", 82 | "pygments_lexer": "ipython3", 83 | "version": "3.6.0" 84 | } 85 | }, 86 | "nbformat": 4, 87 | "nbformat_minor": 0 88 | } 89 | -------------------------------------------------------------------------------- /020 Data Manipulation/05 range_input_producer.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import tensorflow as tf" 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "### Create InteractiveSession" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 2, 24 | "metadata": { 25 | "collapsed": true 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.001, allow_growth=True)\n", 30 | "sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))\n", 31 | "init_op = tf.global_variables_initializer()\n", 32 | "sess.run(init_op)" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": {}, 38 | "source": [ 39 | "### Examples" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 3, 45 | "metadata": { 46 | "collapsed": false 47 | }, 48 | "outputs": [ 49 | { 50 | "data": { 51 | "text/plain": [ 52 | "array([1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32)" 53 | ] 54 | }, 55 | "execution_count": 3, 56 | "metadata": {}, 57 | "output_type": "execute_result" 58 | } 59 | ], 60 | "source": [ 61 | "x = tf.range(1, 10, name='x')\n", 62 | "slice_end = tf.train.range_input_producer(1).dequeue()\n", 63 | "y = tf.slice(x, [0], [slice_end], name='y')\n", 64 | "sess.run(x)" 65 | ] 66 | } 67 | ], 68 | "metadata": { 69 | "kernelspec": { 70 | "display_name": "Python 3", 71 | "language": "python", 72 | "name": "python3" 73 | }, 74 | "language_info": { 75 | "codemirror_mode": { 76 | "name": "ipython", 77 | "version": 3 78 | }, 79 | "file_extension": ".py", 80 | "mimetype": "text/x-python", 81 | "name": "python", 82 | "nbconvert_exporter": "python", 83 | "pygments_lexer": "ipython3", 84 | "version": "3.6.0" 85 | } 86 | }, 87 | "nbformat": 4, 88 | "nbformat_minor": 2 89 | } 90 | -------------------------------------------------------------------------------- /005 Array Operations/0001 One Hot Vector.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 7, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import tensorflow as tf\n", 12 | "import tflearn\n", 13 | "import numpy as np" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "### One Hot Vector\n", 21 | "\n", 22 | "data 변수값에는 다음과 같이 들어가 있습니다.\n", 23 | "```python\n", 24 | "data = [0, 1, 2, 3, 4.7, 4.1]\n", 25 | "```\n", 26 | "예제에서 one_hot() 함수는 data에 해당하는 index에 7을 넣고, 나머지는 0을 넣습니다.
\n", 27 | "중요하게 볼 부분은 4.7 이나 4.1 둘다 동일하게 4로 취급됩니다." 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 34, 33 | "metadata": { 34 | "collapsed": false 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "x = tf.placeholder('int64', [None], name='x')\n", 39 | "x_one_hot = tf.one_hot(x, 10, 7., 0., name='x_one_hot')\n", 40 | "tf.one_hot?" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 44, 46 | "metadata": { 47 | "collapsed": false 48 | }, 49 | "outputs": [ 50 | { 51 | "name": "stdout", 52 | "output_type": "stream", 53 | "text": [ 54 | "[[ 7. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", 55 | " [ 0. 7. 0. 0. 0. 0. 0. 0. 0. 0.]\n", 56 | " [ 0. 0. 7. 0. 0. 0. 0. 0. 0. 0.]\n", 57 | " [ 0. 0. 0. 7. 0. 0. 0. 0. 0. 0.]\n", 58 | " [ 0. 0. 0. 0. 7. 0. 0. 0. 0. 0.]\n", 59 | " [ 0. 0. 0. 0. 7. 0. 0. 0. 0. 0.]]\n" 60 | ] 61 | } 62 | ], 63 | "source": [ 64 | "with tf.Session() as sess:\n", 65 | " sess.run(tf.initialize_all_variables())\n", 66 | " \n", 67 | " data = [0, 1, 2, 3, 4.7, 4.1]\n", 68 | " print sess.run(x_one_hot, feed_dict={x: data})" 69 | ] 70 | } 71 | ], 72 | "metadata": { 73 | "kernelspec": { 74 | "display_name": "Python 2", 75 | "language": "python", 76 | "name": "python2" 77 | }, 78 | "language_info": { 79 | "codemirror_mode": { 80 | "name": "ipython", 81 | "version": 2 82 | }, 83 | "file_extension": ".py", 84 | "mimetype": "text/x-python", 85 | "name": "python", 86 | "nbconvert_exporter": "python", 87 | "pygments_lexer": "ipython2", 88 | "version": "2.7.12" 89 | } 90 | }, 91 | "nbformat": 4, 92 | "nbformat_minor": 1 93 | } 94 | -------------------------------------------------------------------------------- /002 Variable/02 Sharing Variables.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Sharing Variables\n", 8 | "\n", 9 | "하나의 Model에 관련된 Variables을 공유하기 위해서는 dictionary에 넣어서 다른곳에 쓰일경우 해당 dictionary자체를 공유합니다.
\n", 10 | "즉 Model에 있는 여러가지 variables각자 따로따로 관리하지 말고, dictionary에 다 넣을것. " 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "metadata": { 17 | "collapsed": true 18 | }, 19 | "outputs": [], 20 | "source": [ 21 | "import tensorflow as tf" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 5, 27 | "metadata": { 28 | "collapsed": false 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "input_images = tf.placeholder(\"float\", [None, 5, 32, 32])\n", 33 | "\n", 34 | "def create_model(input_images):\n", 35 | " conv1_weights = tf.Variable(tf.random_normal([5, 5, 32, 32]), name=\"conv1_weights\")\n", 36 | " conv1_biases = tf.Variable(tf.zeros([32]), name=\"conv1_biases\")\n", 37 | " conv1 = tf.nn.conv2d(input_images, conv1_weights, strides=[1, 1, 1, 1], padding='SAME')\n", 38 | " relu1 = tf.nn.relu(conv1 + conv1_biases)\n", 39 | "\n", 40 | " conv2_weights = tf.Variable(tf.random_normal([5, 5, 32, 32]), name=\"conv2_weights\")\n", 41 | " conv2_biases = tf.Variable(tf.zeros([32]), name=\"conv2_biases\")\n", 42 | " conv2 = tf.nn.conv2d(relu1, conv2_weights, strides=[1, 1, 1, 1], padding='SAME')\n", 43 | " \n", 44 | " model = {\n", 45 | " 'conv1_weights': conv1_weights, \n", 46 | " 'conv1_biases': conv1_biases, \n", 47 | " 'conv1': conv1,\n", 48 | " 'relu1': relu1,\n", 49 | " \n", 50 | " 'conv2_weights': conv2_weights,\n", 51 | " 'conv2_biases': conv2_biases,\n", 52 | " 'conv2': conv2\n", 53 | " }\n", 54 | " return model\n", 55 | "\n", 56 | "model = create_model(input_images)" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "kernelspec": { 62 | "display_name": "Python 3", 63 | "language": "python", 64 | "name": "python3" 65 | }, 66 | "language_info": { 67 | "codemirror_mode": { 68 | "name": "ipython", 69 | "version": 3 70 | }, 71 | "file_extension": ".py", 72 | "mimetype": "text/x-python", 73 | "name": "python", 74 | "nbconvert_exporter": "python", 75 | "pygments_lexer": "ipython3", 76 | "version": "3.6.0" 77 | } 78 | }, 79 | "nbformat": 4, 80 | "nbformat_minor": 2 81 | } 82 | -------------------------------------------------------------------------------- /020 Data Manipulation/01 Convert To Tensor .ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import tensorflow as tf \n", 12 | "import numpy as np" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "# Convert To Tensor \n", 20 | "\n", 21 | "tf.convert_to_tensor(value, dtype=None, name=None, preferred_dtype=None)" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "### Example" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 6, 34 | "metadata": { 35 | "collapsed": false 36 | }, 37 | "outputs": [], 38 | "source": [ 39 | "def foo(arg):\n", 40 | " arg = tf.convert_to_tensor(arg, dtype='float32')\n", 41 | " return tf.matmul(arg, arg) + arg\n", 42 | "\n", 43 | "v1 = foo(tf.constant([[1.0, 2.0], [3.0, 4.0]]))\n", 44 | "v2 = foo([[1.0, 2.0], [3.0, 4.0]])\n", 45 | "v3 = foo(np.array([[1.0, 2.0], [3.0, 4.0]]))" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 12, 51 | "metadata": { 52 | "collapsed": false 53 | }, 54 | "outputs": [ 55 | { 56 | "name": "stdout", 57 | "output_type": "stream", 58 | "text": [ 59 | "[[ 8. 12.]\n", 60 | " [ 18. 26.]]\n", 61 | "\n", 62 | "[[ 8. 12.]\n", 63 | " [ 18. 26.]]\n", 64 | "\n", 65 | "[[ 8. 12.]\n", 66 | " [ 18. 26.]]\n", 67 | "\n" 68 | ] 69 | } 70 | ], 71 | "source": [ 72 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.4, allow_growth=True)\n", 73 | "with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) as sess:\n", 74 | " r1, r2, r3 = sess.run([v1, v2, v3])\n", 75 | " \n", 76 | " print(r1, end='\\n\\n')\n", 77 | " print(r2, end='\\n\\n')\n", 78 | " print(r3, end='\\n\\n')" 79 | ] 80 | } 81 | ], 82 | "metadata": { 83 | "kernelspec": { 84 | "display_name": "Python 3", 85 | "language": "python", 86 | "name": "python3" 87 | }, 88 | "language_info": { 89 | "codemirror_mode": { 90 | "name": "ipython", 91 | "version": 3.0 92 | }, 93 | "file_extension": ".py", 94 | "mimetype": "text/x-python", 95 | "name": "python", 96 | "nbconvert_exporter": "python", 97 | "pygments_lexer": "ipython3", 98 | "version": "3.6.0" 99 | } 100 | }, 101 | "nbformat": 4, 102 | "nbformat_minor": 0 103 | } -------------------------------------------------------------------------------- /020 Data Manipulation/03 Embedding Lookup.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import tensorflow as tf" 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "metadata": {}, 17 | "source": [ 18 | "### Create a Session" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 6, 24 | "metadata": { 25 | "collapsed": true 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "init_op = tf.global_variables_initializer()\n", 30 | "\n", 31 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.001, allow_growth=True)\n", 32 | "sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))\n", 33 | "sess.run(init_op)" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "### embedding_lookup\n", 41 | "\n", 42 | "params tensor에서 ids를 index해서 찾아낸 elements를 리턴합니다.
\n", 43 | "tf.gather와 유사합니다. \n", 44 | "\n", 45 | "또한 emgedding_lookup은 partition_strategy에 따라서 lookup 을 합니다. \n", 46 | "\n", 47 | "$$ \\begin{bmatrix} 100 & 200 \\\\ 300 & 400 \\end{bmatrix} $$\n", 48 | "\n", 49 | "에서 Index를 붙이면 다음과 같습니다. \n", 50 | "\n", 51 | "$$ \\begin{bmatrix} 0 & 2 \\\\ 1 & 3 \\end{bmatrix} $$" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 20, 57 | "metadata": { 58 | "collapsed": false 59 | }, 60 | "outputs": [ 61 | { 62 | "name": "stdout", 63 | "output_type": "stream", 64 | "text": [ 65 | "embedding_lookup(params, ids):\t [10 10 30]\n", 66 | "tf.gather(params, ids): \t [10 10 30]\n" 67 | ] 68 | } 69 | ], 70 | "source": [ 71 | "params = tf.constant([10, 20, 30, 40], dtype=tf.int32, name='params')\n", 72 | "ids = tf.constant([0, 0, 2])\n", 73 | "\n", 74 | "print('embedding_lookup(params, ids):\\t', tf.nn.embedding_lookup(params, ids).eval())\n", 75 | "print('tf.gather(params, ids): \\t', tf.gather(params, ids).eval())" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 48, 81 | "metadata": { 82 | "collapsed": false 83 | }, 84 | "outputs": [ 85 | { 86 | "name": "stdout", 87 | "output_type": "stream", 88 | "text": [ 89 | "[100 300 200 400 100]\n" 90 | ] 91 | } 92 | ], 93 | "source": [ 94 | "params1 = tf.constant([100,200])\n", 95 | "params2 = tf.constant([300,400])\n", 96 | "ids = tf.constant([0, 1, 2, 3, 0])\n", 97 | "print(tf.nn.embedding_lookup([params1, params2], ids).eval())" 98 | ] 99 | } 100 | ], 101 | "metadata": { 102 | "kernelspec": { 103 | "display_name": "Python 3", 104 | "language": "python", 105 | "name": "python3" 106 | }, 107 | "language_info": { 108 | "codemirror_mode": { 109 | "name": "ipython", 110 | "version": 3 111 | }, 112 | "file_extension": ".py", 113 | "mimetype": "text/x-python", 114 | "name": "python", 115 | "nbconvert_exporter": "python", 116 | "pygments_lexer": "ipython3", 117 | "version": "3.6.0" 118 | } 119 | }, 120 | "nbformat": 4, 121 | "nbformat_minor": 2 122 | } 123 | -------------------------------------------------------------------------------- /002 Variable/01 Creation, Initialization, Saving, and Loading.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Variables \n", 8 | "\n", 9 | "Variables은 Model을 training시에 parameters(weights)들을 update하거나 갖고 있을수 있습니다.
\n", 10 | "In-memory buffers이며 명시적으로 초기화시켜줘야 하며 저장하거나 불러올수 있습니다. " 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "metadata": { 17 | "collapsed": true 18 | }, 19 | "outputs": [], 20 | "source": [ 21 | "import tensorflow as tf" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "### Creation\n", 29 | "\n", 30 | "Variables을 생성할때, Tensor를 초기값으로 전달해야 합니다. " 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 2, 36 | "metadata": { 37 | "collapsed": true 38 | }, 39 | "outputs": [], 40 | "source": [ 41 | "weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name='weights')\n", 42 | "biases = tf.Variable(tf.zeros([200]), name='biases')" 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "### Device Placement\n", 50 | "\n", 51 | "Variables는 특정 디바이스를 지정할수 있습니다.
\n", 52 | "하지만 v.assign() operators처럼 mutate하는 것들은 반드시 같은 device안에 존재해야 합니다. " 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 3, 58 | "metadata": { 59 | "collapsed": true 60 | }, 61 | "outputs": [], 62 | "source": [ 63 | "with tf.device('/cpu:0'):\n", 64 | " cpu_v = tf.Variable(tf.random_normal([784, 200], stddev=0.5), name='cpu_vector')\n", 65 | " \n", 66 | "with tf.device('/gpu:0'):\n", 67 | " gpu_v = tf.Variable(tf.random_normal([784, 200], stddev=0.5), name='gpu_vector')" 68 | ] 69 | }, 70 | { 71 | "cell_type": "markdown", 72 | "metadata": {}, 73 | "source": [ 74 | "### Initialization\n", 75 | "\n", 76 | "Variable initializers 는 반드시 명시적으로 실행되야 합니다. " 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 7, 82 | "metadata": { 83 | "collapsed": false 84 | }, 85 | "outputs": [], 86 | "source": [ 87 | "init_op = tf.global_variables_initializer()\n", 88 | "\n", 89 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.001, allow_growth=True)\n", 90 | "sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))\n", 91 | "sess.run(init_op)" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": {}, 97 | "source": [ 98 | "### Saving Variables" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": 9, 104 | "metadata": { 105 | "collapsed": false 106 | }, 107 | "outputs": [ 108 | { 109 | "data": { 110 | "text/plain": [ 111 | "'/tmp/variable_test.ckpt'" 112 | ] 113 | }, 114 | "execution_count": 9, 115 | "metadata": {}, 116 | "output_type": "execute_result" 117 | } 118 | ], 119 | "source": [ 120 | "saver =tf.train.Saver()\n", 121 | "saver.save(sess, '/tmp/variable_test.ckpt')" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "metadata": {}, 127 | "source": [ 128 | "### Restoring Variables\n", 129 | "\n", 130 | "Restoring 할때는 initialization을 해줄 필요가 없습니다. " 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": 11, 136 | "metadata": { 137 | "collapsed": true 138 | }, 139 | "outputs": [], 140 | "source": [ 141 | "saver.restore(sess, '/tmp/variable_test.ckpt')" 142 | ] 143 | }, 144 | { 145 | "cell_type": "markdown", 146 | "metadata": {}, 147 | "source": [ 148 | "### Variables to Numpy Array\n", 149 | "\n", 150 | "그냥 Run 실행시키면 됨" 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": 13, 156 | "metadata": { 157 | "collapsed": false 158 | }, 159 | "outputs": [ 160 | { 161 | "data": { 162 | "text/plain": [ 163 | "array([[ 0.79427677, -0.70706618, -0.43262488, ..., 0.01068686,\n", 164 | " -0.085705 , -0.31455702],\n", 165 | " [-0.04460101, -0.02016782, -0.50548464, ..., -0.42810267,\n", 166 | " 0.20497903, -0.28702372],\n", 167 | " [-0.62877887, -0.51519108, 0.63525504, ..., 0.15575312,\n", 168 | " -0.09617887, 0.15659091],\n", 169 | " ..., \n", 170 | " [ 0.31423798, 0.09636419, -0.45797321, ..., 0.42629337,\n", 171 | " -0.85066891, 0.59309483],\n", 172 | " [ 0.19040468, 0.2698268 , -0.12512121, ..., 0.13218126,\n", 173 | " -0.6251471 , -0.35833758],\n", 174 | " [ 0.92575026, 0.0520521 , 0.03383748, ..., -0.25407696,\n", 175 | " -0.29910761, 0.25049213]], dtype=float32)" 176 | ] 177 | }, 178 | "execution_count": 13, 179 | "metadata": {}, 180 | "output_type": "execute_result" 181 | } 182 | ], 183 | "source": [ 184 | "sess.run(weights)" 185 | ] 186 | } 187 | ], 188 | "metadata": { 189 | "kernelspec": { 190 | "display_name": "Python 3", 191 | "language": "python", 192 | "name": "python3" 193 | }, 194 | "language_info": { 195 | "codemirror_mode": { 196 | "name": "ipython", 197 | "version": 3.0 198 | }, 199 | "file_extension": ".py", 200 | "mimetype": "text/x-python", 201 | "name": "python", 202 | "nbconvert_exporter": "python", 203 | "pygments_lexer": "ipython3", 204 | "version": "3.6.0" 205 | } 206 | }, 207 | "nbformat": 4, 208 | "nbformat_minor": 0 209 | } -------------------------------------------------------------------------------- /002 Variable/03 Variable Scope.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "deletable": true, 7 | "editable": true 8 | }, 9 | "source": [ 10 | "# Variable Scope\n", 11 | "\n", 12 | "Variable Scope mechanism은 2개의 함수로 구성되어 있습니다. \n", 13 | "\n", 14 | "* tf.get_variable(, , ): Creates or returns a variable with a given name.\n", 15 | "* tf.variable_scope(): Manages namespaces for names passed to tf.get_variable().\n", 16 | "\n", 17 | "tf.get_variable 의 경우, 없으면 만들기 때문에 direct로 특정 값을 보내지 않고, initializer를 passing 합니다.
\n", 18 | "initializers 는 예를들어 다음의 것들이 있습니다. \n", 19 | "\n", 20 | "* tf.constant_initializer(value) initializes everything to the provided value,\n", 21 | "* tf.random_uniform_initializer(a, b) initializes uniformly from [a, b],\n", 22 | "* tf.random_normal_initializer(mean, stddev) initializes from the normal distribution with the given mean and standard deviation." 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": { 28 | "deletable": true, 29 | "editable": true 30 | }, 31 | "source": [ 32 | "### 예제 \n", 33 | "\n", 34 | "아래의 예제에서 convolution 2개를 만들고자 합니다.
\n", 35 | "이때 conv_relu에 사용된 이름들 'weights', 'biases', 등이 동일하기 때문에, conv_relu함수를 2번 사용할수가 없습니다.
\n", 36 | "이때 이름을 구분짓기 위해서 tf.variable_scope을 사용합니다. " 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 1, 42 | "metadata": { 43 | "collapsed": true, 44 | "deletable": true, 45 | "editable": true 46 | }, 47 | "outputs": [], 48 | "source": [ 49 | "import tensorflow as tf" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 2, 55 | "metadata": { 56 | "collapsed": false, 57 | "deletable": true, 58 | "editable": true 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "input_images = tf.placeholder(\"float\", [None, 5, 32, 32])\n", 63 | "\n", 64 | "def conv_relu(input_layer, kernel_shape, bias_shape):\n", 65 | " weights = tf.get_variable('weights', kernel_shape, initializer=tf.random_normal_initializer())\n", 66 | " biases = tf.get_variable('biases', bias_shape, initializer=tf.constant_initializer(0.0))\n", 67 | " conv = tf.nn.conv2d(input_layer, weights, strides=[1,1,1,1], padding='SAME')\n", 68 | " return tf.nn.relu(conv + biases)\n", 69 | "\n", 70 | "def create_model(input_layer):\n", 71 | " with tf.variable_scope('conv1'):\n", 72 | " relu1 = conv_relu(input_layer, [5, 5, 32, 32], [32])\n", 73 | " \n", 74 | " with tf.variable_scope('conv2'):\n", 75 | " relu2 = conv_relu(relu1, [5, 5, 32, 32], [32])\n", 76 | " \n", 77 | " return relu2\n", 78 | "\n", 79 | "model = create_model(input_images)" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 3, 85 | "metadata": { 86 | "collapsed": false 87 | }, 88 | "outputs": [ 89 | { 90 | "data": { 91 | "text/plain": [ 92 | "'conv2/Relu'" 93 | ] 94 | }, 95 | "execution_count": 3, 96 | "metadata": {}, 97 | "output_type": "execute_result" 98 | } 99 | ], 100 | "source": [ 101 | "model.op.name" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": { 107 | "deletable": true, 108 | "editable": true 109 | }, 110 | "source": [ 111 | "하지만 model = create_model(input_images) 를 2번 실행시키면 ValueError Exception이 일어나게 됩니다.
\n", 112 | "tf.get_variable()은 이미 존재하는 variables들을 감지하고 실수로 공유되지 않도록 막습니다.
\n", 113 | "때문에 저런 에러가 일어난 것이고, share가 필요하다면 reuse_variables()를 사용합니다. " 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 3, 119 | "metadata": { 120 | "collapsed": false, 121 | "deletable": true, 122 | "editable": true 123 | }, 124 | "outputs": [], 125 | "source": [ 126 | "with tf.variable_scope('image_filters') as scope:\n", 127 | " model2 = create_model(input_images)\n", 128 | " scope.reuse_variables()\n", 129 | " model3 = create_model(input_images)" 130 | ] 131 | }, 132 | { 133 | "cell_type": "markdown", 134 | "metadata": {}, 135 | "source": [ 136 | "### Capturing Variable Scope\n", 137 | "\n", 138 | "scope자체를 공유할수도 있습니다. " 139 | ] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "execution_count": 4, 144 | "metadata": { 145 | "collapsed": false 146 | }, 147 | "outputs": [], 148 | "source": [ 149 | "with tf.variable_scope(\"foo\") as foo_scope:\n", 150 | " v = tf.get_variable(\"v\", [1])\n", 151 | "\n", 152 | "with tf.variable_scope(foo_scope):\n", 153 | " w = tf.get_variable(\"w\", [1])\n", 154 | "\n", 155 | "with tf.variable_scope(foo_scope, reuse=True):\n", 156 | " v1 = tf.get_variable(\"v\", [1])\n", 157 | " w1 = tf.get_variable(\"w\", [1])\n", 158 | " \n", 159 | "assert v1 is v\n", 160 | "assert w1 is w" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 5, 166 | "metadata": { 167 | "collapsed": false 168 | }, 169 | "outputs": [ 170 | { 171 | "name": "stdout", 172 | "output_type": "stream", 173 | "text": [ 174 | "v.name: foo/v\n", 175 | "w.name: foo/w\n" 176 | ] 177 | } 178 | ], 179 | "source": [ 180 | "print('v.name:', v.op.name)\n", 181 | "print('w.name:', w.op.name)" 182 | ] 183 | } 184 | ], 185 | "metadata": { 186 | "kernelspec": { 187 | "display_name": "Python 3", 188 | "language": "python", 189 | "name": "python3" 190 | }, 191 | "language_info": { 192 | "codemirror_mode": { 193 | "name": "ipython", 194 | "version": 3 195 | }, 196 | "file_extension": ".py", 197 | "mimetype": "text/x-python", 198 | "name": "python", 199 | "nbconvert_exporter": "python", 200 | "pygments_lexer": "ipython3", 201 | "version": "3.6.0" 202 | } 203 | }, 204 | "nbformat": 4, 205 | "nbformat_minor": 2 206 | } 207 | -------------------------------------------------------------------------------- /200 MNIST/006 MNIST MultiLayer Perceptron.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "Extracting /tmp/data/train-images-idx3-ubyte.gz\n", 13 | "Extracting /tmp/data/train-labels-idx1-ubyte.gz\n", 14 | "Extracting /tmp/data/t10k-images-idx3-ubyte.gz\n", 15 | "Extracting /tmp/data/t10k-labels-idx1-ubyte.gz\n" 16 | ] 17 | } 18 | ], 19 | "source": [ 20 | "# Import MINST data\n", 21 | "from tensorflow.examples.tutorials.mnist import input_data\n", 22 | "mnist = input_data.read_data_sets(\"/tmp/data/\", one_hot=True)\n", 23 | "\n", 24 | "import tensorflow as tf" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 2, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "# Parameters\n", 34 | "learning_rate = 0.001\n", 35 | "training_epochs = 15\n", 36 | "batch_size = 100\n", 37 | "display_step = 1\n", 38 | "\n", 39 | "# Network Parameters\n", 40 | "n_hidden_1 = 256 # 1st layer number of features\n", 41 | "n_hidden_2 = 256 # 2nd layer number of features\n", 42 | "n_input = 784 # MNIST data input (img shape: 28*28)\n", 43 | "n_classes = 10 # MNIST total classes (0-9 digits)\n", 44 | "\n", 45 | "# tf Graph input\n", 46 | "x = tf.placeholder(\"float\", [None, n_input])\n", 47 | "y = tf.placeholder(\"float\", [None, n_classes])" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 3, 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "# Create model\n", 57 | "def multilayer_perceptron(x, weights, biases):\n", 58 | " # Hidden layer with RELU activation\n", 59 | " layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])\n", 60 | " layer_1 = tf.nn.relu(layer_1)\n", 61 | " # Hidden layer with RELU activation\n", 62 | " layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])\n", 63 | " layer_2 = tf.nn.relu(layer_2)\n", 64 | " # Output layer with linear activation\n", 65 | " out_layer = tf.matmul(layer_2, weights['out']) + biases['out']\n", 66 | " return out_layer" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 4, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [ 75 | "# Store layers weight & bias\n", 76 | "weights = {\n", 77 | " 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),\n", 78 | " 'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),\n", 79 | " 'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))\n", 80 | "}\n", 81 | "biases = {\n", 82 | " 'b1': tf.Variable(tf.random_normal([n_hidden_1])),\n", 83 | " 'b2': tf.Variable(tf.random_normal([n_hidden_2])),\n", 84 | " 'out': tf.Variable(tf.random_normal([n_classes]))\n", 85 | "}\n", 86 | "\n", 87 | "# Construct model\n", 88 | "pred = multilayer_perceptron(x, weights, biases)\n", 89 | "\n", 90 | "# Define loss and optimizer\n", 91 | "cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=pred))\n", 92 | "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)\n", 93 | "\n", 94 | "# Initializing the variables\n", 95 | "init = tf.global_variables_initializer()" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 5, 101 | "metadata": {}, 102 | "outputs": [ 103 | { 104 | "name": "stdout", 105 | "output_type": "stream", 106 | "text": [ 107 | "Epoch: 0001 cost= 199.156035394\n", 108 | "Epoch: 0002 cost= 43.510258431\n", 109 | "Epoch: 0003 cost= 26.776377823\n", 110 | "Epoch: 0004 cost= 18.127787209\n", 111 | "Epoch: 0005 cost= 13.059884647\n", 112 | "Epoch: 0006 cost= 9.537693703\n", 113 | "Epoch: 0007 cost= 6.947895438\n", 114 | "Epoch: 0008 cost= 5.192850764\n", 115 | "Epoch: 0009 cost= 3.830189170\n", 116 | "Epoch: 0010 cost= 2.755372774\n", 117 | "Epoch: 0011 cost= 1.976166025\n", 118 | "Epoch: 0012 cost= 1.491869799\n", 119 | "Epoch: 0013 cost= 1.114585339\n", 120 | "Epoch: 0014 cost= 0.874315661\n", 121 | "Epoch: 0015 cost= 0.677450839\n", 122 | "batch_y: \n", 123 | "Optimization Finished!\n", 124 | "Accuracy: 0.9463\n" 125 | ] 126 | } 127 | ], 128 | "source": [ 129 | "# Launch the graph\n", 130 | "with tf.Session() as sess:\n", 131 | " sess.run(init)\n", 132 | "\n", 133 | " # Training cycle\n", 134 | " for epoch in range(training_epochs):\n", 135 | " avg_cost = 0.\n", 136 | " total_batch = int(mnist.train.num_examples/batch_size)\n", 137 | " # Loop over all batches\n", 138 | " for i in range(total_batch):\n", 139 | " batch_x, batch_y = mnist.train.next_batch(batch_size)\n", 140 | " # Run optimization op (backprop) and cost op (to get loss value)\n", 141 | " \n", 142 | " _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,\n", 143 | " y: batch_y})\n", 144 | " # Compute average loss\n", 145 | " avg_cost += c / total_batch\n", 146 | " # Display logs per epoch step\n", 147 | " if epoch % display_step == 0:\n", 148 | " print \"Epoch:\", '%04d' % (epoch+1), \"cost=\", \\\n", 149 | " \"{:.9f}\".format(avg_cost)\n", 150 | " print 'batch_y: '\n", 151 | " print \"Optimization Finished!\"\n", 152 | "\n", 153 | " # Test model\n", 154 | " correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))\n", 155 | " # Calculate accuracy\n", 156 | " accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\n", 157 | " print \"Accuracy:\", accuracy.eval({x: mnist.test.images, y: mnist.test.labels})" 158 | ] 159 | } 160 | ], 161 | "metadata": { 162 | "kernelspec": { 163 | "display_name": "Python 3", 164 | "language": "python", 165 | "name": "python3" 166 | }, 167 | "language_info": { 168 | "codemirror_mode": { 169 | "name": "ipython", 170 | "version": 3 171 | }, 172 | "file_extension": ".py", 173 | "mimetype": "text/x-python", 174 | "name": "python", 175 | "nbconvert_exporter": "python", 176 | "pygments_lexer": "ipython3", 177 | "version": "3.6.1" 178 | } 179 | }, 180 | "nbformat": 4, 181 | "nbformat_minor": 1 182 | } 183 | -------------------------------------------------------------------------------- /005 Array Operations/002 ReduceMean.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import tensorflow as tf\n", 12 | "import numpy as np" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 4, 18 | "metadata": { 19 | "collapsed": true 20 | }, 21 | "outputs": [], 22 | "source": [ 23 | "init_op = tf.global_variables_initializer()\n", 24 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.001, allow_growth=True)\n", 25 | "sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))\n", 26 | "sess.run(init_op)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 3, 32 | "metadata": { 33 | "collapsed": false 34 | }, 35 | "outputs": [ 36 | { 37 | "data": { 38 | "text/plain": [ 39 | "(3, 1, 4)" 40 | ] 41 | }, 42 | "execution_count": 3, 43 | "metadata": {}, 44 | "output_type": "execute_result" 45 | } 46 | ], 47 | "source": [ 48 | "data = np.array([[[1, 2, 3, 4]], \n", 49 | " [[5, 6, 7, 8]], \n", 50 | " [[0, 10, 20, 30]]])" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 20, 56 | "metadata": { 57 | "collapsed": false 58 | }, 59 | "outputs": [ 60 | { 61 | "data": { 62 | "text/plain": [ 63 | "[8.0,\n", 64 | " array([[ 2., 6., 10., 14.]], dtype=float32),\n", 65 | " array([[ 1., 2., 3., 4.],\n", 66 | " [ 5., 6., 7., 8.],\n", 67 | " [ 0., 10., 20., 30.]], dtype=float32),\n", 68 | " array([[ 2.5],\n", 69 | " [ 6.5],\n", 70 | " [ 15. ]], dtype=float32),\n", 71 | " array([ 2.5, 6.5, 15. ], dtype=float32)]" 72 | ] 73 | }, 74 | "execution_count": 20, 75 | "metadata": {}, 76 | "output_type": "execute_result" 77 | } 78 | ], 79 | "source": [ 80 | "inputs = tf.placeholder('float32', shape=(None, None, 4))\n", 81 | "mean1 = tf.reduce_mean(inputs)\n", 82 | "mean2 = tf.reduce_mean(inputs, reduction_indices=[0])\n", 83 | "mean3 = tf.reduce_mean(inputs, reduction_indices=[1])\n", 84 | "mean4 = tf.reduce_mean(inputs, reduction_indices=[2])\n", 85 | "mean5 = tf.reduce_mean(inputs, reduction_indices=[1, 2])\n", 86 | "\n", 87 | "init_op = tf.global_variables_initializer()\n", 88 | "sess.run(init_op)\n", 89 | "\n", 90 | "sess.run([mean1, mean2, mean3, mean4, mean5], feed_dict={inputs: data})" 91 | ] 92 | }, 93 | { 94 | "cell_type": "markdown", 95 | "metadata": {}, 96 | "source": [ 97 | "## reduce_mean(inputs)\n", 98 | "\n", 99 | "그냥 reduce_mean 사용시, 전체 elements들의 평균을 구합니다.
\n", 100 | "다음과 동일합니다. \n", 101 | "$$ \\frac{1+2+3+4+5+6+7+8+10+20+30}{12} $$" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 13, 107 | "metadata": { 108 | "collapsed": false 109 | }, 110 | "outputs": [ 111 | { 112 | "data": { 113 | "text/plain": [ 114 | "8.0" 115 | ] 116 | }, 117 | "execution_count": 13, 118 | "metadata": {}, 119 | "output_type": "execute_result" 120 | } 121 | ], 122 | "source": [ 123 | "data.mean()" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 14, 129 | "metadata": { 130 | "collapsed": false 131 | }, 132 | "outputs": [ 133 | { 134 | "data": { 135 | "text/plain": [ 136 | "8.0" 137 | ] 138 | }, 139 | "execution_count": 14, 140 | "metadata": {}, 141 | "output_type": "execute_result" 142 | } 143 | ], 144 | "source": [ 145 | "sess.run(mean1, feed_dict={inputs: data})" 146 | ] 147 | }, 148 | { 149 | "cell_type": "markdown", 150 | "metadata": {}, 151 | "source": [ 152 | "## reduce_mean(inputs, reduction_indices=[0])\n", 153 | "\n", 154 | "columns들의 평균을 구합니다. " 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 15, 160 | "metadata": { 161 | "collapsed": false 162 | }, 163 | "outputs": [ 164 | { 165 | "data": { 166 | "text/plain": [ 167 | "array([[ 2., 6., 10., 14.]])" 168 | ] 169 | }, 170 | "execution_count": 15, 171 | "metadata": {}, 172 | "output_type": "execute_result" 173 | } 174 | ], 175 | "source": [ 176 | "data.mean(axis=0)" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "execution_count": 16, 182 | "metadata": { 183 | "collapsed": false 184 | }, 185 | "outputs": [ 186 | { 187 | "data": { 188 | "text/plain": [ 189 | "array([[ 2., 6., 10., 14.]], dtype=float32)" 190 | ] 191 | }, 192 | "execution_count": 16, 193 | "metadata": {}, 194 | "output_type": "execute_result" 195 | } 196 | ], 197 | "source": [ 198 | "sess.run(mean2, feed_dict={inputs: data})" 199 | ] 200 | }, 201 | { 202 | "cell_type": "markdown", 203 | "metadata": {}, 204 | "source": [ 205 | "## reduce_mean(inputs, reduction_indices=[2])\n", 206 | "\n", 207 | "rows의 평균을 구합니다." 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": 17, 213 | "metadata": { 214 | "collapsed": false 215 | }, 216 | "outputs": [ 217 | { 218 | "data": { 219 | "text/plain": [ 220 | "array([[ 2.5],\n", 221 | " [ 6.5],\n", 222 | " [ 15. ]])" 223 | ] 224 | }, 225 | "execution_count": 17, 226 | "metadata": {}, 227 | "output_type": "execute_result" 228 | } 229 | ], 230 | "source": [ 231 | "data.mean(axis=2)" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 18, 237 | "metadata": { 238 | "collapsed": false 239 | }, 240 | "outputs": [ 241 | { 242 | "data": { 243 | "text/plain": [ 244 | "array([[ 2.5],\n", 245 | " [ 6.5],\n", 246 | " [ 15. ]], dtype=float32)" 247 | ] 248 | }, 249 | "execution_count": 18, 250 | "metadata": {}, 251 | "output_type": "execute_result" 252 | } 253 | ], 254 | "source": [ 255 | "sess.run(mean4, feed_dict={inputs: data})" 256 | ] 257 | }, 258 | { 259 | "cell_type": "markdown", 260 | "metadata": {}, 261 | "source": [ 262 | "## reduce_mean(inputs, reduction_indices=[1, 2])" 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 25, 268 | "metadata": { 269 | "collapsed": false 270 | }, 271 | "outputs": [ 272 | { 273 | "data": { 274 | "text/plain": [ 275 | "array([ 2.5, 6.5, 15. ])" 276 | ] 277 | }, 278 | "execution_count": 25, 279 | "metadata": {}, 280 | "output_type": "execute_result" 281 | } 282 | ], 283 | "source": [ 284 | "data.mean(axis=2).mean(axis=1)" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": 26, 290 | "metadata": { 291 | "collapsed": false 292 | }, 293 | "outputs": [ 294 | { 295 | "data": { 296 | "text/plain": [ 297 | "array([ 2.5, 6.5, 15. ], dtype=float32)" 298 | ] 299 | }, 300 | "execution_count": 26, 301 | "metadata": {}, 302 | "output_type": "execute_result" 303 | } 304 | ], 305 | "source": [ 306 | "sess.run(mean5, feed_dict={inputs: data})" 307 | ] 308 | } 309 | ], 310 | "metadata": { 311 | "kernelspec": { 312 | "display_name": "Python 3", 313 | "language": "python", 314 | "name": "python3" 315 | }, 316 | "language_info": { 317 | "codemirror_mode": { 318 | "name": "ipython", 319 | "version": 3 320 | }, 321 | "file_extension": ".py", 322 | "mimetype": "text/x-python", 323 | "name": "python", 324 | "nbconvert_exporter": "python", 325 | "pygments_lexer": "ipython3", 326 | "version": "3.6.0" 327 | } 328 | }, 329 | "nbformat": 4, 330 | "nbformat_minor": 2 331 | } 332 | -------------------------------------------------------------------------------- /020 Data Manipulation/04 strided_slice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# strided_slice\n", 8 | "\n", 9 | "```\n", 10 | "tf.strided_slice(input_, begin, end, strides=None, begin_mask=0, end_mask=0, ellipsis_mask=0, new_axis_mask=0, shrink_axis_mask=0, var=None, name=None)\n", 11 | "```\n", 12 | "\n", 13 | "begin과 end사이의 데이터를 extract합니다." 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": { 20 | "collapsed": true 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "import tensorflow as tf\n", 25 | "import numpy as np" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "### Create InteractiveSession" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 5, 38 | "metadata": { 39 | "collapsed": true 40 | }, 41 | "outputs": [], 42 | "source": [ 43 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.001, allow_growth=True)\n", 44 | "sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))\n", 45 | "init_op = tf.global_variables_initializer()\n", 46 | "sess.run(init_op)" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "### Data" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 25, 59 | "metadata": { 60 | "collapsed": false 61 | }, 62 | "outputs": [ 63 | { 64 | "data": { 65 | "text/plain": [ 66 | "array([[[ 1.1, 1.2, 1.3],\n", 67 | " [ 2.1, 2.2, 2.3]],\n", 68 | "\n", 69 | " [[ 3.1, 3.2, 3.3],\n", 70 | " [ 4.1, 4.2, 4.3]],\n", 71 | "\n", 72 | " [[ 5.1, 5.2, 5.3],\n", 73 | " [ 6.1, 6.2, 6.3]]])" 74 | ] 75 | }, 76 | "execution_count": 25, 77 | "metadata": {}, 78 | "output_type": "execute_result" 79 | } 80 | ], 81 | "source": [ 82 | "data = np.array([[[1.1, 1.2, 1.3], [2.1, 2.2, 2.3]], \n", 83 | " [[3.1, 3.2, 3.3], [4.1, 4.2, 4.3]], \n", 84 | " [[5.1, 5.2, 5.3], [6.1, 6.2, 6.3]]])\n", 85 | "inputs = tf.convert_to_tensor(data)\n", 86 | "sess.run(inputs)" 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "metadata": {}, 92 | "source": [ 93 | "### Examples (using begin and end)" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 26, 99 | "metadata": { 100 | "collapsed": false 101 | }, 102 | "outputs": [ 103 | { 104 | "data": { 105 | "text/plain": [ 106 | "array([[[ 1.1, 1.2, 1.3],\n", 107 | " [ 2.1, 2.2, 2.3]],\n", 108 | "\n", 109 | " [[ 3.1, 3.2, 3.3],\n", 110 | " [ 4.1, 4.2, 4.3]],\n", 111 | "\n", 112 | " [[ 5.1, 5.2, 5.3],\n", 113 | " [ 6.1, 6.2, 6.3]]])" 114 | ] 115 | }, 116 | "execution_count": 26, 117 | "metadata": {}, 118 | "output_type": "execute_result" 119 | } 120 | ], 121 | "source": [ 122 | "sliced1 = tf.strided_slice(inputs, begin=[0], end=[3])\n", 123 | "sess.run(sliced1)" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 38, 129 | "metadata": { 130 | "collapsed": false 131 | }, 132 | "outputs": [ 133 | { 134 | "data": { 135 | "text/plain": [ 136 | "array([[[ 3.1, 3.2, 3.3]],\n", 137 | "\n", 138 | " [[ 5.1, 5.2, 5.3]]])" 139 | ] 140 | }, 141 | "execution_count": 38, 142 | "metadata": {}, 143 | "output_type": "execute_result" 144 | } 145 | ], 146 | "source": [ 147 | "sliced1 = tf.strided_slice(inputs, begin=[1, 0], end=[3, 1])\n", 148 | "sess.run(sliced1)" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 45, 154 | "metadata": { 155 | "collapsed": false 156 | }, 157 | "outputs": [ 158 | { 159 | "data": { 160 | "text/plain": [ 161 | "array([[[ 3.1, 3.2, 3.3],\n", 162 | " [ 4.1, 4.2, 4.3]],\n", 163 | "\n", 164 | " [[ 5.1, 5.2, 5.3],\n", 165 | " [ 6.1, 6.2, 6.3]]])" 166 | ] 167 | }, 168 | "execution_count": 45, 169 | "metadata": {}, 170 | "output_type": "execute_result" 171 | } 172 | ], 173 | "source": [ 174 | "sliced1 = tf.strided_slice(inputs, begin=[1, 0], end=[3, 2])\n", 175 | "sess.run(sliced1)" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": 46, 181 | "metadata": { 182 | "collapsed": false 183 | }, 184 | "outputs": [ 185 | { 186 | "data": { 187 | "text/plain": [ 188 | "array([[[ 3.1]],\n", 189 | "\n", 190 | " [[ 5.1]]])" 191 | ] 192 | }, 193 | "execution_count": 46, 194 | "metadata": {}, 195 | "output_type": "execute_result" 196 | } 197 | ], 198 | "source": [ 199 | "sliced1 = tf.strided_slice(inputs, begin=[1, 0, 0], end=[3, 1, 1])\n", 200 | "sess.run(sliced1)" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": 61, 206 | "metadata": { 207 | "collapsed": false 208 | }, 209 | "outputs": [ 210 | { 211 | "data": { 212 | "text/plain": [ 213 | "array([[[ 1.1, 1.2]],\n", 214 | "\n", 215 | " [[ 3.1, 3.2]],\n", 216 | "\n", 217 | " [[ 5.1, 5.2]]])" 218 | ] 219 | }, 220 | "execution_count": 61, 221 | "metadata": {}, 222 | "output_type": "execute_result" 223 | } 224 | ], 225 | "source": [ 226 | "sliced1 = tf.strided_slice(inputs, begin=[0, 0, 0], end=[3, 1, -1])\n", 227 | "sess.run(sliced1)" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": 64, 233 | "metadata": { 234 | "collapsed": false 235 | }, 236 | "outputs": [ 237 | { 238 | "data": { 239 | "text/plain": [ 240 | "array([[[ 1.1]],\n", 241 | "\n", 242 | " [[ 3.1]]])" 243 | ] 244 | }, 245 | "execution_count": 64, 246 | "metadata": {}, 247 | "output_type": "execute_result" 248 | } 249 | ], 250 | "source": [ 251 | "sliced1 = tf.strided_slice(inputs, begin=[0, 0, 0], end=[-1, 1, 1])\n", 252 | "sess.run(sliced1)" 253 | ] 254 | }, 255 | { 256 | "cell_type": "markdown", 257 | "metadata": {}, 258 | "source": [ 259 | "### Examples (using strides)\n", 260 | "\n", 261 | "strides 값이 모두 1값을 갖은 vector라면.. 안쓴거와 동일합니다." 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": 94, 267 | "metadata": { 268 | "collapsed": false 269 | }, 270 | "outputs": [ 271 | { 272 | "name": "stdout", 273 | "output_type": "stream", 274 | "text": [ 275 | "no strides\n", 276 | "[[[ 1.1 1.2 1.3]]\n", 277 | "\n", 278 | " [[ 3.1 3.2 3.3]]]\n", 279 | "\n", 280 | "stride used\n", 281 | "[[[ 1.1 1.2 1.3]]\n", 282 | "\n", 283 | " [[ 3.1 3.2 3.3]]]\n" 284 | ] 285 | } 286 | ], 287 | "source": [ 288 | "sliced1 = tf.strided_slice(inputs, begin=[0, 0, 0], end=[2, 1, 3])\n", 289 | "print('no strides')\n", 290 | "print(sess.run(sliced1))\n", 291 | "\n", 292 | "sliced1 = tf.strided_slice(inputs, begin=[0, 0, 0], end=[2, 1, 3], strides=[1, 1, 1])\n", 293 | "print('\\nstride used')\n", 294 | "print(sess.run(sliced1))" 295 | ] 296 | }, 297 | { 298 | "cell_type": "code", 299 | "execution_count": 108, 300 | "metadata": { 301 | "collapsed": false 302 | }, 303 | "outputs": [ 304 | { 305 | "name": "stdout", 306 | "output_type": "stream", 307 | "text": [ 308 | "[[[ 1.1 1.3]]\n", 309 | "\n", 310 | " [[ 5.1 5.3]]]\n" 311 | ] 312 | } 313 | ], 314 | "source": [ 315 | "sliced1 = tf.strided_slice(inputs, begin=[0, 0, 0], end=[3, 1, 3], strides=[2, 1, 2])\n", 316 | "print(sess.run(sliced1))" 317 | ] 318 | } 319 | ], 320 | "metadata": { 321 | "kernelspec": { 322 | "display_name": "Python 3", 323 | "language": "python", 324 | "name": "python3" 325 | }, 326 | "language_info": { 327 | "codemirror_mode": { 328 | "name": "ipython", 329 | "version": 3 330 | }, 331 | "file_extension": ".py", 332 | "mimetype": "text/x-python", 333 | "name": "python", 334 | "nbconvert_exporter": "python", 335 | "pygments_lexer": "ipython3", 336 | "version": "3.6.0" 337 | } 338 | }, 339 | "nbformat": 4, 340 | "nbformat_minor": 2 341 | } 342 | -------------------------------------------------------------------------------- /020 Data Manipulation/02 Split, Slice, and Join.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 80, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import tensorflow as tf\n", 12 | "import numpy as np\n", 13 | "\n", 14 | "from pprint import pprint as pp" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## Create a Interactive Session" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 7, 27 | "metadata": { 28 | "collapsed": true 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.01, allow_growth=True)\n", 33 | "sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "## tf.slice(input_, begin, size, name=None)\n", 41 | "\n", 42 | "begin vector 가 예를 들어서 [0, 0, 1] 이고, size vector가 [1, 2, 3] 이라면 다음과 같은 slice을 하게 됩니다. \n", 43 | "\n", 44 | "> data[0:0+1, 0:0+2, 1:1+3]" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 59, 50 | "metadata": { 51 | "collapsed": false 52 | }, 53 | "outputs": [ 54 | { 55 | "name": "stdout", 56 | "output_type": "stream", 57 | "text": [ 58 | "S1\n", 59 | "[[[3 3 3]]]\n", 60 | "[[[3 3 3]]]\n", 61 | "\n", 62 | "S2\n", 63 | "[[[3 3 3]\n", 64 | " [4 4 4]]]\n", 65 | "[[[3 3 3]\n", 66 | " [4 4 4]]]\n", 67 | "\n", 68 | "S3\n", 69 | "[[[3 3 3]]\n", 70 | "\n", 71 | " [[5 5 5]]]\n", 72 | "-------------\n", 73 | "[[[3 3 3]]\n", 74 | "\n", 75 | " [[5 5 5]]]\n" 76 | ] 77 | } 78 | ], 79 | "source": [ 80 | "data = np.array([[[1, 1, 1], [2, 2, 2]],\n", 81 | " [[3, 3, 3], [4, 4, 4]],\n", 82 | " [[5, 5, 5], [6, 6, 6]]])\n", 83 | "\n", 84 | "\n", 85 | "s1 = tf.slice(data, [1, 0, 0], [1, 1, 3])\n", 86 | "s2 = tf.slice(data, [1, 0, 0], [1, 2, 3])\n", 87 | "s3 = tf.slice(data, [1, 0, 0], [2, 1, 3])\n", 88 | "\n", 89 | "print('S1')\n", 90 | "print(s1.eval())\n", 91 | "print(data[1:1+1, 0:0+1, 0:0+3])\n", 92 | "\n", 93 | "print('\\nS2')\n", 94 | "print(s2.eval())\n", 95 | "print(data[1:1+1, 0:0+2, 0:0+3])\n", 96 | "\n", 97 | "print('\\nS3')\n", 98 | "print(s3.eval())\n", 99 | "print('-------------')\n", 100 | "print(data[1:1+2, 0:0+1, 0:0+3])" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "## tf.split(value, num_or_size_splits, axis=0, num=None, name='split')" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 205, 113 | "metadata": { 114 | "collapsed": false 115 | }, 116 | "outputs": [ 117 | { 118 | "name": "stdout", 119 | "output_type": "stream", 120 | "text": [ 121 | "Data\n", 122 | "[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", 123 | " 18 19 20 21 22 23 24 25 26 27 28 29]\n", 124 | " [ 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47\n", 125 | " 48 49 50 51 52 53 54 55 56 57 58 59]\n", 126 | " [ 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77\n", 127 | " 78 79 80 81 82 83 84 85 86 87 88 89]\n", 128 | " [ 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", 129 | " 108 109 110 111 112 113 114 115 116 117 118 119]\n", 130 | " [120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137\n", 131 | " 138 139 140 141 142 143 144 145 146 147 148 149]]\n", 132 | "\n", 133 | "Splitted 01\n", 134 | "[5 4]\n", 135 | "[[ 0 1 2 3]\n", 136 | " [ 30 31 32 33]\n", 137 | " [ 60 61 62 63]\n", 138 | " [ 90 91 92 93]\n", 139 | " [120 121 122 123]]\n", 140 | "\n", 141 | "Splitted 02\n", 142 | "[ 5 15]\n", 143 | "[[ 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]\n", 144 | " [ 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48]\n", 145 | " [ 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78]\n", 146 | " [ 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108]\n", 147 | " [124 125 126 127 128 129 130 131 132 133 134 135 136 137 138]]\n", 148 | "\n", 149 | "Splitted 03\n", 150 | "[ 5 11]\n", 151 | "[[ 19 20 21 22 23 24 25 26 27 28 29]\n", 152 | " [ 49 50 51 52 53 54 55 56 57 58 59]\n", 153 | " [ 79 80 81 82 83 84 85 86 87 88 89]\n", 154 | " [109 110 111 112 113 114 115 116 117 118 119]\n", 155 | " [139 140 141 142 143 144 145 146 147 148 149]]\n" 156 | ] 157 | } 158 | ], 159 | "source": [ 160 | "data = np.arange(5*30).reshape((5, 30))\n", 161 | "print('Data')\n", 162 | "print(data)\n", 163 | "\n", 164 | "splitted1 = tf.split(data, [4, 15, 11], axis=1)\n", 165 | "\n", 166 | "print('\\nSplitted 01')\n", 167 | "print(tf.shape(splitted1[0]).eval()) # 4\n", 168 | "print(splitted1[0].eval())\n", 169 | "\n", 170 | "print('\\nSplitted 02')\n", 171 | "print(tf.shape(splitted1[1]).eval()) # 15\n", 172 | "print(splitted1[1].eval())\n", 173 | "\n", 174 | "print('\\nSplitted 03')\n", 175 | "print(tf.shape(splitted1[2]).eval()) # 11\n", 176 | "print(splitted1[2].eval())" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "execution_count": 203, 182 | "metadata": { 183 | "collapsed": false 184 | }, 185 | "outputs": [ 186 | { 187 | "name": "stdout", 188 | "output_type": "stream", 189 | "text": [ 190 | "\n", 191 | "\n", 192 | "Splitted 01\n", 193 | "Shape: [ 1 30]\n", 194 | "[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n", 195 | " 24 25 26 27 28 29]]\n", 196 | "numpy\n", 197 | "[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n", 198 | " 24 25 26 27 28 29]]\n", 199 | "\n", 200 | "\n", 201 | "Splitted 02\n", 202 | "Shape: [ 2 30]\n", 203 | "[[30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", 204 | " 54 55 56 57 58 59]\n", 205 | " [60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83\n", 206 | " 84 85 86 87 88 89]]\n", 207 | "numpy\n", 208 | "[[30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", 209 | " 54 55 56 57 58 59]\n", 210 | " [60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83\n", 211 | " 84 85 86 87 88 89]]\n", 212 | "\n", 213 | "\n", 214 | "Splitted 03\n", 215 | "Shape: [ 2 30]\n", 216 | "[[ 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", 217 | " 108 109 110 111 112 113 114 115 116 117 118 119]\n", 218 | " [120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137\n", 219 | " 138 139 140 141 142 143 144 145 146 147 148 149]]\n", 220 | "numpy\n", 221 | "[[ 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", 222 | " 108 109 110 111 112 113 114 115 116 117 118 119]\n", 223 | " [120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137\n", 224 | " 138 139 140 141 142 143 144 145 146 147 148 149]]\n" 225 | ] 226 | } 227 | ], 228 | "source": [ 229 | "splitted = tf.split(data, [1, 2, 2], axis=0)\n", 230 | "\n", 231 | "print('\\n\\nSplitted 01')\n", 232 | "print('Shape:', tf.shape(splitted[0]).eval())\n", 233 | "print(splitted[0].eval())\n", 234 | "print('numpy')\n", 235 | "print(data[0:1])\n", 236 | "\n", 237 | "print('\\n\\nSplitted 02')\n", 238 | "print('Shape:', tf.shape(splitted[1]).eval())\n", 239 | "print(splitted[1].eval())\n", 240 | "print('numpy')\n", 241 | "print(data[1:3])\n", 242 | "\n", 243 | "print('\\n\\nSplitted 03')\n", 244 | "print('Shape:', tf.shape(splitted[2]).eval())\n", 245 | "print(splitted[2].eval())\n", 246 | "print('numpy')\n", 247 | "print(data[3:5])" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": null, 253 | "metadata": { 254 | "collapsed": true 255 | }, 256 | "outputs": [], 257 | "source": [] 258 | } 259 | ], 260 | "metadata": { 261 | "kernelspec": { 262 | "display_name": "Python 3", 263 | "language": "python", 264 | "name": "python3" 265 | }, 266 | "language_info": { 267 | "codemirror_mode": { 268 | "name": "ipython", 269 | "version": 3 270 | }, 271 | "file_extension": ".py", 272 | "mimetype": "text/x-python", 273 | "name": "python", 274 | "nbconvert_exporter": "python", 275 | "pygments_lexer": "ipython3", 276 | "version": "3.6.0" 277 | } 278 | }, 279 | "nbformat": 4, 280 | "nbformat_minor": 2 281 | } 282 | -------------------------------------------------------------------------------- /202 Logistic Regression with Regularization/titanic-logistic-regression-with-tensorflow.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 19, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using matplotlib backend: TkAgg\n", 13 | "Populating the interactive namespace from numpy and matplotlib\n" 14 | ] 15 | } 16 | ], 17 | "source": [ 18 | "%pylab \n", 19 | "import numpy as np\n", 20 | "import pandas as pd\n", 21 | "import tensorflow as tf\n", 22 | "\n", 23 | "from sklearn.preprocessing import StandardScaler, MinMaxScaler\n", 24 | "from sklearn.model_selection import train_test_split\n", 25 | "from sklearn.linear_model import LogisticRegression\n", 26 | "from IPython.display import display\n", 27 | "\n", 28 | "np.random.seed(0)" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "# Data & Preprocessing\n", 36 | "\n", 37 | "\n", 38 | "| Variable | Definition | Key |\n", 39 | "|:---------|:-----------|:----|\n", 40 | "| survival | 생존 | 0 = No, 1 = Yes | \n", 41 | "| pclass | 티켓 등급 | 1 = 1st, 2 = 2nd, 3 = 3rd | \n", 42 | "| sex | 성별 | | \n", 43 | "| Age | 나이 | | \n", 44 | "| sibsp\t | 타이타닉에 함께 타고 있는 형제, 자매 또는 배우 (갯수) | | \n", 45 | "| parch | 타이타닉에 함께 타고 있는 부모 또는 자식 (갯수) | | \n", 46 | "| ticket | 티켓 넘버 | | \n", 47 | "| fare | 티켓 가격\t | | \n", 48 | "| cabin | 객실 번호 | | \n", 49 | "| embarked | 출항지 | C = Cherbourg, Q = Queenstown, S = Southampton | " 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 2, 55 | "metadata": {}, 56 | "outputs": [ 57 | { 58 | "data": { 59 | "text/html": [ 60 | "
\n", 61 | "\n", 74 | "\n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | "
SurvivedAgeSibSpParchFarePclass_1Pclass_2Pclass_3Sex_femaleSex_maleEmbarked_CEmbarked_QEmbarked_S
0022.0107.250000101001
1138.01071.283310010100
2126.0007.925000110001
3135.01053.100010010001
4035.0008.050000101001
\n", 176 | "
" 177 | ], 178 | "text/plain": [ 179 | " Survived Age SibSp Parch Fare Pclass_1 Pclass_2 Pclass_3 \\\n", 180 | "0 0 22.0 1 0 7.2500 0 0 1 \n", 181 | "1 1 38.0 1 0 71.2833 1 0 0 \n", 182 | "2 1 26.0 0 0 7.9250 0 0 1 \n", 183 | "3 1 35.0 1 0 53.1000 1 0 0 \n", 184 | "4 0 35.0 0 0 8.0500 0 0 1 \n", 185 | "\n", 186 | " Sex_female Sex_male Embarked_C Embarked_Q Embarked_S \n", 187 | "0 0 1 0 0 1 \n", 188 | "1 1 0 1 0 0 \n", 189 | "2 1 0 0 0 1 \n", 190 | "3 1 0 0 0 1 \n", 191 | "4 0 1 0 0 1 " 192 | ] 193 | }, 194 | "metadata": {}, 195 | "output_type": "display_data" 196 | }, 197 | { 198 | "name": "stdout", 199 | "output_type": "stream", 200 | "text": [ 201 | "\n", 202 | "RangeIndex: 891 entries, 0 to 890\n", 203 | "Data columns (total 13 columns):\n", 204 | "Survived 891 non-null int64\n", 205 | "Age 891 non-null float64\n", 206 | "SibSp 891 non-null int64\n", 207 | "Parch 891 non-null int64\n", 208 | "Fare 891 non-null float64\n", 209 | "Pclass_1 891 non-null uint8\n", 210 | "Pclass_2 891 non-null uint8\n", 211 | "Pclass_3 891 non-null uint8\n", 212 | "Sex_female 891 non-null uint8\n", 213 | "Sex_male 891 non-null uint8\n", 214 | "Embarked_C 891 non-null uint8\n", 215 | "Embarked_Q 891 non-null uint8\n", 216 | "Embarked_S 891 non-null uint8\n", 217 | "dtypes: float64(2), int64(3), uint8(8)\n", 218 | "memory usage: 41.8 KB\n" 219 | ] 220 | } 221 | ], 222 | "source": [ 223 | "dataset = pd.read_csv('./train.csv')\n", 224 | "\n", 225 | "# Drop useless columns\n", 226 | "dataset.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)\n", 227 | "\n", 228 | "# Fill NA\n", 229 | "dataset['Age'] = dataset['Age'].fillna(0)\n", 230 | "\n", 231 | "# Make dummies\n", 232 | "dataset = pd.get_dummies(dataset, columns=['Pclass', 'Sex', 'Embarked'])\n", 233 | "\n", 234 | "# Display\n", 235 | "display(dataset.head())\n", 236 | "dataset.info()" 237 | ] 238 | }, 239 | { 240 | "cell_type": "markdown", 241 | "metadata": {}, 242 | "source": [ 243 | "## Check Missing Values" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 3, 249 | "metadata": {}, 250 | "outputs": [ 251 | { 252 | "data": { 253 | "text/html": [ 254 | "
\n", 255 | "\n", 268 | "\n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | "
SurvivedAgeSibSpParchFarePclass_1Pclass_2Pclass_3Sex_femaleSex_maleEmbarked_CEmbarked_QEmbarked_S
\n", 290 | "
" 291 | ], 292 | "text/plain": [ 293 | "Empty DataFrame\n", 294 | "Columns: [Survived, Age, SibSp, Parch, Fare, Pclass_1, Pclass_2, Pclass_3, Sex_female, Sex_male, Embarked_C, Embarked_Q, Embarked_S]\n", 295 | "Index: []" 296 | ] 297 | }, 298 | "execution_count": 3, 299 | "metadata": {}, 300 | "output_type": "execute_result" 301 | } 302 | ], 303 | "source": [ 304 | "# Check Missing Values\n", 305 | "dataset[dataset.isnull().any(axis=1)].head()" 306 | ] 307 | }, 308 | { 309 | "cell_type": "markdown", 310 | "metadata": {}, 311 | "source": [ 312 | "## Scaling" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 4, 318 | "metadata": {}, 319 | "outputs": [ 320 | { 321 | "data": { 322 | "text/html": [ 323 | "
\n", 324 | "\n", 337 | "\n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | "
SurvivedAgeSibSpParchFarePclass_1Pclass_2Pclass_3Sex_femaleSex_maleEmbarked_CEmbarked_QEmbarked_S
000.27500.1250.00.01415100101001
110.47500.1250.00.13913610010100
210.32500.0000.00.01546900110001
310.43750.1250.00.10364410010001
400.43750.0000.00.01571300101001
\n", 439 | "
" 440 | ], 441 | "text/plain": [ 442 | " Survived Age SibSp Parch Fare Pclass_1 Pclass_2 Pclass_3 \\\n", 443 | "0 0 0.2750 0.125 0.0 0.014151 0 0 1 \n", 444 | "1 1 0.4750 0.125 0.0 0.139136 1 0 0 \n", 445 | "2 1 0.3250 0.000 0.0 0.015469 0 0 1 \n", 446 | "3 1 0.4375 0.125 0.0 0.103644 1 0 0 \n", 447 | "4 0 0.4375 0.000 0.0 0.015713 0 0 1 \n", 448 | "\n", 449 | " Sex_female Sex_male Embarked_C Embarked_Q Embarked_S \n", 450 | "0 0 1 0 0 1 \n", 451 | "1 1 0 1 0 0 \n", 452 | "2 1 0 0 0 1 \n", 453 | "3 1 0 0 0 1 \n", 454 | "4 0 1 0 0 1 " 455 | ] 456 | }, 457 | "execution_count": 4, 458 | "metadata": {}, 459 | "output_type": "execute_result" 460 | } 461 | ], 462 | "source": [ 463 | "# Scaling\n", 464 | "SCALING_COLUMNS = ['Age', 'SibSp', 'Parch', 'Fare']\n", 465 | "\n", 466 | "scaler = MinMaxScaler()\n", 467 | "dataset[SCALING_COLUMNS] = scaler.fit_transform(dataset[SCALING_COLUMNS])\n", 468 | "dataset.head()" 469 | ] 470 | }, 471 | { 472 | "cell_type": "markdown", 473 | "metadata": {}, 474 | "source": [ 475 | "## Split Train and Test dataset" 476 | ] 477 | }, 478 | { 479 | "cell_type": "code", 480 | "execution_count": 5, 481 | "metadata": {}, 482 | "outputs": [ 483 | { 484 | "name": "stdout", 485 | "output_type": "stream", 486 | "text": [ 487 | "train_x: (623, 12)\n", 488 | "train_y: (623,)\n", 489 | "test_x: (268, 12)\n", 490 | "test_y: (268,)\n" 491 | ] 492 | } 493 | ], 494 | "source": [ 495 | "# Seperate X and Y\n", 496 | "data_x = dataset.loc[:, dataset.columns != 'Survived'].as_matrix()\n", 497 | "data_y = dataset['Survived'].as_matrix()\n", 498 | "\n", 499 | "train_x, test_x, train_y, test_y = train_test_split(data_x, data_y, test_size=0.3)\n", 500 | "\n", 501 | "print('train_x:', train_x.shape)\n", 502 | "print('train_y:', train_y.shape)\n", 503 | "print('test_x:', test_x.shape)\n", 504 | "print('test_y:', test_y.shape)" 505 | ] 506 | }, 507 | { 508 | "cell_type": "markdown", 509 | "metadata": {}, 510 | "source": [ 511 | "# Scipy" 512 | ] 513 | }, 514 | { 515 | "cell_type": "markdown", 516 | "metadata": {}, 517 | "source": [ 518 | "## Train" 519 | ] 520 | }, 521 | { 522 | "cell_type": "code", 523 | "execution_count": 16, 524 | "metadata": {}, 525 | "outputs": [ 526 | { 527 | "name": "stdout", 528 | "output_type": "stream", 529 | "text": [ 530 | "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", 531 | " intercept_scaling=1, max_iter=1000, multi_class='ovr', n_jobs=1,\n", 532 | " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", 533 | " verbose=0, warm_start=False)\n", 534 | "accuracy: 0.794542536116\n" 535 | ] 536 | } 537 | ], 538 | "source": [ 539 | "lr = LogisticRegression(penalty='l2', max_iter=1000)\n", 540 | "print(lr.fit(train_x, train_y))\n", 541 | "print('accuracy:', lr.score(train_x, train_y))" 542 | ] 543 | }, 544 | { 545 | "cell_type": "markdown", 546 | "metadata": {}, 547 | "source": [ 548 | "## Evaluate" 549 | ] 550 | }, 551 | { 552 | "cell_type": "code", 553 | "execution_count": 17, 554 | "metadata": {}, 555 | "outputs": [ 556 | { 557 | "name": "stdout", 558 | "output_type": "stream", 559 | "text": [ 560 | "accuracy: 0.805970149254\n" 561 | ] 562 | } 563 | ], 564 | "source": [ 565 | "print('accuracy:', lr.score(test_x, test_y))" 566 | ] 567 | }, 568 | { 569 | "cell_type": "markdown", 570 | "metadata": {}, 571 | "source": [ 572 | "# TensorFlow" 573 | ] 574 | }, 575 | { 576 | "cell_type": "code", 577 | "execution_count": 25, 578 | "metadata": {}, 579 | "outputs": [], 580 | "source": [ 581 | "inputs = tf.placeholder(tf.float32, shape=(None, 12))\n", 582 | "outputs = tf.placeholder(tf.int16, shape=(None, 1))" 583 | ] 584 | } 585 | ], 586 | "metadata": { 587 | "kernelspec": { 588 | "display_name": "Python 3", 589 | "language": "python", 590 | "name": "python3" 591 | }, 592 | "language_info": { 593 | "codemirror_mode": { 594 | "name": "ipython", 595 | "version": 3 596 | }, 597 | "file_extension": ".py", 598 | "mimetype": "text/x-python", 599 | "name": "python", 600 | "nbconvert_exporter": "python", 601 | "pygments_lexer": "ipython3", 602 | "version": "3.6.3" 603 | } 604 | }, 605 | "nbformat": 4, 606 | "nbformat_minor": 2 607 | } 608 | -------------------------------------------------------------------------------- /021 Reading Data/01 Reading Data From Files.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Start Interactive Session" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [ 17 | { 18 | "name": "stdout", 19 | "output_type": "stream", 20 | "text": [ 21 | "Populating the interactive namespace from numpy and matplotlib\n" 22 | ] 23 | } 24 | ], 25 | "source": [ 26 | "%pylab inline\n", 27 | "import tensorflow as tf\n", 28 | "import pandas as pd\n", 29 | "import numpy as np\n", 30 | "\n", 31 | "from IPython.display import clear_output" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "## Create Data" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 2, 44 | "metadata": { 45 | "collapsed": false 46 | }, 47 | "outputs": [ 48 | { 49 | "data": { 50 | "image/png": "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\nTkSuQmCC\n", 51 | "text/plain": [ 52 | "" 53 | ] 54 | }, 55 | "metadata": {}, 56 | "output_type": "display_data" 57 | } 58 | ], 59 | "source": [ 60 | "c1 = np.random.normal(size=10)\n", 61 | "c2 = np.random.exponential(size=10)\n", 62 | "c3 = np.random.chisquare(5, size=10)\n", 63 | "c4 = np.array([None]*10)\n", 64 | "\n", 65 | "data = pd.DataFrame({'normal': c1, 'exp':c2, 'chi':c3, 'none': c4}, columns=['normal', 'exp', 'chi', 'none'])\n", 66 | "data.to_csv('random.data', header=False)\n", 67 | "\n", 68 | "\n", 69 | "data.hist(bins=30)\n", 70 | "clear_output()" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 3, 76 | "metadata": { 77 | "collapsed": false 78 | }, 79 | "outputs": [], 80 | "source": [ 81 | "init_op = tf.global_variables_initializer()\n", 82 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.01, allow_growth=True)\n", 83 | "sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))\n", 84 | "sess.run(init_op)" 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "metadata": {}, 90 | "source": [] 91 | }, 92 | { 93 | "cell_type": "markdown", 94 | "metadata": {}, 95 | "source": [ 96 | "## Reading CSV Files\n", 97 | "\n", 98 | "[tf.train.string_input_producer](https://www.tensorflow.org/api_docs/python/tf/train/string_input_producer)를 사용하면 file names을 갖고 있는 FIFO queue를 만들수 있습니다. 이는 말그대로 file names을 갖고 있는 것이지 파일 안의 데이터를 갖고 있지는 않습니다. 이때 옵션에 따라서 shuffling 또는 maximum number of epochs를 설정할수도 있습니다.\n", 99 | "\n", 100 | "흥미로운 점은 forloop을 돌면서 가령 Data의 갯수 (rows)는 10개라고 했을때 그 이상 forloop을 돌면은 계속 반복해서 파일의 처음부터 다시 읽듯이 read를 합니다. string_input_producer에서 shuffle을 True값을 주는 것은 파일을 불러올때의 shuffle이지 데이터를 읽을때의 shuffle은 아닙니다.\n", 101 | "\n", 102 | "문제가 될 수 있는 부분은 header에 column names가 들어가게 되는데.. 이경우 skip_header 같은 옵션이 없기 때문에 파일을 읽을시 반드시 header가 삭제된 파일을 읽어야 합니다." 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 4, 108 | "metadata": { 109 | "collapsed": false 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "_files = ['random.data']\n", 114 | "data_queue = tf.train.string_input_producer(_files, num_epochs=None, shuffle=True, name='file_input_producer')\n", 115 | "\n", 116 | "reader = tf.TextLineReader()\n", 117 | "key, value = reader.read(data_queue)\n", 118 | "\n", 119 | "record_defaults = [[0.], [0.], [0.], [0.], [0.]]\n", 120 | "col1, col2, col3, col4, col5 = tf.decode_csv(value, record_defaults=record_defaults)\n", 121 | "features = tf.stack([col1, col2, col5])\n", 122 | "\n", 123 | "coord = tf.train.Coordinator()\n", 124 | "threads = tf.train.start_queue_runners(coord=coord, daemon=True, start=True)" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 6, 130 | "metadata": { 131 | "collapsed": false, 132 | "scrolled": true 133 | }, 134 | "outputs": [ 135 | { 136 | "name": "stdout", 137 | "output_type": "stream", 138 | "text": [ 139 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 140 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 141 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 142 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 143 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 144 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 145 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 146 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 147 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 148 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 149 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 150 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 151 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 152 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 153 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 154 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 155 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 156 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 157 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 158 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 159 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 160 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 161 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 162 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 163 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 164 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 165 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 166 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 167 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 168 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 169 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 170 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 171 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 172 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 173 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 174 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 175 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 176 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 177 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 178 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 179 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 180 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 181 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 182 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 183 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 184 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 185 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 186 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 187 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 188 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 189 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 190 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 191 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 192 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 193 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 194 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 195 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 196 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 197 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 198 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 199 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 200 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 201 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 202 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 203 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 204 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 205 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 206 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 207 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 208 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 209 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 210 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 211 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 212 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 213 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 214 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 215 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 216 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 217 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 218 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 219 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 220 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 221 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 222 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 223 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 224 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 225 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 226 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 227 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 228 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n", 229 | "[0 ] 0.45 0.49 3.83\t | stack: [ 0. 0.45395735 0. ]\n", 230 | "[1 ] 0.34 0.36 3.64\t | stack: [ 1. 0.33982021 0. ]\n", 231 | "[2 ] -1.44 0.19 5.26\t | stack: [ 2. -1.44052148 0. ]\n", 232 | "[3 ] 0.09 0.10 6.36\t | stack: [ 3. 0.08712945 0. ]\n", 233 | "[4 ] -0.77 2.27 14.12\t | stack: [ 4. -0.77030915 0. ]\n", 234 | "[5 ] 1.61 3.20 3.86\t | stack: [ 5. 1.61097288 0. ]\n", 235 | "[6 ] -0.75 0.28 2.14\t | stack: [ 6. -0.75481528 0. ]\n", 236 | "[7 ] 0.75 1.08 0.73\t | stack: [ 7. 0.74873269 0. ]\n", 237 | "[8 ] 0.51 2.75 3.79\t | stack: [ 8. 0.51361752 0. ]\n", 238 | "[9 ] -1.89 0.17 12.56\t | stack: [ 9. -1.89026117 0. ]\n" 239 | ] 240 | } 241 | ], 242 | "source": [ 243 | "for i in range(100):\n", 244 | " example, idx, normal, exp, chi = sess.run([features, col1, col2, col3, col4])\n", 245 | " print('[%-2d] %5.2f %5.2f %5.2f\\t | stack: %s' % (idx, normal, exp, chi, example))\n", 246 | "\n", 247 | "coord.request_stop()\n", 248 | "coord.join(threads)\n", 249 | "# data_queue.close()\n", 250 | "# tf.Session.reset(sess, containers=['dataqueue'])" 251 | ] 252 | } 253 | ], 254 | "metadata": { 255 | "kernelspec": { 256 | "display_name": "Python 3", 257 | "language": "python", 258 | "name": "python3" 259 | }, 260 | "language_info": { 261 | "codemirror_mode": { 262 | "name": "ipython", 263 | "version": 3 264 | }, 265 | "file_extension": ".py", 266 | "mimetype": "text/x-python", 267 | "name": "python", 268 | "nbconvert_exporter": "python", 269 | "pygments_lexer": "ipython3", 270 | "version": "3.6.0" 271 | } 272 | }, 273 | "nbformat": 4, 274 | "nbformat_minor": 2 275 | } 276 | -------------------------------------------------------------------------------- /202 Logistic Regression with Regularization/test.csv: -------------------------------------------------------------------------------- 1 | PassengerId,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked 2 | 892,3,"Kelly, Mr. James",male,34.5,0,0,330911,7.8292,,Q 3 | 893,3,"Wilkes, Mrs. James (Ellen Needs)",female,47,1,0,363272,7,,S 4 | 894,2,"Myles, Mr. Thomas Francis",male,62,0,0,240276,9.6875,,Q 5 | 895,3,"Wirz, Mr. Albert",male,27,0,0,315154,8.6625,,S 6 | 896,3,"Hirvonen, Mrs. Alexander (Helga E Lindqvist)",female,22,1,1,3101298,12.2875,,S 7 | 897,3,"Svensson, Mr. Johan Cervin",male,14,0,0,7538,9.225,,S 8 | 898,3,"Connolly, Miss. Kate",female,30,0,0,330972,7.6292,,Q 9 | 899,2,"Caldwell, Mr. Albert Francis",male,26,1,1,248738,29,,S 10 | 900,3,"Abrahim, Mrs. Joseph (Sophie Halaut Easu)",female,18,0,0,2657,7.2292,,C 11 | 901,3,"Davies, Mr. John Samuel",male,21,2,0,A/4 48871,24.15,,S 12 | 902,3,"Ilieff, Mr. Ylio",male,,0,0,349220,7.8958,,S 13 | 903,1,"Jones, Mr. Charles Cresson",male,46,0,0,694,26,,S 14 | 904,1,"Snyder, Mrs. John Pillsbury (Nelle Stevenson)",female,23,1,0,21228,82.2667,B45,S 15 | 905,2,"Howard, Mr. Benjamin",male,63,1,0,24065,26,,S 16 | 906,1,"Chaffee, Mrs. Herbert Fuller (Carrie Constance Toogood)",female,47,1,0,W.E.P. 5734,61.175,E31,S 17 | 907,2,"del Carlo, Mrs. Sebastiano (Argenia Genovesi)",female,24,1,0,SC/PARIS 2167,27.7208,,C 18 | 908,2,"Keane, Mr. Daniel",male,35,0,0,233734,12.35,,Q 19 | 909,3,"Assaf, Mr. Gerios",male,21,0,0,2692,7.225,,C 20 | 910,3,"Ilmakangas, Miss. Ida Livija",female,27,1,0,STON/O2. 3101270,7.925,,S 21 | 911,3,"Assaf Khalil, Mrs. Mariana (Miriam"")""",female,45,0,0,2696,7.225,,C 22 | 912,1,"Rothschild, Mr. Martin",male,55,1,0,PC 17603,59.4,,C 23 | 913,3,"Olsen, Master. Artur Karl",male,9,0,1,C 17368,3.1708,,S 24 | 914,1,"Flegenheim, Mrs. Alfred (Antoinette)",female,,0,0,PC 17598,31.6833,,S 25 | 915,1,"Williams, Mr. Richard Norris II",male,21,0,1,PC 17597,61.3792,,C 26 | 916,1,"Ryerson, Mrs. Arthur Larned (Emily Maria Borie)",female,48,1,3,PC 17608,262.375,B57 B59 B63 B66,C 27 | 917,3,"Robins, Mr. Alexander A",male,50,1,0,A/5. 3337,14.5,,S 28 | 918,1,"Ostby, Miss. Helene Ragnhild",female,22,0,1,113509,61.9792,B36,C 29 | 919,3,"Daher, Mr. Shedid",male,22.5,0,0,2698,7.225,,C 30 | 920,1,"Brady, Mr. John Bertram",male,41,0,0,113054,30.5,A21,S 31 | 921,3,"Samaan, Mr. Elias",male,,2,0,2662,21.6792,,C 32 | 922,2,"Louch, Mr. Charles Alexander",male,50,1,0,SC/AH 3085,26,,S 33 | 923,2,"Jefferys, Mr. Clifford Thomas",male,24,2,0,C.A. 31029,31.5,,S 34 | 924,3,"Dean, Mrs. Bertram (Eva Georgetta Light)",female,33,1,2,C.A. 2315,20.575,,S 35 | 925,3,"Johnston, Mrs. Andrew G (Elizabeth Lily"" Watson)""",female,,1,2,W./C. 6607,23.45,,S 36 | 926,1,"Mock, Mr. Philipp Edmund",male,30,1,0,13236,57.75,C78,C 37 | 927,3,"Katavelas, Mr. Vassilios (Catavelas Vassilios"")""",male,18.5,0,0,2682,7.2292,,C 38 | 928,3,"Roth, Miss. Sarah A",female,,0,0,342712,8.05,,S 39 | 929,3,"Cacic, Miss. Manda",female,21,0,0,315087,8.6625,,S 40 | 930,3,"Sap, Mr. Julius",male,25,0,0,345768,9.5,,S 41 | 931,3,"Hee, Mr. Ling",male,,0,0,1601,56.4958,,S 42 | 932,3,"Karun, Mr. Franz",male,39,0,1,349256,13.4167,,C 43 | 933,1,"Franklin, Mr. Thomas Parham",male,,0,0,113778,26.55,D34,S 44 | 934,3,"Goldsmith, Mr. Nathan",male,41,0,0,SOTON/O.Q. 3101263,7.85,,S 45 | 935,2,"Corbett, Mrs. Walter H (Irene Colvin)",female,30,0,0,237249,13,,S 46 | 936,1,"Kimball, Mrs. Edwin Nelson Jr (Gertrude Parsons)",female,45,1,0,11753,52.5542,D19,S 47 | 937,3,"Peltomaki, Mr. Nikolai Johannes",male,25,0,0,STON/O 2. 3101291,7.925,,S 48 | 938,1,"Chevre, Mr. Paul Romaine",male,45,0,0,PC 17594,29.7,A9,C 49 | 939,3,"Shaughnessy, Mr. Patrick",male,,0,0,370374,7.75,,Q 50 | 940,1,"Bucknell, Mrs. William Robert (Emma Eliza Ward)",female,60,0,0,11813,76.2917,D15,C 51 | 941,3,"Coutts, Mrs. William (Winnie Minnie"" Treanor)""",female,36,0,2,C.A. 37671,15.9,,S 52 | 942,1,"Smith, Mr. Lucien Philip",male,24,1,0,13695,60,C31,S 53 | 943,2,"Pulbaum, Mr. Franz",male,27,0,0,SC/PARIS 2168,15.0333,,C 54 | 944,2,"Hocking, Miss. Ellen Nellie""""",female,20,2,1,29105,23,,S 55 | 945,1,"Fortune, Miss. Ethel Flora",female,28,3,2,19950,263,C23 C25 C27,S 56 | 946,2,"Mangiavacchi, Mr. Serafino Emilio",male,,0,0,SC/A.3 2861,15.5792,,C 57 | 947,3,"Rice, Master. Albert",male,10,4,1,382652,29.125,,Q 58 | 948,3,"Cor, Mr. Bartol",male,35,0,0,349230,7.8958,,S 59 | 949,3,"Abelseth, Mr. Olaus Jorgensen",male,25,0,0,348122,7.65,F G63,S 60 | 950,3,"Davison, Mr. Thomas Henry",male,,1,0,386525,16.1,,S 61 | 951,1,"Chaudanson, Miss. Victorine",female,36,0,0,PC 17608,262.375,B61,C 62 | 952,3,"Dika, Mr. Mirko",male,17,0,0,349232,7.8958,,S 63 | 953,2,"McCrae, Mr. Arthur Gordon",male,32,0,0,237216,13.5,,S 64 | 954,3,"Bjorklund, Mr. Ernst Herbert",male,18,0,0,347090,7.75,,S 65 | 955,3,"Bradley, Miss. Bridget Delia",female,22,0,0,334914,7.725,,Q 66 | 956,1,"Ryerson, Master. John Borie",male,13,2,2,PC 17608,262.375,B57 B59 B63 B66,C 67 | 957,2,"Corey, Mrs. Percy C (Mary Phyllis Elizabeth Miller)",female,,0,0,F.C.C. 13534,21,,S 68 | 958,3,"Burns, Miss. Mary Delia",female,18,0,0,330963,7.8792,,Q 69 | 959,1,"Moore, Mr. Clarence Bloomfield",male,47,0,0,113796,42.4,,S 70 | 960,1,"Tucker, Mr. Gilbert Milligan Jr",male,31,0,0,2543,28.5375,C53,C 71 | 961,1,"Fortune, Mrs. Mark (Mary McDougald)",female,60,1,4,19950,263,C23 C25 C27,S 72 | 962,3,"Mulvihill, Miss. Bertha E",female,24,0,0,382653,7.75,,Q 73 | 963,3,"Minkoff, Mr. Lazar",male,21,0,0,349211,7.8958,,S 74 | 964,3,"Nieminen, Miss. Manta Josefina",female,29,0,0,3101297,7.925,,S 75 | 965,1,"Ovies y Rodriguez, Mr. Servando",male,28.5,0,0,PC 17562,27.7208,D43,C 76 | 966,1,"Geiger, Miss. Amalie",female,35,0,0,113503,211.5,C130,C 77 | 967,1,"Keeping, Mr. Edwin",male,32.5,0,0,113503,211.5,C132,C 78 | 968,3,"Miles, Mr. Frank",male,,0,0,359306,8.05,,S 79 | 969,1,"Cornell, Mrs. Robert Clifford (Malvina Helen Lamson)",female,55,2,0,11770,25.7,C101,S 80 | 970,2,"Aldworth, Mr. Charles Augustus",male,30,0,0,248744,13,,S 81 | 971,3,"Doyle, Miss. Elizabeth",female,24,0,0,368702,7.75,,Q 82 | 972,3,"Boulos, Master. Akar",male,6,1,1,2678,15.2458,,C 83 | 973,1,"Straus, Mr. Isidor",male,67,1,0,PC 17483,221.7792,C55 C57,S 84 | 974,1,"Case, Mr. Howard Brown",male,49,0,0,19924,26,,S 85 | 975,3,"Demetri, Mr. Marinko",male,,0,0,349238,7.8958,,S 86 | 976,2,"Lamb, Mr. John Joseph",male,,0,0,240261,10.7083,,Q 87 | 977,3,"Khalil, Mr. Betros",male,,1,0,2660,14.4542,,C 88 | 978,3,"Barry, Miss. Julia",female,27,0,0,330844,7.8792,,Q 89 | 979,3,"Badman, Miss. Emily Louisa",female,18,0,0,A/4 31416,8.05,,S 90 | 980,3,"O'Donoghue, Ms. Bridget",female,,0,0,364856,7.75,,Q 91 | 981,2,"Wells, Master. Ralph Lester",male,2,1,1,29103,23,,S 92 | 982,3,"Dyker, Mrs. Adolf Fredrik (Anna Elisabeth Judith Andersson)",female,22,1,0,347072,13.9,,S 93 | 983,3,"Pedersen, Mr. Olaf",male,,0,0,345498,7.775,,S 94 | 984,1,"Davidson, Mrs. Thornton (Orian Hays)",female,27,1,2,F.C. 12750,52,B71,S 95 | 985,3,"Guest, Mr. Robert",male,,0,0,376563,8.05,,S 96 | 986,1,"Birnbaum, Mr. Jakob",male,25,0,0,13905,26,,C 97 | 987,3,"Tenglin, Mr. Gunnar Isidor",male,25,0,0,350033,7.7958,,S 98 | 988,1,"Cavendish, Mrs. Tyrell William (Julia Florence Siegel)",female,76,1,0,19877,78.85,C46,S 99 | 989,3,"Makinen, Mr. Kalle Edvard",male,29,0,0,STON/O 2. 3101268,7.925,,S 100 | 990,3,"Braf, Miss. Elin Ester Maria",female,20,0,0,347471,7.8542,,S 101 | 991,3,"Nancarrow, Mr. William Henry",male,33,0,0,A./5. 3338,8.05,,S 102 | 992,1,"Stengel, Mrs. Charles Emil Henry (Annie May Morris)",female,43,1,0,11778,55.4417,C116,C 103 | 993,2,"Weisz, Mr. Leopold",male,27,1,0,228414,26,,S 104 | 994,3,"Foley, Mr. William",male,,0,0,365235,7.75,,Q 105 | 995,3,"Johansson Palmquist, Mr. Oskar Leander",male,26,0,0,347070,7.775,,S 106 | 996,3,"Thomas, Mrs. Alexander (Thamine Thelma"")""",female,16,1,1,2625,8.5167,,C 107 | 997,3,"Holthen, Mr. Johan Martin",male,28,0,0,C 4001,22.525,,S 108 | 998,3,"Buckley, Mr. Daniel",male,21,0,0,330920,7.8208,,Q 109 | 999,3,"Ryan, Mr. Edward",male,,0,0,383162,7.75,,Q 110 | 1000,3,"Willer, Mr. Aaron (Abi Weller"")""",male,,0,0,3410,8.7125,,S 111 | 1001,2,"Swane, Mr. George",male,18.5,0,0,248734,13,F,S 112 | 1002,2,"Stanton, Mr. Samuel Ward",male,41,0,0,237734,15.0458,,C 113 | 1003,3,"Shine, Miss. Ellen Natalia",female,,0,0,330968,7.7792,,Q 114 | 1004,1,"Evans, Miss. Edith Corse",female,36,0,0,PC 17531,31.6792,A29,C 115 | 1005,3,"Buckley, Miss. Katherine",female,18.5,0,0,329944,7.2833,,Q 116 | 1006,1,"Straus, Mrs. Isidor (Rosalie Ida Blun)",female,63,1,0,PC 17483,221.7792,C55 C57,S 117 | 1007,3,"Chronopoulos, Mr. Demetrios",male,18,1,0,2680,14.4542,,C 118 | 1008,3,"Thomas, Mr. John",male,,0,0,2681,6.4375,,C 119 | 1009,3,"Sandstrom, Miss. Beatrice Irene",female,1,1,1,PP 9549,16.7,G6,S 120 | 1010,1,"Beattie, Mr. Thomson",male,36,0,0,13050,75.2417,C6,C 121 | 1011,2,"Chapman, Mrs. John Henry (Sara Elizabeth Lawry)",female,29,1,0,SC/AH 29037,26,,S 122 | 1012,2,"Watt, Miss. Bertha J",female,12,0,0,C.A. 33595,15.75,,S 123 | 1013,3,"Kiernan, Mr. John",male,,1,0,367227,7.75,,Q 124 | 1014,1,"Schabert, Mrs. Paul (Emma Mock)",female,35,1,0,13236,57.75,C28,C 125 | 1015,3,"Carver, Mr. Alfred John",male,28,0,0,392095,7.25,,S 126 | 1016,3,"Kennedy, Mr. John",male,,0,0,368783,7.75,,Q 127 | 1017,3,"Cribb, Miss. Laura Alice",female,17,0,1,371362,16.1,,S 128 | 1018,3,"Brobeck, Mr. Karl Rudolf",male,22,0,0,350045,7.7958,,S 129 | 1019,3,"McCoy, Miss. Alicia",female,,2,0,367226,23.25,,Q 130 | 1020,2,"Bowenur, Mr. Solomon",male,42,0,0,211535,13,,S 131 | 1021,3,"Petersen, Mr. Marius",male,24,0,0,342441,8.05,,S 132 | 1022,3,"Spinner, Mr. Henry John",male,32,0,0,STON/OQ. 369943,8.05,,S 133 | 1023,1,"Gracie, Col. Archibald IV",male,53,0,0,113780,28.5,C51,C 134 | 1024,3,"Lefebre, Mrs. Frank (Frances)",female,,0,4,4133,25.4667,,S 135 | 1025,3,"Thomas, Mr. Charles P",male,,1,0,2621,6.4375,,C 136 | 1026,3,"Dintcheff, Mr. Valtcho",male,43,0,0,349226,7.8958,,S 137 | 1027,3,"Carlsson, Mr. Carl Robert",male,24,0,0,350409,7.8542,,S 138 | 1028,3,"Zakarian, Mr. Mapriededer",male,26.5,0,0,2656,7.225,,C 139 | 1029,2,"Schmidt, Mr. August",male,26,0,0,248659,13,,S 140 | 1030,3,"Drapkin, Miss. Jennie",female,23,0,0,SOTON/OQ 392083,8.05,,S 141 | 1031,3,"Goodwin, Mr. Charles Frederick",male,40,1,6,CA 2144,46.9,,S 142 | 1032,3,"Goodwin, Miss. Jessie Allis",female,10,5,2,CA 2144,46.9,,S 143 | 1033,1,"Daniels, Miss. Sarah",female,33,0,0,113781,151.55,,S 144 | 1034,1,"Ryerson, Mr. Arthur Larned",male,61,1,3,PC 17608,262.375,B57 B59 B63 B66,C 145 | 1035,2,"Beauchamp, Mr. Henry James",male,28,0,0,244358,26,,S 146 | 1036,1,"Lindeberg-Lind, Mr. Erik Gustaf (Mr Edward Lingrey"")""",male,42,0,0,17475,26.55,,S 147 | 1037,3,"Vander Planke, Mr. Julius",male,31,3,0,345763,18,,S 148 | 1038,1,"Hilliard, Mr. Herbert Henry",male,,0,0,17463,51.8625,E46,S 149 | 1039,3,"Davies, Mr. Evan",male,22,0,0,SC/A4 23568,8.05,,S 150 | 1040,1,"Crafton, Mr. John Bertram",male,,0,0,113791,26.55,,S 151 | 1041,2,"Lahtinen, Rev. William",male,30,1,1,250651,26,,S 152 | 1042,1,"Earnshaw, Mrs. Boulton (Olive Potter)",female,23,0,1,11767,83.1583,C54,C 153 | 1043,3,"Matinoff, Mr. Nicola",male,,0,0,349255,7.8958,,C 154 | 1044,3,"Storey, Mr. Thomas",male,60.5,0,0,3701,,,S 155 | 1045,3,"Klasen, Mrs. (Hulda Kristina Eugenia Lofqvist)",female,36,0,2,350405,12.1833,,S 156 | 1046,3,"Asplund, Master. Filip Oscar",male,13,4,2,347077,31.3875,,S 157 | 1047,3,"Duquemin, Mr. Joseph",male,24,0,0,S.O./P.P. 752,7.55,,S 158 | 1048,1,"Bird, Miss. Ellen",female,29,0,0,PC 17483,221.7792,C97,S 159 | 1049,3,"Lundin, Miss. Olga Elida",female,23,0,0,347469,7.8542,,S 160 | 1050,1,"Borebank, Mr. John James",male,42,0,0,110489,26.55,D22,S 161 | 1051,3,"Peacock, Mrs. Benjamin (Edith Nile)",female,26,0,2,SOTON/O.Q. 3101315,13.775,,S 162 | 1052,3,"Smyth, Miss. Julia",female,,0,0,335432,7.7333,,Q 163 | 1053,3,"Touma, Master. Georges Youssef",male,7,1,1,2650,15.2458,,C 164 | 1054,2,"Wright, Miss. Marion",female,26,0,0,220844,13.5,,S 165 | 1055,3,"Pearce, Mr. Ernest",male,,0,0,343271,7,,S 166 | 1056,2,"Peruschitz, Rev. Joseph Maria",male,41,0,0,237393,13,,S 167 | 1057,3,"Kink-Heilmann, Mrs. Anton (Luise Heilmann)",female,26,1,1,315153,22.025,,S 168 | 1058,1,"Brandeis, Mr. Emil",male,48,0,0,PC 17591,50.4958,B10,C 169 | 1059,3,"Ford, Mr. Edward Watson",male,18,2,2,W./C. 6608,34.375,,S 170 | 1060,1,"Cassebeer, Mrs. Henry Arthur Jr (Eleanor Genevieve Fosdick)",female,,0,0,17770,27.7208,,C 171 | 1061,3,"Hellstrom, Miss. Hilda Maria",female,22,0,0,7548,8.9625,,S 172 | 1062,3,"Lithman, Mr. Simon",male,,0,0,S.O./P.P. 251,7.55,,S 173 | 1063,3,"Zakarian, Mr. Ortin",male,27,0,0,2670,7.225,,C 174 | 1064,3,"Dyker, Mr. Adolf Fredrik",male,23,1,0,347072,13.9,,S 175 | 1065,3,"Torfa, Mr. Assad",male,,0,0,2673,7.2292,,C 176 | 1066,3,"Asplund, Mr. Carl Oscar Vilhelm Gustafsson",male,40,1,5,347077,31.3875,,S 177 | 1067,2,"Brown, Miss. Edith Eileen",female,15,0,2,29750,39,,S 178 | 1068,2,"Sincock, Miss. Maude",female,20,0,0,C.A. 33112,36.75,,S 179 | 1069,1,"Stengel, Mr. Charles Emil Henry",male,54,1,0,11778,55.4417,C116,C 180 | 1070,2,"Becker, Mrs. Allen Oliver (Nellie E Baumgardner)",female,36,0,3,230136,39,F4,S 181 | 1071,1,"Compton, Mrs. Alexander Taylor (Mary Eliza Ingersoll)",female,64,0,2,PC 17756,83.1583,E45,C 182 | 1072,2,"McCrie, Mr. James Matthew",male,30,0,0,233478,13,,S 183 | 1073,1,"Compton, Mr. Alexander Taylor Jr",male,37,1,1,PC 17756,83.1583,E52,C 184 | 1074,1,"Marvin, Mrs. Daniel Warner (Mary Graham Carmichael Farquarson)",female,18,1,0,113773,53.1,D30,S 185 | 1075,3,"Lane, Mr. Patrick",male,,0,0,7935,7.75,,Q 186 | 1076,1,"Douglas, Mrs. Frederick Charles (Mary Helene Baxter)",female,27,1,1,PC 17558,247.5208,B58 B60,C 187 | 1077,2,"Maybery, Mr. Frank Hubert",male,40,0,0,239059,16,,S 188 | 1078,2,"Phillips, Miss. Alice Frances Louisa",female,21,0,1,S.O./P.P. 2,21,,S 189 | 1079,3,"Davies, Mr. Joseph",male,17,2,0,A/4 48873,8.05,,S 190 | 1080,3,"Sage, Miss. Ada",female,,8,2,CA. 2343,69.55,,S 191 | 1081,2,"Veal, Mr. James",male,40,0,0,28221,13,,S 192 | 1082,2,"Angle, Mr. William A",male,34,1,0,226875,26,,S 193 | 1083,1,"Salomon, Mr. Abraham L",male,,0,0,111163,26,,S 194 | 1084,3,"van Billiard, Master. Walter John",male,11.5,1,1,A/5. 851,14.5,,S 195 | 1085,2,"Lingane, Mr. John",male,61,0,0,235509,12.35,,Q 196 | 1086,2,"Drew, Master. Marshall Brines",male,8,0,2,28220,32.5,,S 197 | 1087,3,"Karlsson, Mr. Julius Konrad Eugen",male,33,0,0,347465,7.8542,,S 198 | 1088,1,"Spedden, Master. Robert Douglas",male,6,0,2,16966,134.5,E34,C 199 | 1089,3,"Nilsson, Miss. Berta Olivia",female,18,0,0,347066,7.775,,S 200 | 1090,2,"Baimbrigge, Mr. Charles Robert",male,23,0,0,C.A. 31030,10.5,,S 201 | 1091,3,"Rasmussen, Mrs. (Lena Jacobsen Solvang)",female,,0,0,65305,8.1125,,S 202 | 1092,3,"Murphy, Miss. Nora",female,,0,0,36568,15.5,,Q 203 | 1093,3,"Danbom, Master. Gilbert Sigvard Emanuel",male,0.33,0,2,347080,14.4,,S 204 | 1094,1,"Astor, Col. John Jacob",male,47,1,0,PC 17757,227.525,C62 C64,C 205 | 1095,2,"Quick, Miss. Winifred Vera",female,8,1,1,26360,26,,S 206 | 1096,2,"Andrew, Mr. Frank Thomas",male,25,0,0,C.A. 34050,10.5,,S 207 | 1097,1,"Omont, Mr. Alfred Fernand",male,,0,0,F.C. 12998,25.7417,,C 208 | 1098,3,"McGowan, Miss. Katherine",female,35,0,0,9232,7.75,,Q 209 | 1099,2,"Collett, Mr. Sidney C Stuart",male,24,0,0,28034,10.5,,S 210 | 1100,1,"Rosenbaum, Miss. Edith Louise",female,33,0,0,PC 17613,27.7208,A11,C 211 | 1101,3,"Delalic, Mr. Redjo",male,25,0,0,349250,7.8958,,S 212 | 1102,3,"Andersen, Mr. Albert Karvin",male,32,0,0,C 4001,22.525,,S 213 | 1103,3,"Finoli, Mr. Luigi",male,,0,0,SOTON/O.Q. 3101308,7.05,,S 214 | 1104,2,"Deacon, Mr. Percy William",male,17,0,0,S.O.C. 14879,73.5,,S 215 | 1105,2,"Howard, Mrs. Benjamin (Ellen Truelove Arman)",female,60,1,0,24065,26,,S 216 | 1106,3,"Andersson, Miss. Ida Augusta Margareta",female,38,4,2,347091,7.775,,S 217 | 1107,1,"Head, Mr. Christopher",male,42,0,0,113038,42.5,B11,S 218 | 1108,3,"Mahon, Miss. Bridget Delia",female,,0,0,330924,7.8792,,Q 219 | 1109,1,"Wick, Mr. George Dennick",male,57,1,1,36928,164.8667,,S 220 | 1110,1,"Widener, Mrs. George Dunton (Eleanor Elkins)",female,50,1,1,113503,211.5,C80,C 221 | 1111,3,"Thomson, Mr. Alexander Morrison",male,,0,0,32302,8.05,,S 222 | 1112,2,"Duran y More, Miss. Florentina",female,30,1,0,SC/PARIS 2148,13.8583,,C 223 | 1113,3,"Reynolds, Mr. Harold J",male,21,0,0,342684,8.05,,S 224 | 1114,2,"Cook, Mrs. (Selena Rogers)",female,22,0,0,W./C. 14266,10.5,F33,S 225 | 1115,3,"Karlsson, Mr. Einar Gervasius",male,21,0,0,350053,7.7958,,S 226 | 1116,1,"Candee, Mrs. Edward (Helen Churchill Hungerford)",female,53,0,0,PC 17606,27.4458,,C 227 | 1117,3,"Moubarek, Mrs. George (Omine Amenia"" Alexander)""",female,,0,2,2661,15.2458,,C 228 | 1118,3,"Asplund, Mr. Johan Charles",male,23,0,0,350054,7.7958,,S 229 | 1119,3,"McNeill, Miss. Bridget",female,,0,0,370368,7.75,,Q 230 | 1120,3,"Everett, Mr. Thomas James",male,40.5,0,0,C.A. 6212,15.1,,S 231 | 1121,2,"Hocking, Mr. Samuel James Metcalfe",male,36,0,0,242963,13,,S 232 | 1122,2,"Sweet, Mr. George Frederick",male,14,0,0,220845,65,,S 233 | 1123,1,"Willard, Miss. Constance",female,21,0,0,113795,26.55,,S 234 | 1124,3,"Wiklund, Mr. Karl Johan",male,21,1,0,3101266,6.4958,,S 235 | 1125,3,"Linehan, Mr. Michael",male,,0,0,330971,7.8792,,Q 236 | 1126,1,"Cumings, Mr. John Bradley",male,39,1,0,PC 17599,71.2833,C85,C 237 | 1127,3,"Vendel, Mr. Olof Edvin",male,20,0,0,350416,7.8542,,S 238 | 1128,1,"Warren, Mr. Frank Manley",male,64,1,0,110813,75.25,D37,C 239 | 1129,3,"Baccos, Mr. Raffull",male,20,0,0,2679,7.225,,C 240 | 1130,2,"Hiltunen, Miss. Marta",female,18,1,1,250650,13,,S 241 | 1131,1,"Douglas, Mrs. Walter Donald (Mahala Dutton)",female,48,1,0,PC 17761,106.425,C86,C 242 | 1132,1,"Lindstrom, Mrs. Carl Johan (Sigrid Posse)",female,55,0,0,112377,27.7208,,C 243 | 1133,2,"Christy, Mrs. (Alice Frances)",female,45,0,2,237789,30,,S 244 | 1134,1,"Spedden, Mr. Frederic Oakley",male,45,1,1,16966,134.5,E34,C 245 | 1135,3,"Hyman, Mr. Abraham",male,,0,0,3470,7.8875,,S 246 | 1136,3,"Johnston, Master. William Arthur Willie""""",male,,1,2,W./C. 6607,23.45,,S 247 | 1137,1,"Kenyon, Mr. Frederick R",male,41,1,0,17464,51.8625,D21,S 248 | 1138,2,"Karnes, Mrs. J Frank (Claire Bennett)",female,22,0,0,F.C.C. 13534,21,,S 249 | 1139,2,"Drew, Mr. James Vivian",male,42,1,1,28220,32.5,,S 250 | 1140,2,"Hold, Mrs. Stephen (Annie Margaret Hill)",female,29,1,0,26707,26,,S 251 | 1141,3,"Khalil, Mrs. Betros (Zahie Maria"" Elias)""",female,,1,0,2660,14.4542,,C 252 | 1142,2,"West, Miss. Barbara J",female,0.92,1,2,C.A. 34651,27.75,,S 253 | 1143,3,"Abrahamsson, Mr. Abraham August Johannes",male,20,0,0,SOTON/O2 3101284,7.925,,S 254 | 1144,1,"Clark, Mr. Walter Miller",male,27,1,0,13508,136.7792,C89,C 255 | 1145,3,"Salander, Mr. Karl Johan",male,24,0,0,7266,9.325,,S 256 | 1146,3,"Wenzel, Mr. Linhart",male,32.5,0,0,345775,9.5,,S 257 | 1147,3,"MacKay, Mr. George William",male,,0,0,C.A. 42795,7.55,,S 258 | 1148,3,"Mahon, Mr. John",male,,0,0,AQ/4 3130,7.75,,Q 259 | 1149,3,"Niklasson, Mr. Samuel",male,28,0,0,363611,8.05,,S 260 | 1150,2,"Bentham, Miss. Lilian W",female,19,0,0,28404,13,,S 261 | 1151,3,"Midtsjo, Mr. Karl Albert",male,21,0,0,345501,7.775,,S 262 | 1152,3,"de Messemaeker, Mr. Guillaume Joseph",male,36.5,1,0,345572,17.4,,S 263 | 1153,3,"Nilsson, Mr. August Ferdinand",male,21,0,0,350410,7.8542,,S 264 | 1154,2,"Wells, Mrs. Arthur Henry (Addie"" Dart Trevaskis)""",female,29,0,2,29103,23,,S 265 | 1155,3,"Klasen, Miss. Gertrud Emilia",female,1,1,1,350405,12.1833,,S 266 | 1156,2,"Portaluppi, Mr. Emilio Ilario Giuseppe",male,30,0,0,C.A. 34644,12.7375,,C 267 | 1157,3,"Lyntakoff, Mr. Stanko",male,,0,0,349235,7.8958,,S 268 | 1158,1,"Chisholm, Mr. Roderick Robert Crispin",male,,0,0,112051,0,,S 269 | 1159,3,"Warren, Mr. Charles William",male,,0,0,C.A. 49867,7.55,,S 270 | 1160,3,"Howard, Miss. May Elizabeth",female,,0,0,A. 2. 39186,8.05,,S 271 | 1161,3,"Pokrnic, Mr. Mate",male,17,0,0,315095,8.6625,,S 272 | 1162,1,"McCaffry, Mr. Thomas Francis",male,46,0,0,13050,75.2417,C6,C 273 | 1163,3,"Fox, Mr. Patrick",male,,0,0,368573,7.75,,Q 274 | 1164,1,"Clark, Mrs. Walter Miller (Virginia McDowell)",female,26,1,0,13508,136.7792,C89,C 275 | 1165,3,"Lennon, Miss. Mary",female,,1,0,370371,15.5,,Q 276 | 1166,3,"Saade, Mr. Jean Nassr",male,,0,0,2676,7.225,,C 277 | 1167,2,"Bryhl, Miss. Dagmar Jenny Ingeborg ",female,20,1,0,236853,26,,S 278 | 1168,2,"Parker, Mr. Clifford Richard",male,28,0,0,SC 14888,10.5,,S 279 | 1169,2,"Faunthorpe, Mr. Harry",male,40,1,0,2926,26,,S 280 | 1170,2,"Ware, Mr. John James",male,30,1,0,CA 31352,21,,S 281 | 1171,2,"Oxenham, Mr. Percy Thomas",male,22,0,0,W./C. 14260,10.5,,S 282 | 1172,3,"Oreskovic, Miss. Jelka",female,23,0,0,315085,8.6625,,S 283 | 1173,3,"Peacock, Master. Alfred Edward",male,0.75,1,1,SOTON/O.Q. 3101315,13.775,,S 284 | 1174,3,"Fleming, Miss. Honora",female,,0,0,364859,7.75,,Q 285 | 1175,3,"Touma, Miss. Maria Youssef",female,9,1,1,2650,15.2458,,C 286 | 1176,3,"Rosblom, Miss. Salli Helena",female,2,1,1,370129,20.2125,,S 287 | 1177,3,"Dennis, Mr. William",male,36,0,0,A/5 21175,7.25,,S 288 | 1178,3,"Franklin, Mr. Charles (Charles Fardon)",male,,0,0,SOTON/O.Q. 3101314,7.25,,S 289 | 1179,1,"Snyder, Mr. John Pillsbury",male,24,1,0,21228,82.2667,B45,S 290 | 1180,3,"Mardirosian, Mr. Sarkis",male,,0,0,2655,7.2292,F E46,C 291 | 1181,3,"Ford, Mr. Arthur",male,,0,0,A/5 1478,8.05,,S 292 | 1182,1,"Rheims, Mr. George Alexander Lucien",male,,0,0,PC 17607,39.6,,S 293 | 1183,3,"Daly, Miss. Margaret Marcella Maggie""""",female,30,0,0,382650,6.95,,Q 294 | 1184,3,"Nasr, Mr. Mustafa",male,,0,0,2652,7.2292,,C 295 | 1185,1,"Dodge, Dr. Washington",male,53,1,1,33638,81.8583,A34,S 296 | 1186,3,"Wittevrongel, Mr. Camille",male,36,0,0,345771,9.5,,S 297 | 1187,3,"Angheloff, Mr. Minko",male,26,0,0,349202,7.8958,,S 298 | 1188,2,"Laroche, Miss. Louise",female,1,1,2,SC/Paris 2123,41.5792,,C 299 | 1189,3,"Samaan, Mr. Hanna",male,,2,0,2662,21.6792,,C 300 | 1190,1,"Loring, Mr. Joseph Holland",male,30,0,0,113801,45.5,,S 301 | 1191,3,"Johansson, Mr. Nils",male,29,0,0,347467,7.8542,,S 302 | 1192,3,"Olsson, Mr. Oscar Wilhelm",male,32,0,0,347079,7.775,,S 303 | 1193,2,"Malachard, Mr. Noel",male,,0,0,237735,15.0458,D,C 304 | 1194,2,"Phillips, Mr. Escott Robert",male,43,0,1,S.O./P.P. 2,21,,S 305 | 1195,3,"Pokrnic, Mr. Tome",male,24,0,0,315092,8.6625,,S 306 | 1196,3,"McCarthy, Miss. Catherine Katie""""",female,,0,0,383123,7.75,,Q 307 | 1197,1,"Crosby, Mrs. Edward Gifford (Catherine Elizabeth Halstead)",female,64,1,1,112901,26.55,B26,S 308 | 1198,1,"Allison, Mr. Hudson Joshua Creighton",male,30,1,2,113781,151.55,C22 C26,S 309 | 1199,3,"Aks, Master. Philip Frank",male,0.83,0,1,392091,9.35,,S 310 | 1200,1,"Hays, Mr. Charles Melville",male,55,1,1,12749,93.5,B69,S 311 | 1201,3,"Hansen, Mrs. Claus Peter (Jennie L Howard)",female,45,1,0,350026,14.1083,,S 312 | 1202,3,"Cacic, Mr. Jego Grga",male,18,0,0,315091,8.6625,,S 313 | 1203,3,"Vartanian, Mr. David",male,22,0,0,2658,7.225,,C 314 | 1204,3,"Sadowitz, Mr. Harry",male,,0,0,LP 1588,7.575,,S 315 | 1205,3,"Carr, Miss. Jeannie",female,37,0,0,368364,7.75,,Q 316 | 1206,1,"White, Mrs. John Stuart (Ella Holmes)",female,55,0,0,PC 17760,135.6333,C32,C 317 | 1207,3,"Hagardon, Miss. Kate",female,17,0,0,AQ/3. 30631,7.7333,,Q 318 | 1208,1,"Spencer, Mr. William Augustus",male,57,1,0,PC 17569,146.5208,B78,C 319 | 1209,2,"Rogers, Mr. Reginald Harry",male,19,0,0,28004,10.5,,S 320 | 1210,3,"Jonsson, Mr. Nils Hilding",male,27,0,0,350408,7.8542,,S 321 | 1211,2,"Jefferys, Mr. Ernest Wilfred",male,22,2,0,C.A. 31029,31.5,,S 322 | 1212,3,"Andersson, Mr. Johan Samuel",male,26,0,0,347075,7.775,,S 323 | 1213,3,"Krekorian, Mr. Neshan",male,25,0,0,2654,7.2292,F E57,C 324 | 1214,2,"Nesson, Mr. Israel",male,26,0,0,244368,13,F2,S 325 | 1215,1,"Rowe, Mr. Alfred G",male,33,0,0,113790,26.55,,S 326 | 1216,1,"Kreuchen, Miss. Emilie",female,39,0,0,24160,211.3375,,S 327 | 1217,3,"Assam, Mr. Ali",male,23,0,0,SOTON/O.Q. 3101309,7.05,,S 328 | 1218,2,"Becker, Miss. Ruth Elizabeth",female,12,2,1,230136,39,F4,S 329 | 1219,1,"Rosenshine, Mr. George (Mr George Thorne"")""",male,46,0,0,PC 17585,79.2,,C 330 | 1220,2,"Clarke, Mr. Charles Valentine",male,29,1,0,2003,26,,S 331 | 1221,2,"Enander, Mr. Ingvar",male,21,0,0,236854,13,,S 332 | 1222,2,"Davies, Mrs. John Morgan (Elizabeth Agnes Mary White) ",female,48,0,2,C.A. 33112,36.75,,S 333 | 1223,1,"Dulles, Mr. William Crothers",male,39,0,0,PC 17580,29.7,A18,C 334 | 1224,3,"Thomas, Mr. Tannous",male,,0,0,2684,7.225,,C 335 | 1225,3,"Nakid, Mrs. Said (Waika Mary"" Mowad)""",female,19,1,1,2653,15.7417,,C 336 | 1226,3,"Cor, Mr. Ivan",male,27,0,0,349229,7.8958,,S 337 | 1227,1,"Maguire, Mr. John Edward",male,30,0,0,110469,26,C106,S 338 | 1228,2,"de Brito, Mr. Jose Joaquim",male,32,0,0,244360,13,,S 339 | 1229,3,"Elias, Mr. Joseph",male,39,0,2,2675,7.2292,,C 340 | 1230,2,"Denbury, Mr. Herbert",male,25,0,0,C.A. 31029,31.5,,S 341 | 1231,3,"Betros, Master. Seman",male,,0,0,2622,7.2292,,C 342 | 1232,2,"Fillbrook, Mr. Joseph Charles",male,18,0,0,C.A. 15185,10.5,,S 343 | 1233,3,"Lundstrom, Mr. Thure Edvin",male,32,0,0,350403,7.5792,,S 344 | 1234,3,"Sage, Mr. John George",male,,1,9,CA. 2343,69.55,,S 345 | 1235,1,"Cardeza, Mrs. James Warburton Martinez (Charlotte Wardle Drake)",female,58,0,1,PC 17755,512.3292,B51 B53 B55,C 346 | 1236,3,"van Billiard, Master. James William",male,,1,1,A/5. 851,14.5,,S 347 | 1237,3,"Abelseth, Miss. Karen Marie",female,16,0,0,348125,7.65,,S 348 | 1238,2,"Botsford, Mr. William Hull",male,26,0,0,237670,13,,S 349 | 1239,3,"Whabee, Mrs. George Joseph (Shawneene Abi-Saab)",female,38,0,0,2688,7.2292,,C 350 | 1240,2,"Giles, Mr. Ralph",male,24,0,0,248726,13.5,,S 351 | 1241,2,"Walcroft, Miss. Nellie",female,31,0,0,F.C.C. 13528,21,,S 352 | 1242,1,"Greenfield, Mrs. Leo David (Blanche Strouse)",female,45,0,1,PC 17759,63.3583,D10 D12,C 353 | 1243,2,"Stokes, Mr. Philip Joseph",male,25,0,0,F.C.C. 13540,10.5,,S 354 | 1244,2,"Dibden, Mr. William",male,18,0,0,S.O.C. 14879,73.5,,S 355 | 1245,2,"Herman, Mr. Samuel",male,49,1,2,220845,65,,S 356 | 1246,3,"Dean, Miss. Elizabeth Gladys Millvina""""",female,0.17,1,2,C.A. 2315,20.575,,S 357 | 1247,1,"Julian, Mr. Henry Forbes",male,50,0,0,113044,26,E60,S 358 | 1248,1,"Brown, Mrs. John Murray (Caroline Lane Lamson)",female,59,2,0,11769,51.4792,C101,S 359 | 1249,3,"Lockyer, Mr. Edward",male,,0,0,1222,7.8792,,S 360 | 1250,3,"O'Keefe, Mr. Patrick",male,,0,0,368402,7.75,,Q 361 | 1251,3,"Lindell, Mrs. Edvard Bengtsson (Elin Gerda Persson)",female,30,1,0,349910,15.55,,S 362 | 1252,3,"Sage, Master. William Henry",male,14.5,8,2,CA. 2343,69.55,,S 363 | 1253,2,"Mallet, Mrs. Albert (Antoinette Magnin)",female,24,1,1,S.C./PARIS 2079,37.0042,,C 364 | 1254,2,"Ware, Mrs. John James (Florence Louise Long)",female,31,0,0,CA 31352,21,,S 365 | 1255,3,"Strilic, Mr. Ivan",male,27,0,0,315083,8.6625,,S 366 | 1256,1,"Harder, Mrs. George Achilles (Dorothy Annan)",female,25,1,0,11765,55.4417,E50,C 367 | 1257,3,"Sage, Mrs. John (Annie Bullen)",female,,1,9,CA. 2343,69.55,,S 368 | 1258,3,"Caram, Mr. Joseph",male,,1,0,2689,14.4583,,C 369 | 1259,3,"Riihivouri, Miss. Susanna Juhantytar Sanni""""",female,22,0,0,3101295,39.6875,,S 370 | 1260,1,"Gibson, Mrs. Leonard (Pauline C Boeson)",female,45,0,1,112378,59.4,,C 371 | 1261,2,"Pallas y Castello, Mr. Emilio",male,29,0,0,SC/PARIS 2147,13.8583,,C 372 | 1262,2,"Giles, Mr. Edgar",male,21,1,0,28133,11.5,,S 373 | 1263,1,"Wilson, Miss. Helen Alice",female,31,0,0,16966,134.5,E39 E41,C 374 | 1264,1,"Ismay, Mr. Joseph Bruce",male,49,0,0,112058,0,B52 B54 B56,S 375 | 1265,2,"Harbeck, Mr. William H",male,44,0,0,248746,13,,S 376 | 1266,1,"Dodge, Mrs. Washington (Ruth Vidaver)",female,54,1,1,33638,81.8583,A34,S 377 | 1267,1,"Bowen, Miss. Grace Scott",female,45,0,0,PC 17608,262.375,,C 378 | 1268,3,"Kink, Miss. Maria",female,22,2,0,315152,8.6625,,S 379 | 1269,2,"Cotterill, Mr. Henry Harry""""",male,21,0,0,29107,11.5,,S 380 | 1270,1,"Hipkins, Mr. William Edward",male,55,0,0,680,50,C39,S 381 | 1271,3,"Asplund, Master. Carl Edgar",male,5,4,2,347077,31.3875,,S 382 | 1272,3,"O'Connor, Mr. Patrick",male,,0,0,366713,7.75,,Q 383 | 1273,3,"Foley, Mr. Joseph",male,26,0,0,330910,7.8792,,Q 384 | 1274,3,"Risien, Mrs. Samuel (Emma)",female,,0,0,364498,14.5,,S 385 | 1275,3,"McNamee, Mrs. Neal (Eileen O'Leary)",female,19,1,0,376566,16.1,,S 386 | 1276,2,"Wheeler, Mr. Edwin Frederick""""",male,,0,0,SC/PARIS 2159,12.875,,S 387 | 1277,2,"Herman, Miss. Kate",female,24,1,2,220845,65,,S 388 | 1278,3,"Aronsson, Mr. Ernst Axel Algot",male,24,0,0,349911,7.775,,S 389 | 1279,2,"Ashby, Mr. John",male,57,0,0,244346,13,,S 390 | 1280,3,"Canavan, Mr. Patrick",male,21,0,0,364858,7.75,,Q 391 | 1281,3,"Palsson, Master. Paul Folke",male,6,3,1,349909,21.075,,S 392 | 1282,1,"Payne, Mr. Vivian Ponsonby",male,23,0,0,12749,93.5,B24,S 393 | 1283,1,"Lines, Mrs. Ernest H (Elizabeth Lindsey James)",female,51,0,1,PC 17592,39.4,D28,S 394 | 1284,3,"Abbott, Master. Eugene Joseph",male,13,0,2,C.A. 2673,20.25,,S 395 | 1285,2,"Gilbert, Mr. William",male,47,0,0,C.A. 30769,10.5,,S 396 | 1286,3,"Kink-Heilmann, Mr. Anton",male,29,3,1,315153,22.025,,S 397 | 1287,1,"Smith, Mrs. Lucien Philip (Mary Eloise Hughes)",female,18,1,0,13695,60,C31,S 398 | 1288,3,"Colbert, Mr. Patrick",male,24,0,0,371109,7.25,,Q 399 | 1289,1,"Frolicher-Stehli, Mrs. Maxmillian (Margaretha Emerentia Stehli)",female,48,1,1,13567,79.2,B41,C 400 | 1290,3,"Larsson-Rondberg, Mr. Edvard A",male,22,0,0,347065,7.775,,S 401 | 1291,3,"Conlon, Mr. Thomas Henry",male,31,0,0,21332,7.7333,,Q 402 | 1292,1,"Bonnell, Miss. Caroline",female,30,0,0,36928,164.8667,C7,S 403 | 1293,2,"Gale, Mr. Harry",male,38,1,0,28664,21,,S 404 | 1294,1,"Gibson, Miss. Dorothy Winifred",female,22,0,1,112378,59.4,,C 405 | 1295,1,"Carrau, Mr. Jose Pedro",male,17,0,0,113059,47.1,,S 406 | 1296,1,"Frauenthal, Mr. Isaac Gerald",male,43,1,0,17765,27.7208,D40,C 407 | 1297,2,"Nourney, Mr. Alfred (Baron von Drachstedt"")""",male,20,0,0,SC/PARIS 2166,13.8625,D38,C 408 | 1298,2,"Ware, Mr. William Jeffery",male,23,1,0,28666,10.5,,S 409 | 1299,1,"Widener, Mr. George Dunton",male,50,1,1,113503,211.5,C80,C 410 | 1300,3,"Riordan, Miss. Johanna Hannah""""",female,,0,0,334915,7.7208,,Q 411 | 1301,3,"Peacock, Miss. Treasteall",female,3,1,1,SOTON/O.Q. 3101315,13.775,,S 412 | 1302,3,"Naughton, Miss. Hannah",female,,0,0,365237,7.75,,Q 413 | 1303,1,"Minahan, Mrs. William Edward (Lillian E Thorpe)",female,37,1,0,19928,90,C78,Q 414 | 1304,3,"Henriksson, Miss. Jenny Lovisa",female,28,0,0,347086,7.775,,S 415 | 1305,3,"Spector, Mr. Woolf",male,,0,0,A.5. 3236,8.05,,S 416 | 1306,1,"Oliva y Ocana, Dona. Fermina",female,39,0,0,PC 17758,108.9,C105,C 417 | 1307,3,"Saether, Mr. Simon Sivertsen",male,38.5,0,0,SOTON/O.Q. 3101262,7.25,,S 418 | 1308,3,"Ware, Mr. Frederick",male,,0,0,359309,8.05,,S 419 | 1309,3,"Peter, Master. Michael J",male,,1,1,2668,22.3583,,C 420 | -------------------------------------------------------------------------------- /010 Partial Differential Equations/01 Partial Differential Equations.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "deletable": true, 7 | "editable": true 8 | }, 9 | "source": [ 10 | "# Partial Differential Equations " 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "metadata": { 17 | "collapsed": false, 18 | "deletable": true, 19 | "editable": true 20 | }, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "Populating the interactive namespace from numpy and matplotlib\n" 27 | ] 28 | } 29 | ], 30 | "source": [ 31 | "%pylab inline\n", 32 | "import tensorflow as tf\n", 33 | "import numpy as np\n", 34 | "import PIL.Image\n", 35 | "\n", 36 | "from io import BytesIO\n", 37 | "from IPython.display import clear_output, Image, display" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": { 43 | "deletable": true, 44 | "editable": true 45 | }, 46 | "source": [ 47 | "### Array to Image\n", 48 | "\n", 49 | "pond's surface의 상태를 이미지로 보여주는 함수" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 2, 55 | "metadata": { 56 | "collapsed": true, 57 | "deletable": true, 58 | "editable": true 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "def display_array(a, format='jpeg', rng=[0, 1]):\n", 63 | " \"\"\"\n", 64 | " display an array as a picture\n", 65 | " \"\"\"\n", 66 | " a = (a - rng[0])/float(rng[1] - rng[0])*255 # array는 0~1사이의 값을 갖는데, min-max를 통해 0~255사이의 값으로 변환\n", 67 | " a = np.uint8(np.clip(a, 0, 255))\n", 68 | " f = BytesIO()\n", 69 | " PIL.Image.fromarray(a).save(f, format)\n", 70 | " clear_output(wait=True)\n", 71 | " display(Image(data=f.getvalue()))" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": { 77 | "deletable": true, 78 | "editable": true 79 | }, 80 | "source": [ 81 | "### Computational Convenience Functions " 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 3, 87 | "metadata": { 88 | "collapsed": true, 89 | "deletable": true, 90 | "editable": true 91 | }, 92 | "outputs": [], 93 | "source": [ 94 | "def make_kernel(a):\n", 95 | " \"\"\"\n", 96 | " Transform a 2D array into a convolutional kernel\n", 97 | " \"\"\"\n", 98 | " a = np.asarray(a)\n", 99 | " a = a.reshape(list(a.shape) + [1, 1])\n", 100 | " return tf.constant(a, dtype=1)\n", 101 | "\n", 102 | "def simple_conv(x, k):\n", 103 | " \"\"\" \n", 104 | " A simplified 2D convolution operation\n", 105 | " \"\"\"\n", 106 | " x = tf.expand_dims(tf.expand_dims(x, 0), -1)\n", 107 | " y = tf.nn.depthwise_conv2d(x, k, [1, 1, 1, 1], padding='SAME')\n", 108 | " return y[0, :, :, 0]\n", 109 | "\n", 110 | "def laplace(x): \n", 111 | " laplace_k = make_kernel([[0.5, 1.0, 0.5],\n", 112 | " [1.0, -6., 1.0],\n", 113 | " [0.5, 1.0, 0.5]])\n", 114 | " return simple_conv(x, laplace_k) \n" 115 | ] 116 | }, 117 | { 118 | "cell_type": "markdown", 119 | "metadata": { 120 | "deletable": true, 121 | "editable": true 122 | }, 123 | "source": [ 124 | "### Create an interactive session" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 4, 130 | "metadata": { 131 | "collapsed": true, 132 | "deletable": true, 133 | "editable": true 134 | }, 135 | "outputs": [], 136 | "source": [ 137 | "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.1, allow_growth=True)\n", 138 | "sess = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))" 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "metadata": { 144 | "deletable": true, 145 | "editable": true 146 | }, 147 | "source": [ 148 | "### Configurations\n", 149 | "\n", 150 | "N 값은 pond를 나타내며 500 * 500 정사각형입니다. " 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": 5, 156 | "metadata": { 157 | "collapsed": true, 158 | "deletable": true, 159 | "editable": true 160 | }, 161 | "outputs": [], 162 | "source": [ 163 | "N = 500" 164 | ] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "metadata": { 169 | "deletable": true, 170 | "editable": true 171 | }, 172 | "source": [ 173 | "### Create a pond!" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 6, 179 | "metadata": { 180 | "collapsed": false, 181 | "deletable": true, 182 | "editable": true 183 | }, 184 | "outputs": [ 185 | { 186 | "data": { 187 | "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a\nHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAH0AfQBAREA/8QAHwAAAQUBAQEB\nAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1Fh\nByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZ\nWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG\nx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/AEoooop0bmORZFCkqQQG\nUMOPUHg/Q02iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiilVS7hRj\nJOBkgD8z0pKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\nKKKKKKKKKKKKdHG8sixxozu5CqqjJJPQAU2iiiiiiiiiiiiiiiiiiiinRuY5FkUKSpBAZQw49QeD\n9DTaKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\nKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKdGUEimRWZARuCtgkd8HBx+RptFFFFFFF\nFFFFFFFFOkUJIyq6uASA65w3uMgH8xTaKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\nKKKKKKKKKc6hWADq4wDlc9xnHI7dPw702iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiinRqHkVWdUBIBds4X3OAT+QptFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\nFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\nFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\nFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFOkCCRhGzMgJ2llwSO2Rk4/M02i\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiinSKEkZVdXAJAdc4b3GQD+YptFFFF\nFFFFFFFFFFFFFFFFFFOWR0V1V2UONrAHG4ZBwfXkA/hTaKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\nKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKc\nzBlQBFUqMEjPzck5OT744x0ptFFFFFFFFFOQIWPmMyjB5Vc8447jvj6e/Sm0UUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU4ITG0mVwCARuGe\nc9up6de3HqKbRRS5O0LxgHPTmkoooooooooooooooooooooooooooooooooooooooooooooooooo\noooooooooopzuZGBIUEAD5VA6DHb6de/Wm0UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUU5lCqhDqxYZIGfl5Iwcj2zxnrTaKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\nKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\nKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\nKKdGEMiiRmVCRuKrkgd8DIz+YptFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFOdDGwBKk\nkA/KwPUZ7fXp26U2iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiinKhZXIK4QZOW\nA7gcZ69eg+vam0UUUUUUUUUUUUUUUUUUUUUU5JHjYsjspIK5U44IwR+IJFNooooooopzMGVAEVSo\nwSM/NyTk5PvjjHSm0UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUrEFiQoUE9B0FJRRRRRRRRRRRRRRRRRRTlUMrkuqlRkA5+\nbkDAwPfPOOlNooooooooooooooooooooooooooopxkcxrGXYopLBc8AnGTj3wPyFNooooooooooo\nooooopwjcxtIEYopClscAnOBn3wfyNNooooooooooooooooooooooooooooopyBCx8xmUYPKrnnH\nHcd8fT36U2iiiinSKEkZVdXAJAdc4b3GQD+YptFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\nFFFFFFFOjKCRTIrMgI3BWwSO+Dg4/I02iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiinOhjYAlSSAflYHqM9vr07dKbRRRRRRRRRRR\nRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\nRRRRRRRRRRRRRRRRRRRTpFCSMqurgEgOucN7jIB/MU2iiiiiiiiiiiiiiiiiiiiiiiiiiiiinByI\n2TC4JBJ2jPGe/Uden09BTaKKKKKKKKKKKKKKKKKKKKKchQMfMVmGDwrY5xx2PfH19utNoooooooo\nooooopzMGVAEVSowSM/NyTk5PvjjHSm0UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUccY/Giiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\niiiiiiiiiiiiiiinOhjYAlSSAflYHqM9vr07dKbRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\nRRRRRRRRRRRRRRRRRRRRRRRRRRRRTkcxsSApJBHzKD1GO/169utNooooooooooooooooooooopxY\nGNV2KCCSX5yc44644x6dz7YbRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\nRRRRRRRRRRRRRTmKFU2qwIHzEtnJyenHHGPX+gbRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\nRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\nRRRRRRRRRRRRRX//2Q==\n", 188 | "text/plain": [ 189 | "" 190 | ] 191 | }, 192 | "metadata": {}, 193 | "output_type": "display_data" 194 | } 195 | ], 196 | "source": [ 197 | "u_init = np.zeros([N, N], dtype='float32')\n", 198 | "ut_init = np.zeros([N, N], dtype='float32')\n", 199 | "\n", 200 | "# Some rain drops hit a pond at random points\n", 201 | "for n in range(40):\n", 202 | " rain_x, rain_y = np.random.randint(0, N, 2)\n", 203 | " u_init[rain_x, rain_y] = np.random.uniform()\n", 204 | "\n", 205 | "display_array(u_init, rng=[-0.1, 0.1])" 206 | ] 207 | }, 208 | { 209 | "cell_type": "markdown", 210 | "metadata": { 211 | "deletable": true, 212 | "editable": true 213 | }, 214 | "source": [ 215 | "### Pond Differential Equation\n", 216 | "\n", 217 | "1. eps -- time resolution
\n", 218 | "2. damping -- save damping " 219 | ] 220 | }, 221 | { 222 | "cell_type": "code", 223 | "execution_count": 11, 224 | "metadata": { 225 | "collapsed": false, 226 | "deletable": true, 227 | "editable": true, 228 | "scrolled": false 229 | }, 230 | "outputs": [], 231 | "source": [ 232 | "eps = tf.placeholder(tf.float32, shape=())\n", 233 | "damping = tf.placeholder(tf.float32, shape=())\n", 234 | "\n", 235 | "# simulation state\n", 236 | "U = tf.Variable(u_init)\n", 237 | "Ut = tf.Variable(ut_init)\n", 238 | "\n", 239 | "# Discretized PDE update rules\n", 240 | "U_ = U + eps * Ut\n", 241 | "Ut_ = Ut + eps * (laplace(U) - damping * Ut)\n", 242 | "\n", 243 | "# Operation to update the state\n", 244 | "step = tf.group(U.assign(U_), Ut.assign(Ut_))" 245 | ] 246 | }, 247 | { 248 | "cell_type": "markdown", 249 | "metadata": { 250 | "deletable": true, 251 | "editable": true 252 | }, 253 | "source": [ 254 | "### Run the simulation" 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": 24, 260 | "metadata": { 261 | "collapsed": false, 262 | "deletable": true, 263 | "editable": true 264 | }, 265 | "outputs": [ 266 | { 267 | "data": { 268 | "image/jpeg": "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\n", 269 | "text/plain": [ 270 | "" 271 | ] 272 | }, 273 | "metadata": {}, 274 | "output_type": "display_data" 275 | } 276 | ], 277 | "source": [ 278 | "tf.global_variables_initializer().run()\n", 279 | "\n", 280 | "for i in range(1000):\n", 281 | " step.run({eps: 0.03, damping: 0.04})\n", 282 | " display_array(U.eval(), rng=[-0.1, 0.1])" 283 | ] 284 | } 285 | ], 286 | "metadata": { 287 | "kernelspec": { 288 | "display_name": "Python 3", 289 | "language": "python", 290 | "name": "python3" 291 | }, 292 | "language_info": { 293 | "codemirror_mode": { 294 | "name": "ipython", 295 | "version": 3 296 | }, 297 | "file_extension": ".py", 298 | "mimetype": "text/x-python", 299 | "name": "python", 300 | "nbconvert_exporter": "python", 301 | "pygments_lexer": "ipython3", 302 | "version": "3.6.0" 303 | } 304 | }, 305 | "nbformat": 4, 306 | "nbformat_minor": 2 307 | } 308 | --------------------------------------------------------------------------------