├── .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 | " Survived | \n",
79 | " Age | \n",
80 | " SibSp | \n",
81 | " Parch | \n",
82 | " Fare | \n",
83 | " Pclass_1 | \n",
84 | " Pclass_2 | \n",
85 | " Pclass_3 | \n",
86 | " Sex_female | \n",
87 | " Sex_male | \n",
88 | " Embarked_C | \n",
89 | " Embarked_Q | \n",
90 | " Embarked_S | \n",
91 | "
\n",
92 | " \n",
93 | " \n",
94 | " \n",
95 | " | 0 | \n",
96 | " 0 | \n",
97 | " 22.0 | \n",
98 | " 1 | \n",
99 | " 0 | \n",
100 | " 7.2500 | \n",
101 | " 0 | \n",
102 | " 0 | \n",
103 | " 1 | \n",
104 | " 0 | \n",
105 | " 1 | \n",
106 | " 0 | \n",
107 | " 0 | \n",
108 | " 1 | \n",
109 | "
\n",
110 | " \n",
111 | " | 1 | \n",
112 | " 1 | \n",
113 | " 38.0 | \n",
114 | " 1 | \n",
115 | " 0 | \n",
116 | " 71.2833 | \n",
117 | " 1 | \n",
118 | " 0 | \n",
119 | " 0 | \n",
120 | " 1 | \n",
121 | " 0 | \n",
122 | " 1 | \n",
123 | " 0 | \n",
124 | " 0 | \n",
125 | "
\n",
126 | " \n",
127 | " | 2 | \n",
128 | " 1 | \n",
129 | " 26.0 | \n",
130 | " 0 | \n",
131 | " 0 | \n",
132 | " 7.9250 | \n",
133 | " 0 | \n",
134 | " 0 | \n",
135 | " 1 | \n",
136 | " 1 | \n",
137 | " 0 | \n",
138 | " 0 | \n",
139 | " 0 | \n",
140 | " 1 | \n",
141 | "
\n",
142 | " \n",
143 | " | 3 | \n",
144 | " 1 | \n",
145 | " 35.0 | \n",
146 | " 1 | \n",
147 | " 0 | \n",
148 | " 53.1000 | \n",
149 | " 1 | \n",
150 | " 0 | \n",
151 | " 0 | \n",
152 | " 1 | \n",
153 | " 0 | \n",
154 | " 0 | \n",
155 | " 0 | \n",
156 | " 1 | \n",
157 | "
\n",
158 | " \n",
159 | " | 4 | \n",
160 | " 0 | \n",
161 | " 35.0 | \n",
162 | " 0 | \n",
163 | " 0 | \n",
164 | " 8.0500 | \n",
165 | " 0 | \n",
166 | " 0 | \n",
167 | " 1 | \n",
168 | " 0 | \n",
169 | " 1 | \n",
170 | " 0 | \n",
171 | " 0 | \n",
172 | " 1 | \n",
173 | "
\n",
174 | " \n",
175 | "
\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 | " Survived | \n",
273 | " Age | \n",
274 | " SibSp | \n",
275 | " Parch | \n",
276 | " Fare | \n",
277 | " Pclass_1 | \n",
278 | " Pclass_2 | \n",
279 | " Pclass_3 | \n",
280 | " Sex_female | \n",
281 | " Sex_male | \n",
282 | " Embarked_C | \n",
283 | " Embarked_Q | \n",
284 | " Embarked_S | \n",
285 | "
\n",
286 | " \n",
287 | " \n",
288 | " \n",
289 | "
\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 | " Survived | \n",
342 | " Age | \n",
343 | " SibSp | \n",
344 | " Parch | \n",
345 | " Fare | \n",
346 | " Pclass_1 | \n",
347 | " Pclass_2 | \n",
348 | " Pclass_3 | \n",
349 | " Sex_female | \n",
350 | " Sex_male | \n",
351 | " Embarked_C | \n",
352 | " Embarked_Q | \n",
353 | " Embarked_S | \n",
354 | "
\n",
355 | " \n",
356 | " \n",
357 | " \n",
358 | " | 0 | \n",
359 | " 0 | \n",
360 | " 0.2750 | \n",
361 | " 0.125 | \n",
362 | " 0.0 | \n",
363 | " 0.014151 | \n",
364 | " 0 | \n",
365 | " 0 | \n",
366 | " 1 | \n",
367 | " 0 | \n",
368 | " 1 | \n",
369 | " 0 | \n",
370 | " 0 | \n",
371 | " 1 | \n",
372 | "
\n",
373 | " \n",
374 | " | 1 | \n",
375 | " 1 | \n",
376 | " 0.4750 | \n",
377 | " 0.125 | \n",
378 | " 0.0 | \n",
379 | " 0.139136 | \n",
380 | " 1 | \n",
381 | " 0 | \n",
382 | " 0 | \n",
383 | " 1 | \n",
384 | " 0 | \n",
385 | " 1 | \n",
386 | " 0 | \n",
387 | " 0 | \n",
388 | "
\n",
389 | " \n",
390 | " | 2 | \n",
391 | " 1 | \n",
392 | " 0.3250 | \n",
393 | " 0.000 | \n",
394 | " 0.0 | \n",
395 | " 0.015469 | \n",
396 | " 0 | \n",
397 | " 0 | \n",
398 | " 1 | \n",
399 | " 1 | \n",
400 | " 0 | \n",
401 | " 0 | \n",
402 | " 0 | \n",
403 | " 1 | \n",
404 | "
\n",
405 | " \n",
406 | " | 3 | \n",
407 | " 1 | \n",
408 | " 0.4375 | \n",
409 | " 0.125 | \n",
410 | " 0.0 | \n",
411 | " 0.103644 | \n",
412 | " 1 | \n",
413 | " 0 | \n",
414 | " 0 | \n",
415 | " 1 | \n",
416 | " 0 | \n",
417 | " 0 | \n",
418 | " 0 | \n",
419 | " 1 | \n",
420 | "
\n",
421 | " \n",
422 | " | 4 | \n",
423 | " 0 | \n",
424 | " 0.4375 | \n",
425 | " 0.000 | \n",
426 | " 0.0 | \n",
427 | " 0.015713 | \n",
428 | " 0 | \n",
429 | " 0 | \n",
430 | " 1 | \n",
431 | " 0 | \n",
432 | " 1 | \n",
433 | " 0 | \n",
434 | " 0 | \n",
435 | " 1 | \n",
436 | "
\n",
437 | " \n",
438 | "
\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 |
--------------------------------------------------------------------------------