Files
hands-on/14_recurrent_neural_networks.ipynb

3509 lines
627 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPython 3.5.5\n",
"IPython 6.3.0\n",
"\n",
"numpy 1.14.3\n",
"sklearn 0.19.1\n",
"scipy 1.0.1\n",
"matplotlib 2.2.2\n",
"tensorflow 1.8.0\n"
]
}
],
"source": [
"%load_ext watermark\n",
"%watermark -v -p numpy,sklearn,scipy,matplotlib,tensorflow"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**14장 순환 신경망**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_이 노트북은 14장에 있는 모든 샘플 코드와 연습문제 해답을 가지고 있습니다._"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 설정"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"파이썬 2와 3을 모두 지원합니다. 공통 모듈을 임포트하고 맷플롯립 그림이 노트북 안에 포함되도록 설정하고 생성한 그림을 저장하기 위한 함수를 준비합니다:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# 파이썬 2와 파이썬 3 지원\n",
"from __future__ import division, print_function, unicode_literals\n",
"\n",
"# 공통\n",
"import numpy as np\n",
"import os\n",
"\n",
"# 일관된 출력을 위해 유사난수 초기화\n",
"def reset_graph(seed=42):\n",
" tf.reset_default_graph()\n",
" tf.set_random_seed(seed)\n",
" np.random.seed(seed)\n",
"\n",
"# 맷플롯립 설정\n",
"%matplotlib inline\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"plt.rcParams['axes.labelsize'] = 14\n",
"plt.rcParams['xtick.labelsize'] = 12\n",
"plt.rcParams['ytick.labelsize'] = 12\n",
"\n",
"# 한글출력\n",
"plt.rcParams['font.family'] = 'NanumBarunGothic'\n",
"plt.rcParams['axes.unicode_minus'] = False\n",
"\n",
"# 그림을 저장할 폴더\n",
"PROJECT_ROOT_DIR = \".\"\n",
"CHAPTER_ID = \"rnn\"\n",
"\n",
"def save_fig(fig_id, tight_layout=True):\n",
" path = os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID, fig_id + \".png\")\n",
" if tight_layout:\n",
" plt.tight_layout()\n",
" plt.savefig(path, format='png', dpi=300)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"텐서플로를 임포트합니다:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 기본 RNN"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 수동으로 RNN 만들기"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_inputs = 3\n",
"n_neurons = 5\n",
"\n",
"X0 = tf.placeholder(tf.float32, [None, n_inputs])\n",
"X1 = tf.placeholder(tf.float32, [None, n_inputs])\n",
"\n",
"Wx = tf.Variable(tf.random_normal(shape=[n_inputs, n_neurons],dtype=tf.float32))\n",
"Wy = tf.Variable(tf.random_normal(shape=[n_neurons,n_neurons],dtype=tf.float32))\n",
"b = tf.Variable(tf.zeros([1, n_neurons], dtype=tf.float32))\n",
"\n",
"Y0 = tf.tanh(tf.matmul(X0, Wx) + b)\n",
"Y1 = tf.tanh(tf.matmul(Y0, Wy) + tf.matmul(X1, Wx) + b)\n",
"\n",
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"X0_batch = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 0, 1]]) # t = 0\n",
"X1_batch = np.array([[9, 8, 7], [0, 0, 0], [6, 5, 4], [3, 2, 1]]) # t = 1\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" Y0_val, Y1_val = sess.run([Y0, Y1], feed_dict={X0: X0_batch, X1: X1_batch})"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.06640061 0.9625767 0.6810579 0.7091854 -0.89821595]\n",
" [ 0.99777555 -0.7197888 -0.99657613 0.96739244 -0.99989706]\n",
" [ 0.99999785 -0.9989881 -0.99999887 0.9967763 -0.9999999 ]\n",
" [ 1. -1. -1. -0.9981892 0.9995087 ]]\n"
]
}
],
"source": [
"print(Y0_val)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1. -1. -1. 0.40200272 -0.99999994]\n",
" [-0.12210429 0.62805295 0.96718436 -0.9937122 -0.2583933 ]\n",
" [ 0.99999815 -0.9999994 -0.99999744 -0.8594331 -0.99998796]\n",
" [ 0.99928296 -0.9999981 -0.9999059 0.98579615 -0.9220575 ]]\n"
]
}
],
"source": [
"print(Y1_val)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## `static_rnn()`을 사용하여 만들기"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"n_inputs = 3\n",
"n_neurons = 5"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"X0 = tf.placeholder(tf.float32, [None, n_inputs])\n",
"X1 = tf.placeholder(tf.float32, [None, n_inputs])\n",
"\n",
"basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)\n",
"output_seqs, states = tf.contrib.rnn.static_rnn(basic_cell, [X0, X1],\n",
" dtype=tf.float32)\n",
"Y0, Y1 = output_seqs"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"X0_batch = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 0, 1]])\n",
"X1_batch = np.array([[9, 8, 7], [0, 0, 0], [6, 5, 4], [3, 2, 1]])\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" Y0_val, Y1_val = sess.run([Y0, Y1], feed_dict={X0: X0_batch, X1: X1_batch})"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.30741337, -0.32884312, -0.6542847 , -0.9385059 , 0.52089024],\n",
" [ 0.9912275 , -0.95425415, -0.7518078 , -0.9995208 , 0.98202336],\n",
" [ 0.99992675, -0.99783254, -0.82473516, -0.99999636, 0.99947786],\n",
" [ 0.9967709 , -0.6875061 , 0.8419969 , 0.93039113, 0.81206834]],\n",
" dtype=float32)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y0_val"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.99998885, -0.9997606 , -0.06679297, -0.9999803 , 0.99982214],\n",
" [-0.65249425, -0.5152086 , -0.37968948, -0.5922594 , -0.08968376],\n",
" [ 0.998624 , -0.99715203, -0.03308632, -0.9991566 , 0.9932902 ],\n",
" [ 0.99681675, -0.9598194 , 0.39660627, -0.8307605 , 0.7967197 ]],\n",
" dtype=float32)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y1_val"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import clear_output, Image, display, HTML\n",
"\n",
"def strip_consts(graph_def, max_const_size=32):\n",
" \"\"\"Strip large constant values from graph_def.\"\"\"\n",
" strip_def = tf.GraphDef()\n",
" for n0 in graph_def.node:\n",
" n = strip_def.node.add() \n",
" n.MergeFrom(n0)\n",
" if n.op == 'Const':\n",
" tensor = n.attr['value'].tensor\n",
" size = len(tensor.tensor_content)\n",
" if size > max_const_size:\n",
" tensor.tensor_content = \"b<stripped %d bytes>\"%size\n",
" return strip_def\n",
"\n",
"def show_graph(graph_def, max_const_size=32):\n",
" \"\"\"Visualize TensorFlow graph.\"\"\"\n",
" if hasattr(graph_def, 'as_graph_def'):\n",
" graph_def = graph_def.as_graph_def()\n",
" strip_def = strip_consts(graph_def, max_const_size=max_const_size)\n",
" code = \"\"\"\n",
" <script>\n",
" function load() {{\n",
" document.getElementById(\"{id}\").pbtxt = {data};\n",
" }}\n",
" </script>\n",
" <link rel=\"import\" href=\"https://tensorboard.appspot.com/tf-graph-basic.build.html\" onload=load()>\n",
" <div style=\"height:600px\">\n",
" <tf-graph-basic id=\"{id}\"></tf-graph-basic>\n",
" </div>\n",
" \"\"\".format(data=repr(str(strip_def)), id='graph'+str(np.random.rand()))\n",
"\n",
" iframe = \"\"\"\n",
" <iframe seamless style=\"width:1200px;height:620px;border:0\" srcdoc=\"{}\"></iframe>\n",
" \"\"\".format(code.replace('\"', '&quot;'))\n",
" display(HTML(iframe))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <iframe seamless style=\"width:1200px;height:620px;border:0\" srcdoc=\"\n",
" <script>\n",
" function load() {\n",
" document.getElementById(&quot;graph0.3745401188473625&quot;).pbtxt = 'node {\\n name: &quot;Placeholder&quot;\\n op: &quot;Placeholder&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;shape&quot;\\n value {\\n shape {\\n dim {\\n size: -1\\n }\\n dim {\\n size: 3\\n }\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;Placeholder_1&quot;\\n op: &quot;Placeholder&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;shape&quot;\\n value {\\n shape {\\n dim {\\n size: -1\\n }\\n dim {\\n size: 3\\n }\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Shape&quot;\\n op: &quot;Shape&quot;\\n input: &quot;Placeholder&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;out_type&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice/stack&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice/stack_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice/stack_2&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice&quot;\\n op: &quot;StridedSlice&quot;\\n input: &quot;rnn/Shape&quot;\\n input: &quot;rnn/strided_slice/stack&quot;\\n input: &quot;rnn/strided_slice/stack_1&quot;\\n input: &quot;rnn/strided_slice/stack_2&quot;\\n attr {\\n key: &quot;Index&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;begin_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;ellipsis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;end_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;new_axis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;shrink_axis_mask&quot;\\n value {\\n i: 1\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/ExpandDims/dim&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/ExpandDims&quot;\\n op: &quot;ExpandDims&quot;\\n input: &quot;rnn/strided_slice&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/ExpandDims/dim&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tdim&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/Const&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 5\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/concat/axis&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/concat&quot;\\n op: &quot;ConcatV2&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/ExpandDims&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/Const&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/concat/axis&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/zeros/Const&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n }\\n float_val: 0.0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/zeros&quot;\\n op: &quot;Fill&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/concat&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/zeros/Const&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;index_type&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/ExpandDims_1/dim&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/ExpandDims_1&quot;\\n op: &quot;ExpandDims&quot;\\n input: &quot;rnn/strided_slice&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/ExpandDims_1/dim&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tdim&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/Const_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 5\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/shape&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 2\\n }\\n }\\n tensor_content: &quot;\\\\010\\\\000\\\\000\\\\000\\\\005\\\\000\\\\000\\\\000&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/min&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n }\\n float_val: -0.6793662309646606\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/max&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n }\\n float_val: 0.6793662309646606\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/RandomUniform&quot;\\n op: &quot;RandomUniform&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/shape&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;seed&quot;\\n value {\\n i: 42\\n }\\n }\\n attr {\\n key: &quot;seed2&quot;\\n value {\\n i: 20\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/sub&quot;\\n op: &quot;Sub&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/max&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/min&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/mul&quot;\\n op: &quot;Mul&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/RandomUniform&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/sub&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform&quot;\\n op: &quot;Add&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/mul&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/min&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel&quot;\\n op: &quot;VariableV2&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;container&quot;\\n value {\\n s: &quot;&quot;\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;shape&quot;\\n value {\\n shape {\\n dim {\\n size: 8\\n }\\n dim {\\n size: 5\\n }\\n }\\n }\\n }\\n attr {\\n key: &quot;shared_name&quot;\\n value {\\n s: &quot;&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Assign&quot;\\n op: &quot;Assign&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;use_locking&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;validate_shape&quot;\\n value {\\n b: true\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/read&quot;\\n op: &quot;Identity&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/bias/Initializer/zeros&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/bias&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n dim {\\n size: 5\\n }\\n }\\n float_val: 0.0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/bias&quot;\\n op: &quot;VariableV2&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/bias&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;container&quot;\\n value {\\n s: &quot;&quot;\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;shape&quot;\\n value {\\n shape {\\n dim {\\n size: 5\\n }\\n }\\n }\\n }\\n attr {\\n key: &quot;shared_name&quot;\\n value {\\n s: &quot;&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/bias/Assign&quot;\\n op: &quot;Assign&quot;\\n input: &quot;rnn/basic_rnn_cell/bias&quot;\\n input: &quot;rnn/basic_rnn_cell/bias/Initializer/zeros&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/bias&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;use_locking&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;validate_shape&quot;\\n value {\\n b: true\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/bias/read&quot;\\n op: &quot;Identity&quot;\\n input: &quot;rnn/basic_rnn_cell/bias&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/concat/axis&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/concat&quot;\\n op: &quot;ConcatV2&quot;\\n input: &quot;Placeholder&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/zeros&quot;\\n input: &quot;rnn/basic_rnn_cell/concat/axis&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/MatMul&quot;\\n op: &quot;MatMul&quot;\\n input: &quot;rnn/basic_rnn_cell/concat&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/read&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;transpose_a&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;transpose_b&quot;\\n value {\\n b: false\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/BiasAdd&quot;\\n op: &quot;BiasAdd&quot;\\n input: &quot;rnn/basic_rnn_cell/MatMul&quot;\\n input: &quot;rnn/basic_rnn_cell/bias/read&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;data_format&quot;\\n value {\\n s: &quot;NHWC&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/Tanh&quot;\\n op: &quot;Tanh&quot;\\n input: &quot;rnn/basic_rnn_cell/BiasAdd&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/concat_1/axis&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/concat_1&quot;\\n op: &quot;ConcatV2&quot;\\n input: &quot;Placeholder_1&quot;\\n input: &quot;rnn/basic_rnn_cell/Tanh&quot;\\n input: &quot;rnn/basic_rnn_cell/concat_1/axis&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/MatMul_1&quot;\\n op: &quot;MatMul&quot;\\n input: &quot;rnn/basic_rnn_cell/concat_1&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/read&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;transpose_a&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;transpose_b&quot;\\n value {\\n b: false\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/BiasAdd_1&quot;\\n op: &quot;BiasAdd&quot;\\n input: &quot;rnn/basic_rnn_cell/MatMul_1&quot;\\n input: &quot;rnn/basic_rnn_cell/bias/read&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;data_format&quot;\\n value {\\n s: &quot;NHWC&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/Tanh_1&quot;\\n op: &quot;Tanh&quot;\\n input: &quot;rnn/basic_rnn_cell/BiasAdd_1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;init&quot;\\n op: &quot;NoOp&quot;\\n input: &quot;^rnn/basic_rnn_cell/bias/Assign&quot;\\n input: &quot;^rnn/basic_rnn_cell/kernel/Assign&quot;\\n}\\n';\n",
" }\n",
" </script>\n",
" <link rel=&quot;import&quot; href=&quot;https://tensorboard.appspot.com/tf-graph-basic.build.html&quot; onload=load()>\n",
" <div style=&quot;height:600px&quot;>\n",
" <tf-graph-basic id=&quot;graph0.3745401188473625&quot;></tf-graph-basic>\n",
" </div>\n",
" \"></iframe>\n",
" "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_graph(tf.get_default_graph())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 시퀀스 패딩"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"n_steps = 2\n",
"n_inputs = 3\n",
"n_neurons = 5"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"X_seqs = tf.unstack(tf.transpose(X, perm=[1, 0, 2]))\n",
"\n",
"basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)\n",
"output_seqs, states = tf.contrib.rnn.static_rnn(basic_cell, X_seqs,\n",
" dtype=tf.float32)\n",
"outputs = tf.transpose(tf.stack(output_seqs), perm=[1, 0, 2])"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"X_batch = np.array([\n",
" # t = 0 t = 1 \n",
" [[0, 1, 2], [9, 8, 7]], # 샘플 1\n",
" [[3, 4, 5], [0, 0, 0]], # 샘플 2\n",
" [[6, 7, 8], [6, 5, 4]], # 샘플 3\n",
" [[9, 0, 1], [3, 2, 1]], # 샘플 4\n",
" ])\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" outputs_val = outputs.eval(feed_dict={X: X_batch})"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[[-0.4565232 -0.6806412 0.40938237 0.631045 -0.45732823]\n",
" [-0.94288003 -0.9998869 0.9405581 0.99999845 -0.99999976]]\n",
"\n",
" [[-0.80015343 -0.99218273 0.78177965 0.9971032 -0.9964609 ]\n",
" [-0.637116 0.11300934 0.5798437 0.43105593 -0.6371699 ]]\n",
"\n",
" [[-0.93605185 -0.99983793 0.9308867 0.9999814 -0.99998313]\n",
" [-0.9165386 -0.99456036 0.89605415 0.9998719 -0.9999751 ]]\n",
"\n",
" [[ 0.99273676 -0.9981933 -0.5554365 0.99890316 -0.9953323 ]\n",
" [-0.02746333 -0.7319198 0.7827872 0.9525682 -0.9781772 ]]]\n"
]
}
],
"source": [
"print(outputs_val)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.94288003 -0.9998869 0.9405581 0.99999845 -0.99999976]\n",
" [-0.637116 0.11300934 0.5798437 0.43105593 -0.6371699 ]\n",
" [-0.9165386 -0.99456036 0.89605415 0.9998719 -0.9999751 ]\n",
" [-0.02746333 -0.7319198 0.7827872 0.9525682 -0.9781772 ]]\n"
]
}
],
"source": [
"print(np.transpose(outputs_val, axes=[1, 0, 2])[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using `dynamic_rnn()`"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"n_steps = 2\n",
"n_inputs = 3\n",
"n_neurons = 5"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"\n",
"basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)\n",
"outputs, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"X_batch = np.array([\n",
" [[0, 1, 2], [9, 8, 7]], # instance 1\n",
" [[3, 4, 5], [0, 0, 0]], # instance 2\n",
" [[6, 7, 8], [6, 5, 4]], # instance 3\n",
" [[9, 0, 1], [3, 2, 1]], # instance 4\n",
" ])\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" outputs_val = outputs.eval(feed_dict={X: X_batch})"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[[-0.85115266 0.8735834 0.5802911 0.8954789 -0.0557505 ]\n",
" [-0.99999595 0.9999957 0.9981816 1. 0.37679613]]\n",
"\n",
" [[-0.99832934 0.9992038 0.98071444 0.99998486 0.25192654]\n",
" [-0.7081804 -0.07723369 -0.8522789 0.5845347 -0.7878094 ]]\n",
"\n",
" [[-0.9999826 0.9999953 0.99928635 1. 0.51590705]\n",
" [-0.9993956 0.9984095 0.83422637 0.9999998 -0.47325197]]\n",
"\n",
" [[ 0.87888587 0.07356028 0.9721692 0.9998546 -0.7351168 ]\n",
" [-0.9134514 0.3600957 0.7624865 0.99817705 0.80142 ]]]\n"
]
}
],
"source": [
"print(outputs_val)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <iframe seamless style=\"width:1200px;height:620px;border:0\" srcdoc=\"\n",
" <script>\n",
" function load() {\n",
" document.getElementById(&quot;graph0.3745401188473625&quot;).pbtxt = 'node {\\n name: &quot;Placeholder&quot;\\n op: &quot;Placeholder&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;shape&quot;\\n value {\\n shape {\\n dim {\\n size: -1\\n }\\n dim {\\n size: 2\\n }\\n dim {\\n size: 3\\n }\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Rank&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 3\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/range/start&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 2\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/range/delta&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/range&quot;\\n op: &quot;Range&quot;\\n input: &quot;rnn/range/start&quot;\\n input: &quot;rnn/Rank&quot;\\n input: &quot;rnn/range/delta&quot;\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/concat/values_0&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 2\\n }\\n }\\n tensor_content: &quot;\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/concat/axis&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/concat&quot;\\n op: &quot;ConcatV2&quot;\\n input: &quot;rnn/concat/values_0&quot;\\n input: &quot;rnn/range&quot;\\n input: &quot;rnn/concat/axis&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/transpose&quot;\\n op: &quot;Transpose&quot;\\n input: &quot;Placeholder&quot;\\n input: &quot;rnn/concat&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;Tperm&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Shape&quot;\\n op: &quot;Shape&quot;\\n input: &quot;rnn/transpose&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;out_type&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice/stack&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice/stack_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 2\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice/stack_2&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice&quot;\\n op: &quot;StridedSlice&quot;\\n input: &quot;rnn/Shape&quot;\\n input: &quot;rnn/strided_slice/stack&quot;\\n input: &quot;rnn/strided_slice/stack_1&quot;\\n input: &quot;rnn/strided_slice/stack_2&quot;\\n attr {\\n key: &quot;Index&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;begin_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;ellipsis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;end_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;new_axis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;shrink_axis_mask&quot;\\n value {\\n i: 1\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/ExpandDims/dim&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/ExpandDims&quot;\\n op: &quot;ExpandDims&quot;\\n input: &quot;rnn/strided_slice&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/ExpandDims/dim&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tdim&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/Const&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 5\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/concat/axis&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/concat&quot;\\n op: &quot;ConcatV2&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/ExpandDims&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/Const&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/concat/axis&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/zeros/Const&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n }\\n float_val: 0.0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/zeros&quot;\\n op: &quot;Fill&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/concat&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/zeros/Const&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;index_type&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/ExpandDims_1/dim&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/ExpandDims_1&quot;\\n op: &quot;ExpandDims&quot;\\n input: &quot;rnn/strided_slice&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/ExpandDims_1/dim&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tdim&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/BasicRNNCellZeroState/Const_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 5\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Shape_1&quot;\\n op: &quot;Shape&quot;\\n input: &quot;rnn/transpose&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;out_type&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice_1/stack&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice_1/stack_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice_1/stack_2&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice_1&quot;\\n op: &quot;StridedSlice&quot;\\n input: &quot;rnn/Shape_1&quot;\\n input: &quot;rnn/strided_slice_1/stack&quot;\\n input: &quot;rnn/strided_slice_1/stack_1&quot;\\n input: &quot;rnn/strided_slice_1/stack_2&quot;\\n attr {\\n key: &quot;Index&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;begin_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;ellipsis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;end_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;new_axis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;shrink_axis_mask&quot;\\n value {\\n i: 1\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Shape_2&quot;\\n op: &quot;Shape&quot;\\n input: &quot;rnn/transpose&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;out_type&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice_2/stack&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice_2/stack_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 2\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice_2/stack_2&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/strided_slice_2&quot;\\n op: &quot;StridedSlice&quot;\\n input: &quot;rnn/Shape_2&quot;\\n input: &quot;rnn/strided_slice_2/stack&quot;\\n input: &quot;rnn/strided_slice_2/stack_1&quot;\\n input: &quot;rnn/strided_slice_2/stack_2&quot;\\n attr {\\n key: &quot;Index&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;begin_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;ellipsis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;end_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;new_axis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;shrink_axis_mask&quot;\\n value {\\n i: 1\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/ExpandDims/dim&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/ExpandDims&quot;\\n op: &quot;ExpandDims&quot;\\n input: &quot;rnn/strided_slice_2&quot;\\n input: &quot;rnn/ExpandDims/dim&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tdim&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Const&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 5\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/concat_1/axis&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/concat_1&quot;\\n op: &quot;ConcatV2&quot;\\n input: &quot;rnn/ExpandDims&quot;\\n input: &quot;rnn/Const&quot;\\n input: &quot;rnn/concat_1/axis&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/zeros/Const&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n }\\n float_val: 0.0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/zeros&quot;\\n op: &quot;Fill&quot;\\n input: &quot;rnn/concat_1&quot;\\n input: &quot;rnn/zeros/Const&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;index_type&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/time&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArray&quot;\\n op: &quot;TensorArrayV3&quot;\\n input: &quot;rnn/strided_slice_1&quot;\\n attr {\\n key: &quot;clear_after_read&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;dynamic_size&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;element_shape&quot;\\n value {\\n shape {\\n dim {\\n size: -1\\n }\\n dim {\\n size: 5\\n }\\n }\\n }\\n }\\n attr {\\n key: &quot;identical_element_shapes&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;tensor_array_name&quot;\\n value {\\n s: &quot;rnn/dynamic_rnn/output_0&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArray_1&quot;\\n op: &quot;TensorArrayV3&quot;\\n input: &quot;rnn/strided_slice_1&quot;\\n attr {\\n key: &quot;clear_after_read&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;dynamic_size&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;element_shape&quot;\\n value {\\n shape {\\n dim {\\n size: -1\\n }\\n dim {\\n size: 3\\n }\\n }\\n }\\n }\\n attr {\\n key: &quot;identical_element_shapes&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;tensor_array_name&quot;\\n value {\\n s: &quot;rnn/dynamic_rnn/input_0&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/Shape&quot;\\n op: &quot;Shape&quot;\\n input: &quot;rnn/transpose&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;out_type&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/strided_slice/stack&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/strided_slice/stack_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/strided_slice/stack_2&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/strided_slice&quot;\\n op: &quot;StridedSlice&quot;\\n input: &quot;rnn/TensorArrayUnstack/Shape&quot;\\n input: &quot;rnn/TensorArrayUnstack/strided_slice/stack&quot;\\n input: &quot;rnn/TensorArrayUnstack/strided_slice/stack_1&quot;\\n input: &quot;rnn/TensorArrayUnstack/strided_slice/stack_2&quot;\\n attr {\\n key: &quot;Index&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;begin_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;ellipsis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;end_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;new_axis_mask&quot;\\n value {\\n i: 0\\n }\\n }\\n attr {\\n key: &quot;shrink_axis_mask&quot;\\n value {\\n i: 1\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/range/start&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/range/delta&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/range&quot;\\n op: &quot;Range&quot;\\n input: &quot;rnn/TensorArrayUnstack/range/start&quot;\\n input: &quot;rnn/TensorArrayUnstack/strided_slice&quot;\\n input: &quot;rnn/TensorArrayUnstack/range/delta&quot;\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3&quot;\\n op: &quot;TensorArrayScatterV3&quot;\\n input: &quot;rnn/TensorArray_1&quot;\\n input: &quot;rnn/TensorArrayUnstack/range&quot;\\n input: &quot;rnn/transpose&quot;\\n input: &quot;rnn/TensorArray_1:1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/transpose&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Maximum/x&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Maximum&quot;\\n op: &quot;Maximum&quot;\\n input: &quot;rnn/Maximum/x&quot;\\n input: &quot;rnn/strided_slice_1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Minimum&quot;\\n op: &quot;Minimum&quot;\\n input: &quot;rnn/strided_slice_1&quot;\\n input: &quot;rnn/Maximum&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/iteration_counter&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Enter&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/while/iteration_counter&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Enter_1&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/time&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Enter_2&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/TensorArray:1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Enter_3&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/BasicRNNCellZeroState/zeros&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Merge&quot;\\n op: &quot;Merge&quot;\\n input: &quot;rnn/while/Enter&quot;\\n input: &quot;rnn/while/NextIteration&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Merge_1&quot;\\n op: &quot;Merge&quot;\\n input: &quot;rnn/while/Enter_1&quot;\\n input: &quot;rnn/while/NextIteration_1&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Merge_2&quot;\\n op: &quot;Merge&quot;\\n input: &quot;rnn/while/Enter_2&quot;\\n input: &quot;rnn/while/NextIteration_2&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Merge_3&quot;\\n op: &quot;Merge&quot;\\n input: &quot;rnn/while/Enter_3&quot;\\n input: &quot;rnn/while/NextIteration_3&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Less&quot;\\n op: &quot;Less&quot;\\n input: &quot;rnn/while/Merge&quot;\\n input: &quot;rnn/while/Less/Enter&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Less/Enter&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/strided_slice_1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Less_1&quot;\\n op: &quot;Less&quot;\\n input: &quot;rnn/while/Merge_1&quot;\\n input: &quot;rnn/while/Less_1/Enter&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Less_1/Enter&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/Minimum&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/LogicalAnd&quot;\\n op: &quot;LogicalAnd&quot;\\n input: &quot;rnn/while/Less&quot;\\n input: &quot;rnn/while/Less_1&quot;\\n}\\nnode {\\n name: &quot;rnn/while/LoopCond&quot;\\n op: &quot;LoopCond&quot;\\n input: &quot;rnn/while/LogicalAnd&quot;\\n}\\nnode {\\n name: &quot;rnn/while/Switch&quot;\\n op: &quot;Switch&quot;\\n input: &quot;rnn/while/Merge&quot;\\n input: &quot;rnn/while/LoopCond&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/while/Merge&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Switch_1&quot;\\n op: &quot;Switch&quot;\\n input: &quot;rnn/while/Merge_1&quot;\\n input: &quot;rnn/while/LoopCond&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/while/Merge_1&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Switch_2&quot;\\n op: &quot;Switch&quot;\\n input: &quot;rnn/while/Merge_2&quot;\\n input: &quot;rnn/while/LoopCond&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/while/Merge_2&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Switch_3&quot;\\n op: &quot;Switch&quot;\\n input: &quot;rnn/while/Merge_3&quot;\\n input: &quot;rnn/while/LoopCond&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/while/Merge_3&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Identity&quot;\\n op: &quot;Identity&quot;\\n input: &quot;rnn/while/Switch:1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Identity_1&quot;\\n op: &quot;Identity&quot;\\n input: &quot;rnn/while/Switch_1:1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Identity_2&quot;\\n op: &quot;Identity&quot;\\n input: &quot;rnn/while/Switch_2:1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Identity_3&quot;\\n op: &quot;Identity&quot;\\n input: &quot;rnn/while/Switch_3:1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/add/y&quot;\\n op: &quot;Const&quot;\\n input: &quot;^rnn/while/Identity&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/add&quot;\\n op: &quot;Add&quot;\\n input: &quot;rnn/while/Identity&quot;\\n input: &quot;rnn/while/add/y&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/TensorArrayReadV3&quot;\\n op: &quot;TensorArrayReadV3&quot;\\n input: &quot;rnn/while/TensorArrayReadV3/Enter&quot;\\n input: &quot;rnn/while/Identity_1&quot;\\n input: &quot;rnn/while/TensorArrayReadV3/Enter_1&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/TensorArrayReadV3/Enter&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/TensorArray_1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_RESOURCE\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/TensorArrayReadV3/Enter_1&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/shape&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 2\\n }\\n }\\n tensor_content: &quot;\\\\010\\\\000\\\\000\\\\000\\\\005\\\\000\\\\000\\\\000&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/min&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n }\\n float_val: -0.6793662309646606\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/max&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n }\\n float_val: 0.6793662309646606\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/RandomUniform&quot;\\n op: &quot;RandomUniform&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/shape&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;seed&quot;\\n value {\\n i: 42\\n }\\n }\\n attr {\\n key: &quot;seed2&quot;\\n value {\\n i: 87\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/sub&quot;\\n op: &quot;Sub&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/max&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/min&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/mul&quot;\\n op: &quot;Mul&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/RandomUniform&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/sub&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform&quot;\\n op: &quot;Add&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/mul&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform/min&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel&quot;\\n op: &quot;VariableV2&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;container&quot;\\n value {\\n s: &quot;&quot;\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;shape&quot;\\n value {\\n shape {\\n dim {\\n size: 8\\n }\\n dim {\\n size: 5\\n }\\n }\\n }\\n }\\n attr {\\n key: &quot;shared_name&quot;\\n value {\\n s: &quot;&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/Assign&quot;\\n op: &quot;Assign&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/Initializer/random_uniform&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/kernel&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;use_locking&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;validate_shape&quot;\\n value {\\n b: true\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/kernel/read&quot;\\n op: &quot;Identity&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/bias/Initializer/zeros&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/bias&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_FLOAT\\n tensor_shape {\\n dim {\\n size: 5\\n }\\n }\\n float_val: 0.0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/bias&quot;\\n op: &quot;VariableV2&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/bias&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;container&quot;\\n value {\\n s: &quot;&quot;\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;shape&quot;\\n value {\\n shape {\\n dim {\\n size: 5\\n }\\n }\\n }\\n }\\n attr {\\n key: &quot;shared_name&quot;\\n value {\\n s: &quot;&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/bias/Assign&quot;\\n op: &quot;Assign&quot;\\n input: &quot;rnn/basic_rnn_cell/bias&quot;\\n input: &quot;rnn/basic_rnn_cell/bias/Initializer/zeros&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/basic_rnn_cell/bias&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;use_locking&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;validate_shape&quot;\\n value {\\n b: true\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/basic_rnn_cell/bias/read&quot;\\n op: &quot;Identity&quot;\\n input: &quot;rnn/basic_rnn_cell/bias&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/basic_rnn_cell/concat/axis&quot;\\n op: &quot;Const&quot;\\n input: &quot;^rnn/while/Identity&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/basic_rnn_cell/concat&quot;\\n op: &quot;ConcatV2&quot;\\n input: &quot;rnn/while/TensorArrayReadV3&quot;\\n input: &quot;rnn/while/Identity_3&quot;\\n input: &quot;rnn/while/basic_rnn_cell/concat/axis&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/basic_rnn_cell/MatMul&quot;\\n op: &quot;MatMul&quot;\\n input: &quot;rnn/while/basic_rnn_cell/concat&quot;\\n input: &quot;rnn/while/basic_rnn_cell/MatMul/Enter&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;transpose_a&quot;\\n value {\\n b: false\\n }\\n }\\n attr {\\n key: &quot;transpose_b&quot;\\n value {\\n b: false\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/basic_rnn_cell/MatMul/Enter&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/basic_rnn_cell/kernel/read&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/basic_rnn_cell/BiasAdd&quot;\\n op: &quot;BiasAdd&quot;\\n input: &quot;rnn/while/basic_rnn_cell/MatMul&quot;\\n input: &quot;rnn/while/basic_rnn_cell/BiasAdd/Enter&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;data_format&quot;\\n value {\\n s: &quot;NHWC&quot;\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/basic_rnn_cell/BiasAdd/Enter&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/basic_rnn_cell/bias/read&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/basic_rnn_cell/Tanh&quot;\\n op: &quot;Tanh&quot;\\n input: &quot;rnn/while/basic_rnn_cell/BiasAdd&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/TensorArrayWrite/TensorArrayWriteV3&quot;\\n op: &quot;TensorArrayWriteV3&quot;\\n input: &quot;rnn/while/TensorArrayWrite/TensorArrayWriteV3/Enter&quot;\\n input: &quot;rnn/while/Identity_1&quot;\\n input: &quot;rnn/while/basic_rnn_cell/Tanh&quot;\\n input: &quot;rnn/while/Identity_2&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/while/basic_rnn_cell/Tanh&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/TensorArrayWrite/TensorArrayWriteV3/Enter&quot;\\n op: &quot;Enter&quot;\\n input: &quot;rnn/TensorArray&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_RESOURCE\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/while/basic_rnn_cell/Tanh&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;frame_name&quot;\\n value {\\n s: &quot;rnn/while/while_context&quot;\\n }\\n }\\n attr {\\n key: &quot;is_constant&quot;\\n value {\\n b: true\\n }\\n }\\n attr {\\n key: &quot;parallel_iterations&quot;\\n value {\\n i: 32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/add_1/y&quot;\\n op: &quot;Const&quot;\\n input: &quot;^rnn/while/Identity&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/add_1&quot;\\n op: &quot;Add&quot;\\n input: &quot;rnn/while/Identity_1&quot;\\n input: &quot;rnn/while/add_1/y&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/NextIteration&quot;\\n op: &quot;NextIteration&quot;\\n input: &quot;rnn/while/add&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/NextIteration_1&quot;\\n op: &quot;NextIteration&quot;\\n input: &quot;rnn/while/add_1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/NextIteration_2&quot;\\n op: &quot;NextIteration&quot;\\n input: &quot;rnn/while/TensorArrayWrite/TensorArrayWriteV3&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/NextIteration_3&quot;\\n op: &quot;NextIteration&quot;\\n input: &quot;rnn/while/basic_rnn_cell/Tanh&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Exit&quot;\\n op: &quot;Exit&quot;\\n input: &quot;rnn/while/Switch&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Exit_1&quot;\\n op: &quot;Exit&quot;\\n input: &quot;rnn/while/Switch_1&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Exit_2&quot;\\n op: &quot;Exit&quot;\\n input: &quot;rnn/while/Switch_2&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/while/Exit_3&quot;\\n op: &quot;Exit&quot;\\n input: &quot;rnn/while/Switch_3&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayStack/TensorArraySizeV3&quot;\\n op: &quot;TensorArraySizeV3&quot;\\n input: &quot;rnn/TensorArray&quot;\\n input: &quot;rnn/while/Exit_2&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/TensorArray&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayStack/range/start&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/TensorArray&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayStack/range/delta&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/TensorArray&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayStack/range&quot;\\n op: &quot;Range&quot;\\n input: &quot;rnn/TensorArrayStack/range/start&quot;\\n input: &quot;rnn/TensorArrayStack/TensorArraySizeV3&quot;\\n input: &quot;rnn/TensorArrayStack/range/delta&quot;\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/TensorArray&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/TensorArrayStack/TensorArrayGatherV3&quot;\\n op: &quot;TensorArrayGatherV3&quot;\\n input: &quot;rnn/TensorArray&quot;\\n input: &quot;rnn/TensorArrayStack/range&quot;\\n input: &quot;rnn/while/Exit_2&quot;\\n attr {\\n key: &quot;_class&quot;\\n value {\\n list {\\n s: &quot;loc:@rnn/TensorArray&quot;\\n }\\n }\\n }\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;element_shape&quot;\\n value {\\n shape {\\n dim {\\n size: -1\\n }\\n dim {\\n size: 5\\n }\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Const_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 1\\n }\\n }\\n int_val: 5\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/Rank_1&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 3\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/range_1/start&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 2\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/range_1/delta&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 1\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/range_1&quot;\\n op: &quot;Range&quot;\\n input: &quot;rnn/range_1/start&quot;\\n input: &quot;rnn/Rank_1&quot;\\n input: &quot;rnn/range_1/delta&quot;\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/concat_2/values_0&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n dim {\\n size: 2\\n }\\n }\\n tensor_content: &quot;\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000&quot;\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/concat_2/axis&quot;\\n op: &quot;Const&quot;\\n attr {\\n key: &quot;dtype&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;value&quot;\\n value {\\n tensor {\\n dtype: DT_INT32\\n tensor_shape {\\n }\\n int_val: 0\\n }\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/concat_2&quot;\\n op: &quot;ConcatV2&quot;\\n input: &quot;rnn/concat_2/values_0&quot;\\n input: &quot;rnn/range_1&quot;\\n input: &quot;rnn/concat_2/axis&quot;\\n attr {\\n key: &quot;N&quot;\\n value {\\n i: 2\\n }\\n }\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n attr {\\n key: &quot;Tidx&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;rnn/transpose_1&quot;\\n op: &quot;Transpose&quot;\\n input: &quot;rnn/TensorArrayStack/TensorArrayGatherV3&quot;\\n input: &quot;rnn/concat_2&quot;\\n attr {\\n key: &quot;T&quot;\\n value {\\n type: DT_FLOAT\\n }\\n }\\n attr {\\n key: &quot;Tperm&quot;\\n value {\\n type: DT_INT32\\n }\\n }\\n}\\nnode {\\n name: &quot;init&quot;\\n op: &quot;NoOp&quot;\\n input: &quot;^rnn/basic_rnn_cell/bias/Assign&quot;\\n input: &quot;^rnn/basic_rnn_cell/kernel/Assign&quot;\\n}\\n';\n",
" }\n",
" </script>\n",
" <link rel=&quot;import&quot; href=&quot;https://tensorboard.appspot.com/tf-graph-basic.build.html&quot; onload=load()>\n",
" <div style=&quot;height:600px&quot;>\n",
" <tf-graph-basic id=&quot;graph0.3745401188473625&quot;></tf-graph-basic>\n",
" </div>\n",
" \"></iframe>\n",
" "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_graph(tf.get_default_graph())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 시퀀스 길이 지정"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"n_steps = 2\n",
"n_inputs = 3\n",
"n_neurons = 5\n",
"\n",
"reset_graph()\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"seq_length = tf.placeholder(tf.int32, [None])\n",
"outputs, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32,\n",
" sequence_length=seq_length)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"X_batch = np.array([\n",
" # 스텝 0 스텝 1\n",
" [[0, 1, 2], [9, 8, 7]], # 샘플 1\n",
" [[3, 4, 5], [0, 0, 0]], # 샘플 2 (0 벡터로 패딩)\n",
" [[6, 7, 8], [6, 5, 4]], # 샘플 3\n",
" [[9, 0, 1], [3, 2, 1]], # 샘플 4\n",
" ])\n",
"seq_length_batch = np.array([2, 1, 2, 2])"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"with tf.Session() as sess:\n",
" init.run()\n",
" outputs_val, states_val = sess.run(\n",
" [outputs, states], feed_dict={X: X_batch, seq_length: seq_length_batch})"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[[-0.91231877 0.16516447 0.5548655 -0.3915935 0.20846416]\n",
" [-1. 0.95672596 0.9983169 0.9997017 0.96518576]]\n",
"\n",
" [[-0.99986124 0.67022896 0.9723652 0.66310453 0.74457586]\n",
" [ 0. 0. 0. 0. 0. ]]\n",
"\n",
" [[-0.99999976 0.89679974 0.9986295 0.96475154 0.93662006]\n",
" [-0.99995255 0.96819544 0.9600286 0.9870626 0.8545923 ]]\n",
"\n",
" [[-0.9643544 0.9950159 -0.361507 0.99833775 0.99949706]\n",
" [-0.9613586 0.9568762 0.71322876 0.9772921 -0.09582992]]]\n"
]
}
],
"source": [
"print(outputs_val)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-1. 0.95672596 0.9983169 0.9997017 0.96518576]\n",
" [-0.99986124 0.67022896 0.9723652 0.66310453 0.74457586]\n",
" [-0.99995255 0.96819544 0.9600286 0.9870626 0.8545923 ]\n",
" [-0.9613586 0.9568762 0.71322876 0.9772921 -0.09582992]]\n"
]
}
],
"source": [
"print(states_val)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 시퀀스 분류기 훈련하기"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_steps = 28\n",
"n_inputs = 28\n",
"n_neurons = 150\n",
"n_outputs = 10\n",
"\n",
"learning_rate = 0.001\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"y = tf.placeholder(tf.int32, [None])\n",
"\n",
"basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)\n",
"outputs, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32)\n",
"\n",
"logits = tf.layers.dense(states, n_outputs)\n",
"xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y,\n",
" logits=logits)\n",
"loss = tf.reduce_mean(xentropy)\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"training_op = optimizer.minimize(loss)\n",
"correct = tf.nn.in_top_k(logits, y, 1)\n",
"accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))\n",
"\n",
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From <ipython-input-36-9aff0e2313ad>:2: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
"WARNING:tensorflow:From /home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please write your own downloading logic.\n",
"WARNING:tensorflow:From /home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use tf.data to implement this functionality.\n",
"Extracting /tmp/data/train-images-idx3-ubyte.gz\n",
"WARNING:tensorflow:From /home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use tf.data to implement this functionality.\n",
"Extracting /tmp/data/train-labels-idx1-ubyte.gz\n",
"Extracting /tmp/data/t10k-images-idx3-ubyte.gz\n",
"Extracting /tmp/data/t10k-labels-idx1-ubyte.gz\n",
"WARNING:tensorflow:From /home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
]
}
],
"source": [
"from tensorflow.examples.tutorials.mnist import input_data\n",
"mnist = input_data.read_data_sets(\"/tmp/data/\")\n",
"X_test = mnist.test.images.reshape((-1, n_steps, n_inputs))\n",
"y_test = mnist.test.labels"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 훈련 정확도: 0.93333334 테스트 정확도: 0.9311\n",
"1 훈련 정확도: 0.96666664 테스트 정확도: 0.9522\n",
"2 훈련 정확도: 0.97333336 테스트 정확도: 0.9584\n",
"3 훈련 정확도: 0.96 테스트 정확도: 0.966\n",
"4 훈련 정확도: 0.97333336 테스트 정확도: 0.9685\n",
"5 훈련 정확도: 0.98 테스트 정확도: 0.9711\n",
"6 훈련 정확도: 0.96666664 테스트 정확도: 0.9687\n",
"7 훈련 정확도: 0.97333336 테스트 정확도: 0.9687\n",
"8 훈련 정확도: 0.96666664 테스트 정확도: 0.9718\n",
"9 훈련 정확도: 0.98 테스트 정확도: 0.9694\n",
"10 훈련 정확도: 0.9866667 테스트 정확도: 0.9736\n",
"11 훈련 정확도: 0.96 테스트 정확도: 0.9702\n",
"12 훈련 정확도: 0.9866667 테스트 정확도: 0.9771\n",
"13 훈련 정확도: 0.96666664 테스트 정확도: 0.9695\n",
"14 훈련 정확도: 0.97333336 테스트 정확도: 0.9706\n",
"15 훈련 정확도: 0.99333334 테스트 정확도: 0.9763\n",
"16 훈련 정확도: 0.9866667 테스트 정확도: 0.9778\n",
"17 훈련 정확도: 0.9866667 테스트 정확도: 0.9752\n",
"18 훈련 정확도: 0.9866667 테스트 정확도: 0.975\n",
"19 훈련 정확도: 0.97333336 테스트 정확도: 0.9745\n",
"20 훈련 정확도: 0.99333334 테스트 정확도: 0.9773\n",
"21 훈련 정확도: 0.98 테스트 정확도: 0.98\n",
"22 훈련 정확도: 0.98 테스트 정확도: 0.9794\n",
"23 훈련 정확도: 0.98 테스트 정확도: 0.9739\n",
"24 훈련 정확도: 0.98 테스트 정확도: 0.9757\n",
"25 훈련 정확도: 1.0 테스트 정확도: 0.9719\n",
"26 훈련 정확도: 0.97333336 테스트 정확도: 0.9803\n",
"27 훈련 정확도: 1.0 테스트 정확도: 0.9796\n",
"28 훈련 정확도: 0.96666664 테스트 정확도: 0.977\n",
"29 훈련 정확도: 0.99333334 테스트 정확도: 0.9799\n",
"30 훈련 정확도: 0.9866667 테스트 정확도: 0.9754\n",
"31 훈련 정확도: 0.99333334 테스트 정확도: 0.9791\n",
"32 훈련 정확도: 0.98 테스트 정확도: 0.9775\n",
"33 훈련 정확도: 0.99333334 테스트 정확도: 0.9755\n",
"34 훈련 정확도: 0.9866667 테스트 정확도: 0.9723\n",
"35 훈련 정확도: 1.0 테스트 정확도: 0.9797\n",
"36 훈련 정확도: 1.0 테스트 정확도: 0.9798\n",
"37 훈련 정확도: 0.99333334 테스트 정확도: 0.9795\n",
"38 훈련 정확도: 0.99333334 테스트 정확도: 0.9766\n",
"39 훈련 정확도: 0.99333334 테스트 정확도: 0.9792\n",
"40 훈련 정확도: 1.0 테스트 정확도: 0.9811\n",
"41 훈련 정확도: 0.97333336 테스트 정확도: 0.9728\n",
"42 훈련 정확도: 0.98 테스트 정확도: 0.981\n",
"43 훈련 정확도: 0.99333334 테스트 정확도: 0.9735\n",
"44 훈련 정확도: 0.9866667 테스트 정확도: 0.9754\n",
"45 훈련 정확도: 0.9866667 테스트 정확도: 0.9787\n",
"46 훈련 정확도: 0.9866667 테스트 정확도: 0.9822\n",
"47 훈련 정확도: 1.0 테스트 정확도: 0.9777\n",
"48 훈련 정확도: 0.9866667 테스트 정확도: 0.9762\n",
"49 훈련 정확도: 1.0 테스트 정확도: 0.976\n",
"50 훈련 정확도: 0.99333334 테스트 정확도: 0.9819\n",
"51 훈련 정확도: 1.0 테스트 정확도: 0.9787\n",
"52 훈련 정확도: 0.9866667 테스트 정확도: 0.9782\n",
"53 훈련 정확도: 0.9866667 테스트 정확도: 0.9766\n",
"54 훈련 정확도: 0.99333334 테스트 정확도: 0.981\n",
"55 훈련 정확도: 0.99333334 테스트 정확도: 0.9789\n",
"56 훈련 정확도: 0.99333334 테스트 정확도: 0.9806\n",
"57 훈련 정확도: 1.0 테스트 정확도: 0.9835\n",
"58 훈련 정확도: 0.9866667 테스트 정확도: 0.9789\n",
"59 훈련 정확도: 1.0 테스트 정확도: 0.9738\n",
"60 훈련 정확도: 0.99333334 테스트 정확도: 0.9702\n",
"61 훈련 정확도: 1.0 테스트 정확도: 0.9803\n",
"62 훈련 정확도: 1.0 테스트 정확도: 0.9766\n",
"63 훈련 정확도: 0.9866667 테스트 정확도: 0.9797\n",
"64 훈련 정확도: 0.9866667 테스트 정확도: 0.9758\n",
"65 훈련 정확도: 0.9866667 테스트 정확도: 0.9764\n",
"66 훈련 정확도: 0.9866667 테스트 정확도: 0.9773\n",
"67 훈련 정확도: 0.99333334 테스트 정확도: 0.9811\n",
"68 훈련 정확도: 0.99333334 테스트 정확도: 0.9721\n",
"69 훈련 정확도: 0.9866667 테스트 정확도: 0.9795\n",
"70 훈련 정확도: 0.98 테스트 정확도: 0.9754\n",
"71 훈련 정확도: 1.0 테스트 정확도: 0.9786\n",
"72 훈련 정확도: 0.9866667 테스트 정확도: 0.9771\n",
"73 훈련 정확도: 1.0 테스트 정확도: 0.9795\n",
"74 훈련 정확도: 0.99333334 테스트 정확도: 0.9805\n",
"75 훈련 정확도: 0.97333336 테스트 정확도: 0.9807\n",
"76 훈련 정확도: 0.97333336 테스트 정확도: 0.9752\n",
"77 훈련 정확도: 1.0 테스트 정확도: 0.9808\n",
"78 훈련 정확도: 0.99333334 테스트 정확도: 0.9732\n",
"79 훈련 정확도: 0.99333334 테스트 정확도: 0.9805\n",
"80 훈련 정확도: 0.9866667 테스트 정확도: 0.9779\n",
"81 훈련 정확도: 0.99333334 테스트 정확도: 0.9791\n",
"82 훈련 정확도: 0.99333334 테스트 정확도: 0.9747\n",
"83 훈련 정확도: 0.99333334 테스트 정확도: 0.9784\n",
"84 훈련 정확도: 0.99333334 테스트 정확도: 0.9768\n",
"85 훈련 정확도: 0.97333336 테스트 정확도: 0.9733\n",
"86 훈련 정확도: 0.99333334 테스트 정확도: 0.9801\n",
"87 훈련 정확도: 0.99333334 테스트 정확도: 0.9794\n",
"88 훈련 정확도: 0.99333334 테스트 정확도: 0.9772\n",
"89 훈련 정확도: 0.99333334 테스트 정확도: 0.9773\n",
"90 훈련 정확도: 1.0 테스트 정확도: 0.9779\n",
"91 훈련 정확도: 0.99333334 테스트 정확도: 0.9761\n",
"92 훈련 정확도: 0.97333336 테스트 정확도: 0.9753\n",
"93 훈련 정확도: 1.0 테스트 정확도: 0.975\n",
"94 훈련 정확도: 1.0 테스트 정확도: 0.9802\n",
"95 훈련 정확도: 0.99333334 테스트 정확도: 0.9797\n",
"96 훈련 정확도: 0.9866667 테스트 정확도: 0.9796\n",
"97 훈련 정확도: 1.0 테스트 정확도: 0.9783\n",
"98 훈련 정확도: 0.9866667 테스트 정확도: 0.9772\n",
"99 훈련 정확도: 1.0 테스트 정확도: 0.9793\n"
]
}
],
"source": [
"n_epochs = 100\n",
"batch_size = 150\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch = X_batch.reshape((-1, n_steps, n_inputs))\n",
" sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})\n",
" acc_test = accuracy.eval(feed_dict={X: X_test, y: y_test})\n",
" print(epoch, \"훈련 정확도:\", acc_train, \"테스트 정확도:\", acc_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 다층 RNN"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_steps = 28\n",
"n_inputs = 28\n",
"n_outputs = 10\n",
"\n",
"learning_rate = 0.001\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"y = tf.placeholder(tf.int32, [None])"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"n_neurons = 100\n",
"n_layers = 3\n",
"\n",
"layers = [tf.contrib.rnn.BasicRNNCell(num_units=n_neurons,\n",
" activation=tf.nn.relu)\n",
" for layer in range(n_layers)]\n",
"multi_layer_cell = tf.contrib.rnn.MultiRNNCell(layers)\n",
"outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"states_concat = tf.concat(axis=1, values=states)\n",
"logits = tf.layers.dense(states_concat, n_outputs)\n",
"xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)\n",
"loss = tf.reduce_mean(xentropy)\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"training_op = optimizer.minimize(loss)\n",
"correct = tf.nn.in_top_k(logits, y, 1)\n",
"accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))\n",
"\n",
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 훈련 정확도: 0.93333334 테스트 정확도: 0.939\n",
"1 훈련 정확도: 0.98 테스트 정확도: 0.9589\n",
"2 훈련 정확도: 0.94666666 테스트 정확도: 0.9677\n",
"3 훈련 정확도: 0.98 테스트 정확도: 0.9756\n",
"4 훈련 정확도: 0.98 테스트 정확도: 0.9765\n",
"5 훈련 정확도: 0.9866667 테스트 정확도: 0.9741\n",
"6 훈련 정확도: 0.97333336 테스트 정확도: 0.9783\n",
"7 훈련 정확도: 1.0 테스트 정확도: 0.9804\n",
"8 훈련 정확도: 0.99333334 테스트 정확도: 0.979\n",
"9 훈련 정확도: 0.9866667 테스트 정확도: 0.9815\n"
]
}
],
"source": [
"n_epochs = 10\n",
"batch_size = 150\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch = X_batch.reshape((-1, n_steps, n_inputs))\n",
" sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})\n",
" acc_test = accuracy.eval(feed_dict={X: X_test, y: y_test})\n",
" print(epoch, \"훈련 정확도:\", acc_train, \"테스트 정확도:\", acc_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 시계열"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"t_min, t_max = 0, 30\n",
"resolution = 0.1\n",
"\n",
"def time_series(t):\n",
" return t * np.sin(t) / 3 + 2 * np.sin(t*5)\n",
"\n",
"def next_batch(batch_size, n_steps):\n",
" t0 = np.random.rand(batch_size, 1) * (t_max - t_min - n_steps * resolution)\n",
" Ts = t0 + np.arange(0., n_steps + 1) * resolution\n",
" ys = time_series(Ts)\n",
" return ys[:, :-1].reshape(-1, n_steps, 1), ys[:, 1:].reshape(-1, n_steps, 1)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAEYCAYAAADMNRC5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnXl8XGW5+L9v9n1p9jZpkybdCy00lEKrZa+y3ypQUbZ7QcXlJ4JelutFFERU9OpVuWgRK4uUIktBQJayC3aje9MlbZMmadLsezJZ5v398c4kk8nMZJtkTpLn+/mczznznvc958kkOed93mdTWmsEQRAEQRAEQRAGQ1CgBRAEQRAEQRAEYfwgCoQgCIIgCIIgCINGFAhBEARBEARBEAaNKBCCIAiCIAiCIAwaUSAEQRAEQRAsgFIqUykVG2g5BGEgRIEQBEEQBGHSopT6tVJKu207h3mt95RS3xvimHVKqQccH/8GfGEA2dy3K4cjqyCMBFEghFFHKXWOUqrZ5XOEUirBZZuilIpWSoU4HoaLlVL3KaX+7jImUin1M6VUsVKqVSn1tlJqvrd7DFKubMf9EpRS31NKvTeMsclDGLNOKfW7ocg4yOu+p5S6zd/XdbuH83eT5/iuK4YwNtkxNnv0JBQEQRgaSqlljsn3R8CX3LYHlVJXKqUuc+n/kIfJ+5DeO47rfKCU+o9Bdv8eEDnA9vJQZRCEkSIKhOA3lFKrlFKtg+j6bWAvsAfYCZxwtPnit8CFmJWZhUAZsEcp1a6Uagfe9CHXXR4e+nMH8fPcrpQqU0q1KKU2KKWSfPS90cvKUP5A9/FwrcuUUhtdPl+hlNqmlGpWSu1RSt04wPjFg1ixOn+Aa5w+zBejTSl1wQB9vqWU+u1Qry0IguBn5gMrgGVAvtu21HHubJf+9wChLlvPs04pVaiU6gJWDuK+EcDJwQiote5yHL4HpGqt27XW7cBlwG8dn+2DuZYg+BNRIAR/0zZQB631L7TWmVrrLK11NlABFHvrr5QKB64D/p/WepvW+ihwC9AMXK21jgDOG+C2H9J3xeagr86OSfoPgJsxL5MpwPoB7rGf/itD2wcY437facAfgG84Pp8LbAB+B+QB/wX8j1Lqeh+X2Q3E+thagYYBRAkFqoYoeyIQhuN3qZSKUkolAHFuXX8PLFFKXTWU6wuCIPgTrfXjwH8Ch4FFwJWYRaoVQDfwM6313S5D8oDPuWxLXa6Vp7UOATb5uqfjOXkaZkHMlf9SSmngTLf+QQ5ZzgCSHdbgEGA2kO34rIb0gwuCHxAFQvAnU4HjQxmglIoBpgN/BTq9dHOu9tQ7G7TWHUALZiVnMNidKzeObaAS7P8J/FRr/brWugD4d+B8pdSpPsZot3sM5j7uPARs0FqXOT7/O/Cc1nqd1rpCa/0y8BuMYuNNCLvWullr3Yyx1jzk8rkDiALqBpBjCZCmlMpzaz8MvOtlzOWO/QrH/gnHfY64yaeB+4GfO5RDQRCEQHEXcDvwQ8zEfh5wo2P/jFvfa4FXXLYHh3G//wb+ApyrlLrYpf0hzKLTFrf+r2Ge20GYBalOx/YAxgLSCdwxDDkEYUSIAiH4k5V4VwK8cSlwgF4loR+Oie87wPcdKy8opf4dyACecZiN3xvsDR3xFDGYibSn87GYl0fPNbXWx4FCXFacvIwNcdmCHW2XKaXWADkDjE0G1gCPujSHYl4errTj5bvyQDbwRZfPWY691xgGpVQ08B2MBWadUirM5fQi4GIPYzKBn2Bexj9VSi3XWn9Ra62AFPf+WuvXAYUxwwuCIASKEMwKf4djb8e8xzqAYA/9NwGJLts06OPC5NE9VCkVrpT6GbAK+C7wFeBxpZTTfbfb4ZrUZ9FJa/05rbUaYHt4RN+AIAwDUSAEv+CY2F+OcU05c6D+LnwT+IvWusvF19MTN2Imw6VKqUOY1ZrVWutgh9nYp9+9G+8CTcA+L+edKfRq3NqrXc55YgG9q0Od9LplXYOxGMwaQK4rgDKt9QGXtr8CX3LEQUQppVYAtwFPe7qAo0+McwPCTXPP51jgMZe2YLfxSZiVtfVa619hlKbXMcoaGPenNrcxC4G3gRe11j/DrNK9oJT6T6WULwvRG8DqAb4TQRCE0eRBjEXg/zAW9ErgVczz/ise+ndj3GfbMJP9KY7n8q2Od9H7Xu5zJcYN6VytdZPWejdwLl7cd5VJVjFQLJvrVu/pOoIwWoQEWgBhwnAjYAPuBh5RSp05gEKAUuoKYA7wTYfvp1e01qXASqXUVCAZKNBau1o7jgL3DkZQrfUyx/2zgWMeupwEuoAkx3WdJGOCt72xT2u90MP9vuK437oBRJsDHHIb+7JS6psYt6UZQDnwsNbaWzan/Y5+7jS5fXa6QP0b8JJDvmDMi/Nj4D7H+f8AfkmvAtEHpdRszAvzB1rr/3PI/I4jePwnQBrG1cwTh/D8ghYEQRgTHO+pnzm2wXARZoGoHaNI1GPcNDcCb/m4z7PAs25tBUCBY1HM5mj+BnBCa12BsdIKgiURBUIYMUqp6ZhJ5h2YlZxrMKs5t/gYswBYB9ymtd6tlArFmIvbfYzJxmXC7yFurAX4lY/xwUAMxuycjZd4Da11t1LqAMYUvdXl3nl4t1r4gxg8TLYdgX6PK6XCHLEfXnEEpQ8Lx8+9Umttc20DbnME6X0J4/qUgsmchdb6kFIqW2vd5HatEuB66HEJe9bDz9ZM/wBrQRCEUUcptY/+iy0K49raipsrEbBGa30fvYsrI7n3XozF2r3deXgT5v2II07CV5rWLkciEUEYU8SFSRgRDuXhDeB1rfVjDqvAVcAlSqknlVKRHsasxKxa/0Vr/RfoWQXq9nUvrXWRNx9Q4DMDiLoSY1WoAP4BfA3ff/+/BO5SSl2slJoH/BnYpLX2qUC4xD8kKlMr4jxl0sHGDyAfQCmQ7u3kQMqDmxypSqnfOfxyO5VJr1qklHrel4uZq/LgMKH/TSl1ErPithYTF/JZ4CyXMU2O/plKqUeVUgeVSX3bpZQ6hlnZu0Nr7Z7VKYMhBt0LgiD4A631Aq11DGZhKNlxvMhxeo7WOsZtc61L5Kwf4YkngU8GIcLX8Zwlr8BNzte01iGeNnoTVgjCmCMKhDBSfoep6dCTVtSRZvWzmBX1PisjDivAw5hA4e+OkYy/wGS3CNNaR2qt52qtv4RRKDyitV4H/AgTL7ANk9L0mgHu44yB6MD4tX7kuEYuJjBvIP4JLFZK9QvuVkr9QCnlbRXq25hUr86+YRgFLQf4MmaVPxqTNvAw8MEA2aRwvBz/AfwLkwc9HvOivReTUne9W/8ozEszBWOpSMVYeq4GMoGPPcRDnI1JrysIghAotmFSsoJ5Trcw8PP6cxgFoB9a6z9prf85iPvanNnxXDf3eyulLlVK2ZWpA9Rnw8SeDblejyD4A3FhEkbKNUC/dKVa60KMf30fVyOHm8zyoaymO3FxYfJmqfD4IHW44fi0bngZ9z/A/wyy7zocJmdveHC5cucDTPzFJcBzbudCMDUWPN17j1vTLGAucJXWeq9L+2GMVeUGTPDebh+yXAq85ZbdowV4zaEIPKeUUi6/91MxisJirbVr8PlWpdTXMC5PC3DUxVBKpWCsRv/PhwyCIAhjQbQyNWtqMc8xHJ8BOrXWnuK4gh2JKTzR5cio5ItwL+M9LexWaq29WqcFIRCIBUIYEVrrtqHWOhiO8uBGGsay4b4lj/C6AcXxPf438H0vXYJdMyy5ba6r+weBHcD/KqVWKqUSHH1OUUr9DmNNeGMAcV7H1L34jlJqhjKpb5OVUhdh8qW/4fZ734MJMP+9Uuo0pVSsUipOKbUEUziulL6m+f+HqW/hmnFKEAQhEDyFqVnjaXvey5gLMMkpPG1/9zLGlUe9jJ3noW+awyXU23a5hzGCMKqIBUIYj1R7O6GU+ozW+qOxFMbPPAVco5S6wRkf4oLzheWJTY7zaK27lFLnY+o4/BETKGjHxH9sBpYNNHHXWj/vMJF/w3GdREyWkMOYF+rDbv1blFJnO/quxxQVDMMoFW8CZ2utWwGUUjMxrk0rfX8VgiAIo4vWOnMYY+5jBMHUnrL1+ej7dyQbk2BB1BAXjwVBGGWUUnHA9T5StY5rlFKXYOpd7Ay0LIIgCIIgDB1RIARBEARBEARBGDTj0oUpOTlZZ2dnB1oMQRCECcn27durtdYpgZbDE/L8FwRBGD0G+/wflwpEdnY227ZtC7QYgiAIExKlVHGgZfCGPP8FQRBGj8E+/yULkyAIgiAIgiAIg0YUCEEQBEEQBEHwE488EtjxY4EoEIIgCIIgCIIwTLSGzZvhqqsgKgrWrTP7q6+GLVvM+dEcHwjGZQyEIAiCIDjp7OyktLSU9vaBiv+OHyIiIsjMzCQ0NDTQogiC4IPOTrj+enj5ZWhvh9xceP11OOsseP55eO01uOwyeOIJ8PTvPNLxgUIUCEEQBGFcU1paSmxsLNnZ2Sg1/mtuaa2pqamhtLSUnJycQIsjCIIXtO6d/Le2mrYlSyApyewPH4aWFti40fT761/B9RE10vGBRFyYBEEQhHFNe3s7SUlJAyoPrm4C0dEQFGT2VnMTUEqRlJQ0oSwqgjAR2bIFXnmld/KfmAh33WWO77zTfAZoazP9tm717/hAIhYIQRAEYdwzkPLg7iZgt5v21tbRdROoqakhKSlpyOMmgiVFECYya9fC+vWQn9/blp4OixaZ48WL4aKLoKKi9/zdd8OaNXDLLSMfH2jGZSXq/Px8LXnABUEQRgel1Hatdf7APcceT8//goIC5s2b53WM1nDttX3dBDwRGQlXXOEfN4HFixezc+dOFi5cyN69e7npppsoKCjo1+/LX/4y3/72tz1eY6CfSxCEwNHRAQsWwD33wE03Ddz/8cfhoYdg714ICxv5+NFisM9/sUAIgiAIExp3NwFvuLoJLF069PucccYZbN68maCg/t7Bf/7zn3nyySe5+OKLSUpKYuvWrXR0dLB8+fKh30gQhIATFgZHjsB3vwvvvguPPeZ5Ym+zwc03m2dLU1Nvn5GODzSiQAiCIAgTml/+0igHg6GtzfR/9tmh3aOzs5OysjJOnjxJRkYGAMuWLaO42BR1/fDDD/njH/+IzWYjOzubv/3tb4SHh5OQkMCCBQuGdjNBECxBZCQ0NMCTT5rJ/Ysv9u+zZg289JI5jo727/hAIkHUgiAIwoTm1Vd7Yx4Gwm43/YeC1po777yTH//4x3z1q1+lvLwcgH/961/MmDEDgL1793LFFVdQX1/Pzp07ycvLIysrq0fBEARh/HHJJSYZA0B4uOc+TotBUJDp78/xgUQsEIIgCMKEZrDWh+H2v+OOO5g7dy4333wz+fn5PPnkk33OL1u2zOf4d955h4cffnhoNxUEIeDccYdJwNDSAitWmLbCQrjtNvj1ryEvz7Rv2AAREaa/P8cHElEgBEEQAkBrRxfFNa3My4gLtCgTnsjIgeMf3PsPhV/96lc9x4sXL2bx4sVcccUVADz//PPMmTOHLVu2cOjQoX5jzz33XKZNmza0GwqCMKo88gh84xsD91u61GRv27QJLrjABDrffz8UFcG+fXDvvaY9JQXOPx/OOMO/40ci+0gRBUIQBCEA3PfyPp7bXspv1pzG5YumBlqcCc0ll5hUrYNxYxqJm0BeXh4JCQl92goKCmhpaSE8PJyYmJg+59atW0dCQoIoEIIQYLQ2yRYefti4MC5cCN/7Hlx6qdmfcYbnzGxKmdTPq1bBgw+aQOf6enOuqMhYDC691FzviSf6X2Ok493Zu9fES6xcaTI8jSaiQAiCIIwxDW2dvLzrBKFBQdyxYSdn5kwhLS4i0GJNWFzdBAZipG4C7ilm8/LyAHjyySd55513iIqK6jnX2traT6kQBGFsca8Rk5sLr78OZ501uBoxoaGmOGVGhhn/2mvGDTIyEi68EFavNrUcvNWXGel4V557Dp55Bv73f+FHPxrZ9zIQokAIgiCMMS/tKKO9085PV5/C3S/sYcuxWi4TK8So4XQT2LjRd3xDZCRcfvng3AS84R7v4Ayobm5uprOzs8+5qKgo9u3bxznnnDP8GwqCMGy07lUenG6OS5ZAUpLZHz5sFh42bjT9vNWIufVWs7/yyuHJMdLxYORXysgOvUrIaCEKhCAIwhjzdsFJ5qTF8sUlmfz4lf1sL64TBWIUcboJXH+9cRFoa+vrzhQUZCwPl18+ODcBbxQWFno99+ijjw7vooIgjBruNWISE+Guu8zxnXfCG29AXd3Ia8SMBc89ZywZYPbPPWeeeaPFmCkQSqlQ4DvAT4HrtNbrHe0rgf9xyNIBfEtr/a+xkksQBGGsKShv4ry5KYQGB7EoK55Pj9cFWqQJT2ioWT3cutX4Obu6CVxySa+fsyAIk4O1a2H9esh3qbmcng6LFpnjxYvhoouM+5CTu+82dRluuWVsZXVn7Vqj/LiGT9ntcMMN5njhQpO56b77es+XlRnlx1+yj6UF4hZAAz3KgVIqAXgBuFRr/YlS6hxgo1IqR2s9hJwZgiAI44OqJhvVzTbmpJvsS0tmJPLo+0dp7egiKmxyGoWVUncANwFtgAI+OxrvAKXMC3TDBn9fWRCE8cYNN8DPfw733AM33eS5z/r1vcePPw4PPdQ7SQ8kN9xgFILFi727Pf34x73HL75onn/+lH3MCslprR/RWv8S6HZpXgUc1Fp/4ujzHlAOnD9WcgmCIIwlByuaAJiXHgsYBaLbrtlT2hBIsQKGUupHQAqwWGt9BnAB0D4W937kkbG4iyAIViQsDI4cge9+17j6dHR47mezwXXXwe23m/7Owm6BJCzMWBe0Nntfsv/wh0Z5+OEP/St7oCtRzwSOuLUdcbT3QSn1VaXUNqXUtqqqqjERThAEwd8cqGgEYI5DgZjrsEQcqRpEiqAJhsMKvQpoAv6plHofOEtrbXfr5/fnvzPd4b59frmcIAjjkMhIaGiAJ5+Ea67x3GfNGnjqKdNvNIOSh8O//ZuxKvz3f3s+f++9cOONIwvO9kagFQhFX4sEQBce5NJa/1Frna+1zk9JSRkT4QRBEPzNgYomUmPDSYoJByA9LoKI0CCOVTcHWLKAsARYAJRqrc8EbgP+qpTKde00Gs9/Z7pDcWcShMnLJZeYJAoA4eGe+zhX7UdSI2Y0mT7du+zh4TBjxujcN9AKRCkw3a1tuqNdEARhwnGwoqnH+gAQFKTITormWPXks0AAqUCR1vovAFrrHcAm4HOjeVNP6Q5Hi/vuu4+nnnqqX7vWGoCPPvqIG2+8cfQEEATBK3fc0WtVWLHC7AsLTfE2Z1I1Z/tIa8SMFocOwZw55vjYMbjtNrMHmD3bnB8NAq1AbAROVUqdAqCUWgrMBd4KqFSCIAijRFFNCzOTo/u05SRHc3RyKhCVQKNbm53+lmm/4ind4UhZt24dWVlZLFu2jGXLlnG9W/7E7du3k5+fT35+PsuWLSM8PJz29jEJ9RAEwQvOGjEpKXDBBSZQ+sILTTXqCy+EP//ZtKekjLxGzGixfbupWfHiiyYN9QMPwF/+Ylw0lywx50eDgKb80Fo3KKWuAh5XSmmM+9LFWuv6QMolCIIwGjS0dtLU3kVmYlSf9pzkaN7af5KubjshwYFe1xlTPgRmKqVWaK0/UkrNAc4D7vLXDcYy3eHXvvY1fvCDH3g8t2TJkp4q1du3b+eBBx4gIkKqjwtCIHHWiFm1Ch580NR6qHfMQIuKjMXh0kvNc2IkNWJGk/37jZXh9NNNoDSY59lLLxk3za6u0bnvmCsQWutz3D6/C1hQpxMEQfAvJXUmM2nWlL6ReDnJ0XTZNaV1bWS7WScmMlrrDqXUxcBjSqkgjPXhBq31UX/dYyzTHf7hD3/g73//OwArV67kZz/7GQA/+clPWL9+PX//+9+pqqritttu4+mnnx76DQRB8DuhocYSmZEB7e19a8RceCGsXm1qQYSGBlpSz0yfbhSgnJy+7VdeaWpavPHG6Nx3ciYdFwRBCAClDgXC3QIxM8UoDceqWyaVAgE9cQ9LRuv6znSHL75o9vfc4zmVoc1mViBPO613FW+oeLNAfO973+OCCy7gN7/5DRs3buRPf/oT06e7h/8JghAobr3V7EcjW9Fo8/Wvez+Xk+P7/EiYVLZyQRDGlsrGdrrtOtBiWIaSWhOtmzXF3YUpBmCyxkGMCYFId3jy5EkAwsPD2bFjB7m5ubz99tvMnj2bxx57jBMnTvjvZoIgCGOIWCAEQfA79a0dfGntZgrKG7nn4rl89bO5Aw+aBJTUtRIbEUJ8ZF9beGJUKLHhIZTU+r34suDCaKc7/MMf/sCrr76KcjhKT506lYULFwJwpYtmUl9fz/e//30WLVrE0qVLWbBgwchuLAiCMMaIBUIQBL/z1v6TFJQ3khIbzsadssrqpLSujSw39yUApRRZU6I4LgrEqDKa6Q5vvPFGSkpK+OSTT/j444/5+OOP+dvf/tavX3FxMatXr+b+++/njjvuYNu2bSQmJg7/xoIgCAFAFAhBEPzOB4erSYkN55bP5LDvRCPHa2RiDFBS29ovgNrJ9ClRFNeIC9NoEqh0h06+//3vc+2113LffffxrW99iw0bNvDb3/6Wiy++mI6OjtG9uSAIgh8RFyZBEPyK3a756HAV585N5fMLM3jwtQP8Y1/5pHdj0tpkWVo523Ml5elJUbxzsBK7XRMUZMFcgROAQKQ7vM8lP+yDDz5IqEsql/T0dJ555hk6Ozv7tAuCIFgdsUAIguBX9p1opK61k8/OSiFrShR5qTFsPlobaLECTnVzB22d3WQmerdAdHTZqWyyjbFkk4fp0+Gmm/oHSl95pWkf7cRI3pQEUR4Ewf888kigJZjYiAIhCIJf2VlSB8DSnCkAzMuI4+DJpkCKZAlKe2pA9I+BAKNAAOLGNIp8/ev9c6U7Gc10h4IgjD5aw+bNpqZDVBSsW2f2V19tiklqSQjoV0SBEATBrxRWNhMTHkJGvKmyOycthtK6Nppto1QOc5xQUuc5hasTpwIhgdTDQ0+w2cFE+3kEYTTp7IRrr4XzzoMXXoDMTHj9dbN//nnTfu21pp/gH0SBEATBrxRWNZObEt2TynJ2WiwAhye5FcKZotWbC9O0xEiCFJLKdRhERERQU1MzYSbdWmtqamqIiIgItCiCYHm0huuvh5dfhtZWsNtNUoSkJLO326GlBTZuNP0myGMi4EgQtSAIfqWwspnleck9n+emxwFw6GQTp02fvOkqS+taSYoOIyrM82M3NDiIqQmRYoEYBpmZmZSWllJVVRVoUfxGREQEmZmZgRZDECzPli3wyitGeQBITIS77jLHd94Jb7wBdXXQ1mb6bd0KS5cGTt6JgigQgiD4jcb2Tk422shLjelpy0yMJDI0mAMVk9sCUVrXRqYX9yUn06dEUSwKxJAJDQ0lx1twgyAIE5a1a2H9esjP721LT4dFi8zx4sVw0UVQUdF7/u67Yc0auOWWsZV1oiEuTIIg+I0jlc0A5KX0KhBBQYrZaTEcEhcmsry4LzmZkRQlLkyCIAiD5IYb4Phxs3/vPbOtX9+3z/r1veeuvx5KSkx/YWSIAiEIgt8odCoQLhYIgNyUGIqqJ+/EuNuuKatv8xpA7SRrShTVzR20TPKAc0EQhMEQFgZHjsB3v2uUA2/1GG02uO46uP120z8sbGzlnIiIAiEIgt84Vt1CaLDqySjkZEZSNCca2mjv7A6QZIHlZGM7nd3aawC1E8nEJAiCMDQiI6GhAZ58Eq65xnOfNWvgqadMv0jfj2FhkIgCIQiC3yiubSUzMYqQ4L6PluzkKLTurYUw2SiuMT93dlK0z34zppjzokAIgiAMjksugSDHKyc83HMfp8UhKMj0F0aOKBCCMAwefRTy5naRntnFtGlQXR1oiaxBSW2rRzedGY6J82R1Y3IWh5uRNHAQNUgqV0EQhMFyxx29VoUVK8y+sBAuvdTsXdsjIkx/YeRIFiZBGCIlJfDNb2rs9t5/n/b2AApkIYprWjk1M75fe7Zj4lw0SassH6tpISw4iIx437bz+KhQ4iJCeiwWgiAIgm+WLoXLLoNNm+CCC+Dxx+H++6GoCPbtg3vvNe0pKXD++XDGGYGWeGIgCoQgDJFXXwW7XfVps9kCJIyFaGjtpKGts8cNx5WEqDDiI0MnrQJRXN1K1pRIgoPUgH1nJEVP2u9JEARhqCgFTzwBq1bBgw+aWg/19eZcUZGxOFx6KSxcaPqpgR/DwiAQBUIQhsgrf9eAeQItv7yWomk7SEz7LBAaULkCTYkjvsFbpqHspKhJu7JeVNNCTrLv+Acns1Jj+OcR8YkTBEEYLKGhcNVVkJFhPAJee80UjouMhAsvhNWrTS2I0Mn9mvYrokAIwhBoa4N3NvV+/ua3NXe/3c7+8gZWzEr2PnAS4FQO3DMwOZmRFM2OkrqxFMkSaK0prmntU53bF/OnxvHCjjJqmm0kxXiJCBQEQRD6cOutZn/llYGVY7IgQdSCMAQ+/hja2431ITfPzsXL4wDYVVofSLEsgTNz0HQvgcLZSVGU1bXR0WUfS7ECTmWTjbbO7p44kIGYl2H+pgrKJ3fhPUEQBMG6iAIhCENg9+7e43PPCSI+MpSZKdHsOC4KxPHaFpKiw4gJ92zYnJEUjX0SpnItqnZmYBqcC5NTgdhf3jBqMgmCIAjCSBAFQhCGwL59vccLF5r94qwEdpbUo7UOjFAW4Xhtq1frA5haEMCki4MoKG8EYHZa7KD6T4kOIz0uQiwQgiAIgmURBUIQhsDuvb1Kwvz5Zn9aVgLVzTbKGyZ3Ltfimlav8Q/gUgtikmUY2l3WQGpsOOnxEYMeM39qHHvL+logdpbUc/Wjn/DLNw/6W0RBEARBGBKiQAjCINEaCvb3fl6wwOydK8uFlc0BkMoadHbbOVHf5lOBcLo3TTYLxJ7SBk6Z1r82hi+W5kzhcGUzxx3f1bHqFq7+wyd8eryO379b2GPVEARBEIRAIAqEIAySsjJobjIB1LFxmowM056bGgNMbgWirK4Nu/aegQlAKcWMpKgJaYHQWvPuwUoKK/u6HbXYuiisauYUD8Vtpbq+AAAgAElEQVT1fHHJKeaP65XdJ9Bac+/GvYQHB/Hadz5DXGQov3hDrBCCIAhC4LBEGlel1B6gHeh2NLVqrc8LoEiC0A/X+IcFC3qL0SRFmyJpR6omrwLRk4HJhwIBkJ0Uzf4JuHr++t4KvvH0pwDc+bm53HpOLgB7yxrQGo/VuX2RNSWK06cn8NKOMgA+PFzNjy5fwOy0WK5cPI1nt5bQbdeDKkwnCIIgCP7GKhaIWOBMrfUyxybKg2A59ru4Ly1c0DtxU0qRlxojCgTeU7g6mZEURUltK13dEyuV6+MfHSNrSiQXzEvjf946xOGTxhKx+VgtAKdMSxjyNa89cwaHK5v5xRsHWbUgjeuWzQCMMtLW2T2pLV6CIAhCYLGKAjEFeF8ptUMptUEptdi9g1Lqq0qpbUqpbVVVVQEQUZjsHDrUezx3bt9zuSnRFFZOPNecwXK8tpWwkCDSYn0HCuckR9Nl1xTXTpw4iL1lDWwrruOGs7J56AunEBUezJ3P78bW1c0zW46zPC+JlNihF4T74pJMXvzG2Xz3gtn86urFBDmsDadmGmVEao8IgiAIgcIqCkSa1vozwBJgI/C2Umq6awet9R+11vla6/yUlJSACClMbgoLe49nzep7Li81hupmGw2tnWMrlEU4XtNKVmJkzyTXG84aBwcrJk6K0g8PVwOw+vRMkmPC+eFl8/n0eD3X/2kL5Q3t3Hh2zrCvfdr0RL5zwSyiXWprzEyOJiY8hD2lE6tOhFJqgVKqVil1X6BlEQQh8DzySKAlEHxhCQVCa93m2Nu11k8D24FVgZVqctPU3slfPi6ismlypyZ15XBhbwrXvLy+53JTHIHUk9SNqaimZVCF0vJSYwhScMBDHERJbSu3PLGNpT95e1wVmysob2RaQiRTosMAuHLxNFafNo2tRbXMy4jjvLmpfr1fUJBi4bQ4dk8gC4RSKgH4PfBMoGURBCEwaA2bN8NVV0FUFKxbZ/ZXXw1btpjzgnWwhALhgWBg4kVajiP+9NExfvjyPlb+/D0OVMivoqMDSo6bY6U0M2f2PZ/nyMQ0GeMgOrvtHKlqZlZazIB9I0KDmZkSQ4EHC8SP/76ffxZWU91s4+nNx0dD1FGhoLyReRm9ReKUUvzqmsUcefBiXv32ilEJdD5lWjwFFU3Y7eP/jaqUCgL+AtwDiH+qIExCOjvh2mvhvPPghRcgMxNef93sn3/etF97reknWIOAKxBKqTOUUktcPl8MzAPeCJxUkxu7XfO37aUsyoyns9vOSztOBFqkgFNcDHa7mQimZWgi3Fz9MxOjCAsJ4sgEDWz99duH+NVbh2hs7//0PlbdQme3Zm764Cotz02P7aeUFlW38HbBSf5jRQ4XzEvj2a0l2Lq6vVzBOrR3dnO0uqXHNcsVpdSALl3DZXpSNB1ddqqabaNy/THmAeAtrfXH3jpIDJwgTFy0huuvh5dfhtZWsNthyRJISjJ7ux1aWmDjRtNPLBHWIOAKBNAMPOAIoP4X8C3gIq31xLHPjzM2H6ultK6Nm5bnsGRGIu8fkhe2a/zD7Fn9J4XBQYqZydET0gJx6GQTv377MP+76TA3Pr4F7fb0dsYzzEnrP4n2xNz0WEpq22hyUUbWfVxEaFAQ1501gy8vm0FtSwcfHqr23w8xShw+2Uy3XXtUIEaTzMRIgHHl6uUJpdQXgOla69/56icxcIIwcdmyBV55xSgPAImJcNdd5vjOO81ngLY202/r1sDIKfQl4HUgtNYFwOcDLYfQy6aCk4SHBLFqQTrlDe387B8HONnYTlqc7ww7E5mBFAgwcRD7TkyswFYwKUojQoP42mdz+c2mw3x6vI4lM6b0nD9Y0URwkCI3deAYCOgNpN5b1shZuUnYurp5cUcZqxamkxobQUx4CErB/vJGLpifNio/k79wVoQeawUiq0eBaGPJjDG9tb/5PDDPsXgEkAkmoFprfVXgxBIEYSxYuxbWr4f8/N629HRYtMgcL14MF10EFRW95+++G9asgVtuGVtZhb5YwQIhWIx9JxqZmx5LZFgw58wxq32T3Qpx5EjvcW6u5z65qTEcr20dF643g6W9s5sXdpTxb6dl8tXPziQ2IoR1Hxf36XPwZBM5ydGEhwQP6ppLc6YQFhzE2wUnAXinoJKGtk6+uCQTgKiwEKZPiRoXsTeHK5sIDwlixgAF9PzNtARzv9K6tjG9r7/RWt+stV7irAEEPAY8JsqD4I5k5JmY3HADHD9u9u+9Z7b16/v2Wb++99z110NJiekvBBZRIIQ+aK3Zd6KB+VNN5dy56bHETsCUkUOl0CUDk1cFIiUau4aiau9uJY99eJSHXj8wbiwVByua6Oiys3J2MtHhIVy1JIvX95RT29LRp8+cQcY/AMRGhLJiVjJv7KtAa80zW0tIiwtnRV5yTx8TJ2H9VK9l9W1MSxg4fa2/iQwLJik6bNwrEILgDcnIMzkICzMLdN/9rlEOOjo897PZ4Lrr4PbbTf+wsLGVU+iPKBBCH0rr2mhs72LBVOOSoZRiTnrshMrb786ePfDWW9Dtw3BQcKD3bTV7tuc+zlSu3uIgdpfW88CrBTz6/hF+uHHfsOUdS/a7uehclZ9Jl13zyi4TWF9S28rx2lYWZw6t0vKqBWmU1rXxyzcP8cGhKm48O6dPtqI56XEUVbfQ3mlta05ZfTvTHO5EY01mYuS4j4FwR2t9n9b6vkDLIQQWf2fkEeuFtYmMhIYGePJJuOYaz33WrIGnnjL9IgPzyBXcEAVC6INzwuhUIADmOLLmuAfPTgS2b4fTTtdcdBGcvkT3cVVy0tkJxUW9k1v3InJOempBeMnE9MQnxUSFBfMfK3LYfryO6nGQQaegvJGY8BCyEo3LzLyMOOZnxPHCjjKAHjekocYqXDQ/naToMH73biG5KdH8x4q+xdbmpsdi1yZI2cqcqG9janygFIgoysQCIUww/JGRR6wX44tLLoEgx2w0PNxzH6fFISjI9BcCjygQQh/2nWgkSMHc9F4FYm56LI3tXVQ0Tryicr/+taa7yygHu3cp1nzJ3q/P0aPQ3W36ZEyzE+XF3T0yLJhpCZEeLRANrZ28vOsE/3baNL5weiZam2B1q7P/hKlx4Oqi84UlmewqqedfR2t4c99JZqXGkJM8uABqJ4nRYWy6YyX3XDyX33/5dMJC+j6KnC5RVo6DaO/spqrJFlALRFl924RU7IXJy0gz8kg9gfHHHXf0WhVWrDD7wkK49NLeBCbO9ogI018IPKJACH04UN5IdnI0kWG9AbFzHMrEgfKJ5cZUWwsbNvRt27Y1iAMH+rYdOtR7PG+Ob1/3vNQYjxaI9w9X0dFl5wtLMpmXEUtmYiRv7rO2AmG3a0eRtL4Zhq5dOp1pCZHcsWEXW4pquXCYmZISosL46mdz+yirTrKTogkOUhTVtAzr2mNBRYNRqKcmBEaBmJYYiW3i1IIQBNauhXvuMRl5Vq4020UX9c/I4zyXn28y8qxda85LPYHxydKlcNllkJICF1wAjz8OF14Ir75q9n/+s2lPSYHLL4czzgi0xAKIAiG4cbS6pccVx8mcNOdq8MAKRLddUzNOJjTPPAMdHf0Vgmef7fvZVYGYM4ACkZsSw9Gqln4Vgt87WEliVCiLMhNQSnHWzCR2WTwwvbSujZaO7n4KRGRYMPddvoATDW18ZlYy/+7mfuQPgoMU6XERnKi3rtXrRL1xH5qaEJj0xs60ypWN4+P/TRAGYqQZeaSewPhEKXjiCVi4EB580FgYiorMuaIi8/mnPzXnn3jC9BcCT8DrQAjWoavbTnFNC+fPS+3THh8VSkZ8BIdODqxA/PwfB/jTR8f4r0vmcdNy/08s/cn77/cef+Yz8OGH5vippzX33qt6HlJ9FQjf18xLjaGts5sTDW1kOuIG7HbNB4eq+cyslJ5A4bzUGJ7bXkpDayfxUaH++pH8inP1f6YH96QL56ex+4cXERsxerJPSzAuOlal1CFbZsLYpnB1khJrnIXFAiFMFFwz8rz7Ljz2mOdsOzYb3HyzUQKamkwfqScwvgkNNTErGRnQ3g6vvWYUvchIY4VYvdr87kKt+bqclIgCMQmobGwnJTYcNYDaXlbfRme3Jjc5pt85s7LuO6C1rqWDJz4pJjIsmB+9sp9lM5PGvMDWUNi1WwPmO7n/fvj8xZq2VkXhYcWRI5CXZ/qZDEymn7cMTE5yU8xk+0hVS48Csb+8kepmGytn91bQzUt1BFxXNfUpymYlnJP3TC81DkZTeQDjorO1qHZU7zESTtS3oRSkxXuJ+htlUmIcCoRYIIQJhGtGnqYmePHF/n3WrIGXXjLH0Y71jRtugJ//3LhA3XST52u7WjMefxweekjqCViJW281+yuvDKwcwuAQF6YJzpZjtZz5003cvmEXHV39A4RdOVrlWHFO6b/inJsSzZGqFp8Bm0/+q5i2zm5+f+3pAPyzsHoEko8u7e1QeNgcK6XJz4dzz+k9v2mT2WsNBQUDp3B14lQMjrjEQTiL8H3WkwLhJWOTFSitayUkSJEWG5gJ8tSECCoa2um2W9NR+UR9Gykx4YMuoOdvxAIhjCcGm0p1uBl5pJ6AIIwtk1aBaO3o4pdvHuTNfRUDdx7H/P7dQsJDgnhxRxl/+uiYz77O7EGeMurkpsbQbOuissn7ZOWt/SdZmj2Fz85OYWZyNB8fqRmZ8KPI/v1gtxurQvZMTXQ0XHhhr4Vm0yYzaS0rg+oq828SFa3JzvZ93SnRYUyJDmOvS6G49w9WsXBaXM+ED0wKzrCQIIsrEG2kx0cQEhyYx8TUhEi67JoqH39zgaSi0UZGfGDiHwAiQoOJjQix7PcjTG6Gm0p1JBl5pJ6AIIwdk1KB6LZrvvB/n/Dbdwr574176ez2vTLvTnWzrV+QrBUpKG/k/UNVfPu8WSzKSuDN/b6VpWPVLcRHhjIluv+SzMxk30XSmto72XeigWUzjTvOWblJbDlWS9cQv9uxYs+e3uPTFpl/g/PP7217e5PJ2LFlS29bfr4meIDFZqUUy/OS+eBQNXa7prG9k+3H6/q4L4EJEp6ZHG1pBaKsro3MAKUohd7sRmX11iyWVtVk66MUBoLU2HBRIATLMZJUqiPJyCP1BARh7JiUCsTu0noKyhu55JQMTjbaeGMIVojCymaWP/QOdz6/exQl9A8fHjauM9eckcV5c1LZWVLvs3jZ0aoWZqZEe4yVyE3t9e33xPbiOuwaluYkAXB2bjLNti72lFkz05CrAnHKKWa/cCEkpRjFsK5W8emnfRWIZWcO7t/l3DkpVDfb2HuigY8OV9Nt16ycndqvX15qDIUDxJUEktK63kDwQJDZo0BYMxOTFRSIFFEgBIsx0lSqI8nIM1r1BKSStSD0Z9wrEBUN7TS0Da0izAeHqlEKfnTFAqZPieKvm48PapzWmv96cQ+2LjvPbS+1fCGw3aUNZCZGkhwTzvnzUtEa3jtY5bX/0ermHkuDO+lxEUSFBXsNpN5yrJaQIMXpMxIAWJQVD0CBRWtH7NnT+9Y69VSzVwou/lzv2+jFF2Hz5t5+S5cO7torZ6egFGwqqOQPHxwlPS6C06Yn9Os3Mzma0rq2IVvAxoKOLjsnm9oDaoHIcCgQJyyYianbrqltsfUEMgeKlNgIKpusqWAJkxN/pFJ1ZuRZvdpYHaKjjcXAuJqa9quv7p+Rx1/1BKSStSAMzLjOwtTW0c1lv/uIsOAgnrllGdOTBrda+sHhKk6dFk9yTDgXzEvjr1uK6ey2EzqAr/eu0gY2H6vlB5fM44lPiln3cRHnzxteEa2xYE9ZA6dMMxP5BVOND/4Hh6r44pLMfn2bbV2cbLR5DKAG45ozM8W7y83WoloWTIsnKsz8SU2NjyQiNMiry1OgOXS493jevN7j1auN/yzAsxt0n5R/g1UgkmLCOSN7Cr97t5Buu+bnXzzV49/WtMRItDZKcJaXTEeBoryhDa1NKtVAERMeQnxkKGV11lMgals6sGtIDrQFIkYsEIJ18Gcq1eFk5HFaL1atMtaLV16B+npzzmm9uPRS3/UEOjt7LSjt7ZCba9yvzjrLuF+99ppRUp54QlKKCpObcW2BeHpzMVVNNhraOvn2+h2DGtPQ1snOkvqejDiLsuJp77QPqsbB5qMmKPiKxdP4zKxkdhyvt2yGmIbWToprWjkl0ygQSimWTE9kR0mdx/5F1d5z/juZlRrL4ZP9FYLObjt7yhpYMj2xpy0oSJGTPHDq10DQ3Q2lJb2fXQOjV62CyCjzOz1SqGhpNm+Y1DRNZn+9yyu/v/Z0LpqfxvK8JL5wuueBUy28wl7qmLQH0oUJjOXrZKP1Vtidk/bAWyDCaenopsXWFVA5BAFGXgjOHwzXegFSyVoQhsK4VSC67Zo/fHCU5XlJ3HpOLrtK6ge1Ere3rIFuu2Zpjgn2XZxlXEt2lQzsq7+1qJac5GhSYsPJz06k2dbFwUFUZw4EztgDpwUCYPH0BEpq2zxWinZaCmameHZhApiTHktFYzsNrX1dxg6dbKK9097jtuTEmfrVapSVQVeXUQySUux9MnFERsIlF/cfc8P1akjVL1Niw/m/ryzh6ZuX9RSPc6dHgWiwngIR6CrLTlLjwn1m/goUztSpVoiBAHzGNgnCWGGVVKq33mosFxs2QHOzWTRqboZnnzXtX/+653FSydq/SOzIxGbcKhCFlc1UNdlYfVomK/KSAfj4yMB1Bw44Jvxz002Bs+lTokiICmVXSb3PcXa7ZmtRHUuzjeKR7yj+ta3YmoWunGlE+ygQDmVpp4ef9WhVC0rBDB9uYHPSYgE46Gat2V1q7rUos6+f/8yUGErqWmnv7B7GTzB6HHPJZpuT3f/87bcrlOpdWoqO0dx5p//lcLoHWdFFxzlpT4sLsAIRG0GlBS0Q1Y7vJ9kCFgjAkkqWMDkZr6lU1641Rejy82HlSrNddFF/9yvnufx84361dm1g5bYSEjsyuRi3CsSnx40rzukzElk4LZ74yFA+PDywAnGwopGk6LCeF69SikWZCewq9a1AHK5spqGtkzMclovMxEjS4sLZVuTZJSjQHKtqITkmnISo3qWdU6bFE6Q8KxDHqlvITIwkItR7ntI56Q4FoqKxT/uuknriI0P7KR+5KdFoDcU11krD6czoAZCX2986cNZZsHGjIizcPO1+8oAiKcn/ckSEBpMUHWbJLEMnG9uJjwz1+fcwFqTGhVNlwbTJVrFAJMeY/29PVkVBCATjNZWqFdyvxjMjSd0rjE/GrQKx43gdiVGhZCdFERykWJ6XNKjKxwcrmnomwk5OzYx3uOF4Xyl3WiiWzDA2TKUUp2UlWjZNaVFNC9luE/ro8BBmp8V6tkBUN5PjJQOTk4z4CGIjQvpZIHaVNrAoK6Ff+tfcFN+1IwKFqwUiO9uze9Fll8GxoyaV63e+M3qyTE2ItGQMxMnGdtLiAjs5BkiLDaezW1PX6sUXIkBUNdmICgsmOjyweSicFpDqZmt9P8LkZbRSqY42VnG/Go9I7MjkZNwqEJ8er+e06Yk9k9b8GVMob2j3mdLQbtccOtncT4GYkx6LXRs3Hm8UVDQSGRrMDJdsObPSYiiuacHWZS0XHTCr/jOS+gdEnzY9gZ0l9X1WdO12bWpA+AigBqM0zUmL7RP30dTeycGKRhZnxvfr76xofazaWnEQrhYIX5Wlp06F004bXVmmJkRYVIGwBdx9CSDVIYPVXHSsUAMCIDHKaYEQBUKwBv5KpRoIxqv7VaCR2JHJybhUILrtmsLKZk7L6vW5nz/VxDTsP9HobRjHa1tp6+xmrrsC4fDt95WJ6WBFE7PTYwlyCYjNS43BrqGo2louOm0d3VQ0tvezQICJg2hq7+Koy6T+WE0LrR3dPd+hL+ZlxFFQ3tRTYXrLsVrsGpbl9vfxiQ4PISk6jNI6a30/fWIgcgInB8C0hChO1LehLbYkU9nYbgkFwmkFsZoCUd1sC3j8A0BYSBDxkaHUtFjr+xEmLyMpBBdoxqv7VSCR2JHJy7hUIJyuRqe4rHrPy3AoEOXeFQin683stL4KRHZyNKHBqp9rjhOtNQcqmpjrNs7pouOtNoIrFQ3trPjZO5z54NtDqnw9HI7Xmgn7DA8WhcVZZinA1Y1pr4eMTd44c+YUmm1d7HaM+eRIDWEhQZzuksLVlcwpUZTUWmuF/dix3sm6LwvEWDA1IYKWju4hF0McTex2TWWTzRIuTKmxRomxWirXqqbAF5FzkhQdRk2LWCAE6zCSVKqBZLy6XwUSiR2ZvIzLQnLtXWb121URiI8MZVpCpE8LhNMXPy+1r69/aHAQM5NjOOQlJWtVs43alg7mZvRXIJQanALxwo5SSuvaSI4J44lPili1IH3AMcOlqMZYFzxZIPJSY4gOC2ZnSV1PQbk9pQ2EhwQxK9V3DATA2bnJKAX/PFzN6dMT+eRoDadPT/AabJuZGMk+C8WJdHWZNK5Opk8PnCzgWguivU/AeyCpaemgy64tYYFwuglZrVhaVbONZTNHIbJ+GCTFhEkQtWA5hlMILtA43a82bep1v7r/fmM52bcP7r231/3q/POt5X4VKFxjR959Fx57zHNciM0GN99sXJiamiR2ZCIwLi0Qts5uYsNDyIjvO8GZPzWOAh8WiCOVLaTHRRAb0X/ZY3Z6rFcLhNPn3z12IjIsmGkJkQMGCWutefHTMpbMSORLS6fzyZGaIeVtb+/s5iev7mfD1hI6Ha5Dvih2KBAzpvS3QAQHKU7NTOhjgdhT1sDcjDhCBqjEDTAlOowFU+P4qLCaysZ29pc3ctbMZK/9sxKjKKtvs0zBvRMnwG7vrQEREeA5svNvuKLROlYa52q/c/U/kESEBhMfGWopC0RHl5361k5LxEAAJEWHSwyEIPiB0XK/muj1ECR2ZHIyLhWI9k47eWkx/bL+zM+I42h1C60dnquyHqlqJjfVc6DwnLQYSuvaPFZ0PVDet3aEK3mpMQNaIPaXN3K4spkrT5vGxadkYNcMyY3p5Z0nWPvhMf7z+d389p3CAfsX1bSSGBVKfJRn+/AZOVPYf6KRakd6zH0nGjll2sDxD06W5yXz6fE67n5hD8FKccXiqV77ZiZG0tmtfQa3jyXHj/ceZ2UFTg4nGfHmSVreYI3vB+j5XVnBhQkgNTacykbrrLA74w2sEAMBDguEuDAJgl/wh/vVZKuHILEjkxNLKBBKqZVKqU+VUruVUtuUUst89bd1dTM7NbZf+/ypcWiNx+rQWmujQHiptOx0hzrsQRk4UNFEamw4U6L729zyUmI4Wt3sM0/9J0dqAFg1P4256bFMnxLF+wervPZ359ltJeSmRLMiL5mXd5YNGHBbXNPCdA8ZmJx8fmE6dg1v7jvJ7rIGmm1d/YrA+eK6ZTNIig5n04FKvrJsBtk+sjdlObJWWSUOoqSk93imlxSuY0lKbDjBQYpyC9WCONlojSJyTtLiIjhpEQUUet2pLGOBiAmnrrXDMlY+QRjvDLeSNUzOeggSOzI5CbgCoZRKAF4Avqm1PhX4HrBRKeW1JHKXXTMrrb8iMN9HIHVVs42m9i6vCoTTPclTHMSBisZ+7ktO8lJjaO+0U+YjFefOknqmJUSSGheBUopTMuMpqPDuauVKYWUz24vruOaMLC45NYOimlafgeJgUrh6in9wMjc9lpzkaF7fW85fNxcTFRbM5xYOPiYjMzGKZ7+2jH9fnsNtF8zy2Tcr0TxVrJKJqa8FIvAKRHCQIi023FIWCKe7kFUmyFazQFhNgUiOCUNrLFcrQ5hYTHQ3HH8wWeshjOfUvcLwCbgCAawCDmqtPwHQWr8HlAPn+xrknkkJjLtMbESIx0DqI5UmLsCbApGVGEVEaFC/OIiubjuHK5t7sjy54wzI9uXGtKu0nkVZvRmO5mfEUVLbNqjMOx8eNpaKS0+dyqoF6QQHKV7f4939ydbVzYn6No81IJwopfj8wnT+WVjNSztOcMXiqR7jQnwxIymaey+bP2DgrzNI2IoWiEAHUDtJj4+wWAyEjeSYMEIHERMzFqTGRVDVZLNMqlurKRBOy6jEQQj+ZLK54fiDyVoPYTyn7hWGz7CzMCmllHa80ZVSRcD3tNZ/G8alZgJH3NqOONpd7/dV4KsAcVNn9suI5OjDvIw4jyv0zkBnbzEQQUGK2Wmx/WpBFNW00tFl76kV4Y6rAnHu3NR+52uabZTUtvGVM2f0tDnrLRwob+TMATK57CltICU2vGcifmpmPFuO1XrtX1rXhl17zsDkytdW5lLZZOPdA5XcePboFUOICA0mLS7cMhYIVwXCCjEQYOIgfAX/jzWVje2WCKB2khobTke3CVxO9OBGONY4EyAkWUAWMEHUgCMTk+fnlCAMhc7O3pX09nbIzTVuOGedZdxwXnvNrDg/8YT1UrEGirVrTbrS/PzetvT0/vUQKlzW/+6+2wQX33LL2Mo6GjhjRzIyzN/Ma68ZRSkysjd2pKJC/l4mEoNSIJRSe4G5rk1AkFIqXms90pmPAtxLOXfhZh3RWv8R+CNAfn6+9jbBmZ8Rx4ZtJXTbNcEuRd8OnWwiNjyEdB9+3bNSY3tW/J0ccLgaeXNhSogKIzkmzKsFYnepSWG6yLXonYur1YAKRFkDp7rUZ1iUmcCzW0vo6rZ7zJrUk4HJhwUCTNrbh69a5LOPv8hMjKLEIgpEcbHG/MlZxwKRER/BOwcq0Vr3SwwQCCoa2y0TQA2Q6lJMzgoKRFWTjbiIEK+pi8ea5BjznVRLILXgB9zdcKCvG87hw33dcP76V1lRBlPX4Oc/N0XVbrrJcx/X+giPPw4PPTSx6iGMx9S9wvAZrI/CUiDBscUBvwE+dlMeopRSCUqpoeqXpYD7VG66o33IzJ8aR2tHd89E2smB8ibmpMf6nKDNSY+hsslGncuL+GBFE8FBql/tCFdyU2Io9JLKdVdpPZU6bqwAACAASURBVErBQhclIDU2nKTosAFXnVtsXRRWNfcpmLc4K4G2zm6v93NWxR7IAjGWZCVGUlpnDRed4xa0QKTHR9DW2U1jm+fsYWPNyUYb6fHWsUA4g7mtksq1qtlmGfclMEHUgNSCEPzCZHXDGSmu9RCuvx46vOjzNhtcdx3cfrvpb/V6CBL7InhjUAqE1rpVa92stW4GcoH/AO5z6/YXoA74whBl2AicqpQ6BUAptRRj7XhriNcBPAdSm0rS3gOhnTjjKlwDnHeVNpCXEuNztdGZytWTj/b+E43kJEUTE95r7HG6WhWUe6470TO2vBGtjduSE6clY5dLHQdXimtaiA0P8ZgxKlBkJkZR3tBO1yBqWIwmra1QV2sUyOAQTVpaQMXpwZnK9URD4JWszm47NS02y7kwgbFAWIGqJmspEAmRoQQpqBULhDBC1q41K+j5+bBypdkuuqi/G47zXH6+ccNZuzawcluFiVAPQWJfhMEypChJpdRq4B3gYa21+wT/Kq210lqv9zDUK1rrBuAq4HGl1Bbg18DFWmvPM+QBmJUWQ0iQ6hNIXd7QTmN7F3O9BEI7WZyVgFKwragOMAHUnxbXcUZOos9xeakxNLR1Uu0hiLGgopF5Uz3XjzhS5VnpcLLH4f7kar3ITooiLiKEnSWeqzsX1bQyIznKEq4wTrKmRNJt1wNmGtp3ooH1W4777DMSXOMfpk7VBFvDA4WMBEcxOQtkYqputqG1dVK4Qm9BO6vUEqlu7rBMDQgw8VtTosM9Pn/GA0qprymldjlSeO9WSn0j0DJNVm64wWSqu+EGeO89s613e6OvX9977vrrzXN1IrnhjITxXg9hMqagFYbPgAqEUipZKfUNx+R+HXCn1vp+fwqhtX5Xa32G1nqp1vpsZ0am4RAeEkxeakwfC4SzLsTcASwQCVFhzEuP419HTd2GgvImmm1dLM3xHafgLRNTQ1snJbVtPVYRV3JTY2jt6KbCh1vGwYomkmPC+qwGK6VYlJXA7lLP+lVRTcuA8Q9jTWaioxaEjziIzUdruOrRT7jrhT09dTP8jTMrBEC2BWpAOHFWo7aCBaK3BoR1JsiRYcHERoRYJpWr1SwQYAK6x6MLk1IqGJgFLNda5wOfB36plJoWWMkmJxPVDWesGI16CGPlQjRZU9AKw2cwFohk4NvAP4BcrfXjHvr8H3DAn4KNhPkZcX3iCwoGCIR2ZdnMJD49Xoetq5stRSbb0dLsKT7H9CgQbnEJBxwyzPdggchNMZN8X+lfD1c2eYy9ODUzngMVTbR39o09b+/spqS21Wuq2kCR5VAgfMVB/PLNQ0yJDiMtLpyH3zw4Kik7XRWImTnWUSBSYsIJUtawQDjjDKxkgQBHLQgLWCBaO7potnVZT4EYp9WotdbdWuvvOdxjAWqADsAi9sHJx0RwwwkU/qiHECgXIol9EYbKgAqE1vqA1noesAFoAFBKrVBKTXccXwFUaa33jqqkQ2D+1DhONtp60i3uKqknMzGSuEHUOjhz5hTaO+3sKmngkyPVTJ8SNWBAaXpcBDHhIRxxUwacSownC0SeY5LvPsaJ1prDJ5s91rtYlJlAt12z70RfN6bimlbsulc5sQoZCREEKSit9WyBaLF18enxOi49dSrfOCeP7cV1/epxDMTTm4tZ+Yt32bizzGufY8d6j3NGL3PtkAkJDiItLsISxeQqHQpEqoUsEOCoRm0BC0R1k5mkp1jIhQlMIPV4tEB44NfAs1rrPr6MSqmvOlyctlVVVXkZKviD8e6GE0hGWg8hUC5EEvsiDIehxEDsoTdb0gPAeY7jFcByfwo1UpwT9oLyRjq77XxcWMNnZiUPauyynCQiQoO47+V9vF1QycWnZAw4RilFbkp0P2vCvhONJEWH9QSBupISG05sRAhHqlr6nQPjStJk62KWBwvE4p5A6r4KRE+tC4tZIEKDg8iI956JacuxWrrsmhV5yaycnQLAjuODD4Hp6LLzm7cPU17fznfW72RvmZf4kKLe4+zsQV9+TEiPj6DcIi5MwUGqp7aAVbCKBaLKMUlPtpoFInp8WiBcUUo9AEwDvuV+Tmv9R611vtY6PyUlZeyFm0SMhhvOZMJZD2H1amN1iI42ilZ0dG89hKuv7l8PYbRciAbjAiWxL8JwGGqp2V1KqWbgMy5tC4H+FdQCyIKp8QQHKT46XM324jqabF2snD04EeOjQvnhZQvYX95IRnwE3z4vb1Djch2ZmFzZUVLPoqwEjwHNRumI6Zn0u3O40qzAz/JggUiNiyA9LoJdbnEQTmvGTItZIMBUCT/uxQLxz8JqwkKCyM9OZEZSFIlRoewcggLxyq4TVDbZ+MVVpxISpHh51wmP/Y4e7X3iWskCASYOwgoWiIrGdpJjwvrUULECTgtEoKtR91ShtpgFIjkmjKb2Lmxd7iV1xgdKqYeBBcAXtNbjWxMa5/jDDWeyc+utphbChg3Q3Azd3Wb/7LOm/etf7z/GXy5Ew3GBktgXYTgMtRL1Aq11kVLqPQClVA5wNmBTSs3TWhf4W8DhEB8VyoXz0tiwrYSObjshQYrleb4DoV1Zc0YW7Z3dnDY9kejwwX1FuSkxvPBpGU3tncRGhNLQ2klhZTNXLp7qc8xHhZ7N8YdOGmXAkwUCYFFWfL9UrkeqmpmWEElU2LALjI8aM1Ni+Mfeco/nPiqsJn9GYk+q3EVZCez0kqbWEy/tLCMnOZrLF01l484TvLq7nLs+N5cgt0nwUYu6MIFJ5frewaqAF5Mrb2jrqXpuJVJiw+nostPY1kV8VOBKmTotEJ6sioHEWQuitqWjJy3weEApFQQ8AiRiMvlZoxjKJMbphrNqlXHDeeUVqHc8jp1uOJde6t0NRxg6/qpiPZIK4q6xL01N8OKL/eVcswZeeskcR1tvnVIYY4ZqgQhWSoVgSvkmAk9jHv73A39TSqX7Wb5hc/1ZM6hr7eTP/yxieV4ysYOIf3CilOKm5Tk9rkKDwRnsfNhhBdhRYlLBnj7dewrY3NRo46rU3t+hsbCyiSnRYT0TA3dOzUygqKaV+tbepYIjVS2WtD6A+X7qWjv75aqvbrZxoKKJ5Xm9LmaLsxI4VNnk8XtxR2vN7tIGzsyZglKKyxZlUFbfxg43BaSlBWqqzZsuJFQz1bteFxAy4iNo7Qh8MbkT9e2WVCBS46yRyrWqyYZSWKrOChgXJoCa8ZfK9WLga8BM4COl1L8c2wUBluv/t3fn4VFVaeLHv6eyVVayhyUkEPYdJKAILYyoKJs0iqK2QI8r7fTYtoyoM9Ntt7ut3e10i/7UcV+wp1EQN9xARWSTTRaFAAmENQkJIXsqdX5/3KoiSyWpkKRuLe/neeop6t5TVefeKir11jnnfYPauU7DEeemI6YQtXcKlKx9EW3V1gAiB6gFLgL+AyNjxu+BZ4BtwMIO7V07jOuTxBVDu3Ld2Az+eu3ITn++UY5gw5kCdsuhEiwKhrcQhDjXKrhbB7H3RFmzow9wdh3EDketCFudnf0FZT63/sGpuaxT6xwpW+sHEKMyEtAafmhmLUN9eUUVnK6sdRXY+5cBxlS1dTmFDdrVX/+Qnu47NSCcnAv1j5Watw5Ca82Rkkp6+GAAkeb4xd/shdSFZdUkRoUTGtLWj87OlRRj/GUv9LOF1FrrDxz1g8ZorS+od/nc7L4Fu3OZhiPOTUdMIWrvFChZ+yLayuO5LlrrBgOVzpEIrXWt4/Y8rbXPTMBVSvHsL0Z77flS46wM7hbHmp8K+NWkvmzOPUX/tNgGFagb61MvE1P90Q4jA9MZZrYw/WmYozr19sMlXNQ/hT3HzlBRU8d5mS0XvTNL/VoZY3ufTYu7LqeQWGsow+oVy3PW68g5WcaFfVpe/O5cBzIi3Th/8VHhDOway4aDp/h1vXb1A4g+Wb435u6cdnKspIqBXVsueNhZisprqLHZ6d5K1jEz+NIIhK+lcAVci96lGrUQ/qk9U4g6YgqUc+3LF1+cXfvy4IPG385du+B3vzu79mXyZFn7Ito+AuGitbY5gwfHbZ8JHswyaUAK3+cVs/PIab47UMRlg9NabJ+ZFEWoRTVZSF1wpprSKpvbFK5OcdYwslKiXV+gNxw0fslvrWaFWbp3iSQyLKTJsa7NKWRcVlKDRbupsRHERIRyoJkMVfVtP3waa5iF/mlnR17O753I93nF1NbZXdv27Tt7n94+VAPCyReKyR0tMZ7bJ6cw+cgIhM8GEDF+O4VJCEH7phB1xBSo9qagFcHHt8bh/dykAanU2TX/9tYWQpTihgsyW2wfFmIhMymqyZdq5wJqd0Xk6huZHs+2w6fRWrMp95RHNSvMYrEoshqluj1UVEF+cWWD6UtgjB5lpUQ3m6Gqvh35JQzp3qXBlJLzs5KorK1zTe8C2LHj7H2GDm3HgXSStDgr4aEW8oqar9ZdY7M3u68j+HIAER0RSkxEqG+MQPhYBiaAmIhQwkMtfjeFSQhhaM8Uoo7KoiRrX0Rb+F66Hj82OjOBmSO68/72o8wc0d2jar5GKteGv7S7Urimtlw5e1RmAu9uPcK2wyVsyi3m4oE+lU23iT4pMXyfV+y6vdaxTqFxAOFsu/HgqRYfT2vNXjdTvZxTpDYcLGK0Y0rXtu0aY+0/DB9+zofQaUIsil5JUc2OuhwtqWT639Yyvm8yT80ZQXhox8f+R0qML+e+uAYCnLUgzPuCrLWmsKza52pAgBF0p8REuLJECSH8S3unEHVUFqWFjpWss2Z12KGJACUjEB0oxKL4n+tGseo3F/Hwzz37mbtPagy5heUNptvsPVFGQlQYyTEtZ3qZNbI7idHh3PTqZk6V13hcLM8sozLiOVJSyWFHPYhv9xeSFhfhtnJ2VnI0R0oqqahpPitRYVkNpVW2JgvHk2Mi6Jcaw4YDRgBisxkfwE6+GEAA9E6O5mBh01EXrTX/+d4PlFXZWLn9KI9+3DnZko+VVBIZFkK8iWlSW5IaF+GqlG2GM9U2qm12nxyBAEiLi+CkD1TrFkK0XXunEEkWJeFtEkB0ggFdYz1OGzsgLRabXbPvxNkvjntPnKFfamyr9QBirWH8alIfTpXXMPu8Hswc4WO5SRtxBjhrcwqx2zXrcgoZ3zfZ7XH2cUzfOljY/DqIAy1U3j4/K5HNuaew1dnZtw9qqo3nSOtmJ8nzkiBelZUSw6FTFdjqGk5V2nKohNU/FfAfUwYwZUgan+46cU4F1b7Yc8KVJcydo6cr6R5vNbUORUtSY62mjkA4gxdfXAMBzmJ75hcjFEKcm/ZMIZIsSsLbZAqTyUZlGNmDthwqZnD3OKptdfxw5DTzx7W8fsLpl+N70zc1hgv7uP8i7kv6pMTQNc7K2n2FpCdEUlxRy8T+KW7bOutZ7C8oZ0j3Lm7bOKd+uat9cX7vJN5Yf4hdR0v5ccfZDFejRvruOeqdHE1tnSa/uJJeyWeP6ZOdxwgLUVw7tieR4SGs2nWCA4XlbUrZe/hUBbe9/j02u+buS/vz68n9mrTJL/bNInJOaXERnCitMq3YnmuKV4JvnqO0OCvfNkpfLITwL+c6hUiyKAlvkxEIk2UkRpEcE86WQ8bagB35p6mx2cn2MJtSiEUxaUBqp8yJ72hKKSb0S2ZtTiF/+WwvaXERXD7Ufe3BXknRKHV2lMGd/QVlWMMsdHdTeff8LOP8rT9QxNatZ7ePHOG7AUSWI2ioP+qitebjnceZ0DeZOGvY2VGcfW37ovj0F/uwWBQT+6fwt9U5nK5oWKTPbtfknPTdOiJgjEBU1doprTKn2N6RYt9dZA7GFK/SKhuVNUGfEE+IoCNZlIS3+f63zgCnlGJURgJbHIuLN+Ua8/bH+Gg61va6dkxPamx2thwq4eYJWUSEuq/oZg0LIT0h0m2RPacDBWVkJcdgsTT9JEyNtTKoWxzvfX+U1984OyWofp5sX9PbEUAcqBdA7DpaSn5xpSvQykyKpmdiJN+0IYAorarlva1HuH5sBv8xZQA1Njsrth9p0MZYb1LXYupgs/VMNL64H2ohU1VnOlJSQYhFuYra+Zq0WN+olSGEMIdkURLeJFOYfMDozAQ+232CorJqNh08Rd/UGBKjW15A7a/G9Erk07su4qMfjnFjK9O0spJjWhmBKGd4uvvpTQA3XpDJbx4roOCIEScnJtmZNs13Y+bE6HASosL48Vipa9vHO48RYlFcOvjsSE12ZiLf7W9+LUNjOw6fps6umTwolaE9ujC4WxzvbDrMvHG9XG2cmb/q19PwNc5pXQeLyl2FFL3pSHElXeOsPleF2smZ9e1EaTWZSc2kWBFCBDTJoiS8xTf/EgaZC7KMVb1/+zKHDQdPBezog1PPxChum9gHa5j70QenPikxHCgox25vumC4qraOw8UVLU65+fmoHlRs6+26ffttCqtvlskAjNGo83snsW5/kWuR9Cc7j3N+78QGAWW/tBiOl1ZRWlXb3EM1sOVQMUrBCEe189nn9WDX0VLyis6OdDhrj/Tz4RGIzETjS3FuCwvrO9PRkiqfXf8AxhoRQBZSCyGE6HQSQPiAkT3juXRwGq+sy0VruO2iLLO75BOyUqKprK3juJsvRHlFFWjtfgG1U8HxECoPGXUgQkI0Cxf6/qTP8X2TOFJSSV5RBftOnGF/QTlXNFon0t9RH6R+Ub6WbD1UTN+UGOIcmcGmDDEe77PdJ1xt9p44Q1pcBF0ifXdsOzI8hG5drKYFEEdKKn22RgZAqmsEQgII4d6SJWb3QAgRKCSA8BG/mz6YHvGR/OHKIQ0y8AQz5+iCu4rU+1tI4eqUkQEHDijuuQduvlmRnt45/exIFzqK6n27v5B3Nh1GKbhsSMMAop9jmlHOidYDCK01Ww+XuLJ9gTECNLBrLJ/WCyD2nShrtXChL+iVFM3BIu8HELY6O8dLq3w6gIizhmINs5ia6lb4Fq1hwwZjXnxUFLzyinF9zTWwcaOxXwghzoUEED6iZ2IUaxf/C9dk9zS7Kz7DWWDOXXVm59qIlkYgADIz4fHH4bnnOr5/nSErOZpuXay8/l0er32Xx+xR6U0qmqcnRBERanGtW2jJoVMVlFTUMrJnQoPtlw3pyubcU5wsraKs2sbeE2cY2NUPAojkaFNGII6XVlFn1z49hUkpJbUghEttLVx/PVx8Mbz7LqSnw8cfG9fLlhnbr7/eaCeEEG0lAYQP8fU6Dt6WEhtBbERoMyMQ5XTvYiUqPLDyACiluH/qIHKLyrFYYNGU/k3ahFgUfVNjXOsWWuKc5jSgUXDw81E9sGtYuukwn+0+TrXNzpRmUur6kt7JURRX1DZJQ7t2XyE3v7qZ577aT52bNTPt5Uzh6ssjEGAspD5aUml2N4TJtIZ58+D996GiAux2GD0akpKMa7sdysthxQqjnYxECCHaKrC+fYmAopQiKyXa7QjE/oIyV7XqQDNjRHdGpMdTWlVLNzc1LgD6pcaw8eCpVh/LWVMiq9G0uN7J0VzUP4U3N+SRlRxDj/hIRmckuHsIn9LLkV0op6CM0ZlGf8urbfzHP7dTXFHD53tO0DclhksGp3Xo8+5zBGK9fXx6YWZiFF/tLTC7G8JkGzfCypVG8ACQkAD33mv8e/FiWLUKiouhstJot2mTUYhMCCE8JSMQwqf1SYlpMgKhteZAQdsqMfubjKQohvZoPlVpVkoMR09XUVXbctGwA4XlxEeFkeAmLfC/ju/FidJqvjtQxJUju7utp+FrRjmCnA0Hz6axfXbNfo6druKVX44lMTqc97Yeae7uLdJas+FAkdtzuvtYKXHWUNJ9eAoTGFO8Tp6pprzanGJ7wnwvvAD332/UvJk40bhcdhmMGGHsHznSuO3cl50N991n3E8IITwlAYTwaVkp0Rw7XdXgC9GJ0mrKqm2trn8IZJlJUQAcPtVyUbXcwvJmfzWfNCCVlf82gcdmD+O2iX06vI+dISU2ggFpsa46GGXVNl5dl8u0Yd24ICuJGcO78dmeE5yubPvE7v/bnM+1z6/niqe/Yd+JhutLdh0tZXD3OJ+fZugcockzqdieMN/8+XDokHG9Zo1xWbq0YZulS8/umzcPDh822gshhKckgBA+LcsxynCw3sLZPY5CawN8uGZBZ3MWCstt5YviwRYCCIBh6V2YOzbDp9O3NnZh3yQ25Z6i2lbHPzYd5ky1jVscqY9njuxBjc3ON/vaNo3ndGUtj3/yIwO7xlJcUcODH+5x7bPV2fnxWClDunu/eF1b9Uo2Ass8EzJVCd8QHg7798NddxnBQU2N+3bV1XDjjfDb3xrtwwOzdqkQopNIACF8mrtUrruOngZgcPc4U/rkC3oltf5FsaLGxrHTVU3WP/i7C/skU1VrZ8XWoyxZs5/szARGOorkDe0RR6hFsftoaSuP0tD7249SVF7D41cNZ+HEPny9t4Dv84oBIwirttkZ4gfvN2dgaUaqW+E7IiPh9Gl4/XW49lr3bebOhTfeMNpF+vbMPCGEDzI9gFBK/aCU2qSUWu+4fGl2n4TvyEyKQikj65LT7mOlZCZFEWv1n1/NO1p8VDhx1tAWp6rkFhr7Aq2uyIV9kugRH8k9y3ZwpqqWh34+1LUvIjSEvqkxrlEqT23OPUVqbATD07tw47hMEqPDefqLfQDsdASs/jACERMRSnJMBHmFMoUpmE2bBhbHX/eICPdtnCMOFovRXggh2sL0AAKIBc7XWl/guFxsdoeE77CGhdAzIcpV9wGM+ej+8GtwZ8tMiiavhTUQzmlfvp45qK2iI0J5744LuWJoV/40ZwQDuzZ8LwzuFsfuNgcQxYzplYhSiqjwUG69KIuv9xaw5VAxb288TNc4q6suia/rnRxFroxABLW77z47qjBhgnGdkwPTpxvX9bdbrUZ7IYRoC18IIBKBr5RSW5VS/1BKjXTXSCl1q1Jqs1Jqc0GBpCkMJgO7xrLtcAlaa0qraskrqvCLX4M7W2ZSVItTmA4WGkGXc2FtIEmNtfLsL0Yzc0T3JvsGd4/jRGk1hWWeVWQ+drqSIyWVrrSwADdeYIxC3PHmFjYePMXtE7MIDfGFj8vW9U6OZt/JMrQk9w9aY8fCjBmQkgKXXAIvvQSXXgoffmhcv/yysT0lBWbOhDFjzO6xEMLfeOUvolIqvN4UpfqXcCBNa/0zYDSwAvhcKZXR+DG01s9rrbO11tkpKSne6LbwET/rl0x+cSW5RRXsPOJY/9BNRiAyk6I4UlxJbZ3d7f4DheV0jbMSHRFc5V6c7w1PpzFtzjXWOmT3OhtAREeE8j9zRxFiUXTvYmXu2CYfST4ru1cip8prPCo0KAKTUvDaazB0KDzyiDHCkJtr7MvNNW4/+qix/7XXjPZCCNEWXvlmobWuAS5opY0deFMpNQ+YAkhWagHARf2NgPHrvQXsO3kGa5ilwZe9YJWZGI3NrjlaUulaPFtfSylcA9kgRwDx47Ez/Kxf6z82/HDkNOGhFtf9nCb0S2b1oknU2OxYw0I6pa+d4cI+SQCs21/YoAK5rc5OiEX5fCpa0THCwmDOHOjWDaqq4KOPjMJxkZHGKMTs2XD8uNFOCCHayhd/mgwB2jaBWQS0zKRoMhKj+HT3cXYeKWXKkK5BvYDaKdOVianCbQBxsLCcy4d283a3TJcQHU58VJjH6wAOFpbTKymKMDdTlMJCLG63+7L0hCgyk6L4NqeIX47vTUlFDbe9/j3f5xUz+7wePHH1CLO7KLxk4ULjetYsc/shhAg8pv5lVEqNUUqNrnd7KjAIWGVer4QvumJYV77NKeJ0ZS2zz0s3uzs+IdNVNKzpF+Xi8hqKK2oDLoWrpzITozjUSpE9p9zCcrcBmD+7sE8SGw4UkV9cwcI3trDlUDFjeyfyf9/n89PxM60/gBBCCNECs39aKwMeciygXg/8G3CZ1rrE5H4JH7PosgE8cfVwbp7Qmwl9k83ujk9IjY3AGmZxm8rVWQcgGKcwAWQkRXtUjdlu1+Sdqgi483Td2Axq7XYm/mkN6w8W8fhVw1lyw3nEhIfy9Bd7ze6eEEIIP2fqFCat9R7gCjP7IPxDWIiFa7J7mt0Nn2KxKDISo9xWoz7oqJvR209Sj3a0jMRIPvrhGLY6e4vZk46VVlFjs7umgwWK4enxPH9jNk99tpe7L+3vWkc0Y2R33t92lDq7JsQiayGEEEKcG7NHIIQQ7ZCRGM2hU02nMB0oLCPEouiZEFhfjD2VmRhNnV1ztKSqxXZ5zloZATaFCYzkAyvuGO8KHgBGZyRQVm1j30mZxiSEEOLcSQAhhB/rlWTM9bfbG+b8zzlZRmZSFOGhwflfPMO5wNxNcFWfc6pXZoBNYWrOeY5aF1vyfGeWqFJqolJqi1Jqh6PWT4sZ+4QQQpgvOL9dCBEgMpOiqKq1c/JMw6JpOSfL6JsSY1KvzFc/Q1VLcgvLiQi10C3O6o1uma5XUhSJ0eFsPVRsdlcAUErFA+8Cd2ithwOLgBVKqeAcOhNCCD8hAYQQfsyZPehg4dlf2mtsdvKKKuiXFrwBRFqslfBQS6uZmHKLKshMisISJOsBlFKM6hnPFh8JIDBq/vyktf4OQGu9BjgGTDazU0IIIVomAYQQfqx/mlEo7KfjZ0un5BWVY7Nr+qYGbwBhsSh6JkS6TXFbXyCmcG3N0B5dOFBYTlVtndldAcgC9jfatt+x3UUpdatjetPmgoICr3VOCCGEexJACOHH0uIiSIgKY8+xs4tic06WAdA3Jba5uwWFzKRoDp2qbHZ/oKZwbU1WSjRa43GdjE6mgMaRjI1Gf5u01s9rrbO11tkpKa1XFxdCCNG5JIAQwo8ppRjULY499UYgnAFEn9Tg+mLcWEZiFIeKytFau90fqClcW+MMmA4UeFapu5PlAxmNtmU4tgshhPBREkAI4ecGdYvjp+NnsNXZAfjx+BnSEyKJCje1zIvpMpOiKK+po6i8xu3+QE7h2pJeTU6c/wAAIABJREFUyU3XzZhoBTBcKTUMQCk1FhgIfGZqr4QQQrQouL9hCBEABnWLo9pmJ7eonD4pMWw4WMTP+sk0j/qZmJJjIprsD7YUrk5x1jCSYyLI9YEAQmt9Wik1B3hJKaUxpi9N1Vr7Tp5ZIYQQTUgAIYSfG9TNWOuw62gpdg2FZTWMy0oyuVfmy0g0AoNDp8oZ7ah/UF+wpXCtr3dylK+MQKC1Xg2MMbsfQgghPCcBhBB+rn9aLMkx4Xy44xglFbUAjOsjAUR6QiRKwaEi9wupgy2Fa329k6P58kfJZiSEEOLcyBoIIfxcWIiF2eel8+WPJ1m+7Qg94iPpmRhcC4PdsYaF0DXO2mw16mBM4erUOzmGwrJqSqtqze6KaIMlS8zugRBCGCSAECIAXJOdjs2u2XqohHnjMs3ujs8wMjE1TVcarClcnTIcAWZ+C2luhfm0hg0bYM4ciIqCV14xrq+5BjZuNPYLIYQZJIAQIgD0TY3l3isGsuSG87htYh+zu+MzMpOiyHNT7yBYU7g6pSdEApBf7BO1IIQbtbVw/fVw8cXw7ruQng4ff2xcL1tmbL/+eqOdEEJ4mwQQQgSI2yf2YeqwbmZ3w6dkJkVTcKaaihpbg+3BmsLVyRlAHCmREQhfpDXMmwfvvw8VFWC3w+jRkJRkXNvtUF4OK1YY7WQkQgjhbRJACCEClnOqzuFGU3WCNYWrU2J0ONYwC/nFEkD4oo0bYeVKI3gASEiAe+81/r14sXEboLLSaLdpkzn9FEIEL8nCJIQIWM4AIq+onAFdY13bgzmFKxgVzNMTojgiAYTPeeEFWLoUsrPPbuvaFUaMMP49ciRcdhkcP352/333wdy5cMst3u2rECJ4SQAhhAhYzjUOhxqtgwjmFK5OPeIjyS+RNRC+Zv58eOIJuP9++OUv3bdZuvTsv196CR57zLifEEJ4i0xhEkIErPiocOKsoeQ1ysQUzClcndITImUKkw8KD4f9++Guu4z1DTU17ttVV8ONN8Jvf2u0Dw/3bj+FEMFNAgghREDLTIpukInJVmcP6hSuTukJUZRU1FJWbWu9sfCqyEg4fRpefx2uvdZ9m7lz4Y03jHaRkd7tnxBCSAAhhAhoGUlRHCo6W0xuf0E5NTY7g7rFtnCvwNfDmYlJRiF8zrRpYHH8dY6IcN/GOeJgsRjthRDCmySAEEIEtH6pMeSdqnD90r7zyGkAhnbvYma3THc2lausg/A1d999dlRhwgTjOicHpk83rutvt1qN9kII4U0SQAghAtrInvFoDTsOlwCw62gp1jALWSkxJvfMXOnxzmJyMgLha8aOhRkzICUFLrnEWCh96aXw4YfG9csvG9tTUmDmTBgzxuweCyGCjWRhEkIEtJE94wHYeriEC/sms/PoaQZ3iyMkiDMwASTHRBAeapEpTD5IKXjtNZgyBR55xKj1UGLEv+TmGiMO06fD0KFGOxXcb2UhhAkCLoCw2+0UFhZSUlJCXV2d2d0RwmtCQkKIj48nOTkZi0UGF53io8LJSo5m2+ES7HbN7qOlzD6vh9ndMp3FokiPl0xMviosDObMgW7doKoKPvrIKBwXGWmMQsyebdSCCAszu6dCiGAUcAFEfn4+Sil69epFWFgYSn6aEUFAa01tbS0nTpwgPz+fjIwMs7vkU0b2jOebnEK25ZdQVm1jaI/gXv/g1CMhkvwSCSB81cKFxvWsWeb2QwghGvPKz5RKqTCl1CKlVK1Sam6jfROVUluUUjuUUpuVUhe057nKy8vp0aMH4eHhEjyIoKGUIjw8nB49elBeXt76HYLMBVlJFJyp5s6lW4mzhjJ1WDezu+QT0hMiOVIsi6iFEEK0jbfmOdwCaGB9/Y1KqXjgXeAOrfVwYBGwQikV1Z4nk+kbIljJe9+92ef1IDszgcOnKpl/YS9iIgJu8PWc9IiPpLCshqpame4phBDCc175tqG1XqK1fgpo/FdqCvCT1vo7R7s1wDFgsjf6JYQIDqEhFv7nulHcNKE3N0/IMrs7PiM9wfitRtZBCCGEaIsO+xlOKRUOfO1m10Va65pm7pYF7G+0bb9je+PHvxW4FZD53UKINuseH8l/Tx9sdjd8iquYXEklfVODO62tEEIIz3VYAOEIEtq6fkHRdFTChpuREa3188DzANnZ2fpc+iiEEOIsZzG5w6dkHYQQQgjPmT1hOh9oPJyQ4dguhBCiE6XFWrGGWThYKAvvhRBCeM7sAGIFMFwpNQxAKTUWGAh8ZmqvAsCCBQuYPn16m+9XXFxMWloa+/c3nlnW0NVXX82f//znc+2e3+ns89maYDvfwjssFkVWcgz7C8rM7ooQQgg/YmoAobU+DcwBXlJKbQT+CkzVWpeY2S8zLVq0iMsvv7zdj/P000/zxhtvtPl+jzzyCFOnTqVPnz4t9uv3v/89Dz30EKdPn3b7OLfffjt33XUXzzzzDMOHDycuLo64uDjGjRvHhx9+2OZ+tebRRx9lzJgxxMXFkZKSwowZM9i5c2eHPX5Hnc8HHngApVSDS9euXZvcr63nW4hz1Sc1hgMFMgIhhBDCc14NILTWk7TWSxttW621HqO1Hqu1vtCZkSlYbdq0ibFjx7b7cbp06UJ8fHyb7lNRUcGLL77ITTfd1Gq/hg0bRlZWltsv1VprVq5cyZVXXkl6ejqPP/44W7ZsYfPmzVx88cXMmjWLHTt2eNSnBQsW8MADD7Tabs2aNfzqV79i3bp1fPnll4SGhnLJJZdw6tQpj56nNR15PgcMGMCxY8dclx9++KHJfdtyvoVoj6zkaPKLKySVqxBCCI8FRTL0P6zcxe6jpV59zsHd4/j9jCEet6+trSU6Opra2lq+/vprHnzwQQYPHsyuXbuavc/XX3/NPffcw86dOwkJCWHgwIH87//+L0OHDmXBggUUFhbywQcfADBp0iQGDx5MfHw8zz//PBaLhXnz5vHEE0+4agd89NFHWCwWxo8f71G/Zs6cydtvv80dd9zRoF+bNm2iqqqKCRMmEBra8C328MMP8+yzz/Ldd98xfPhwj89Pa1atWtXg9uuvv06XLl349ttvmTFjhkeP4Y3zCRAaGup21AHO7XwL0R59UmOwa8grqmBA11izuyOEEMIPmL0GQjiEhITw3XfG4MuGDRs4duwYa9eubba9zWbjyiuvZMKECWzfvp0NGzZw5513EhIS0ux93nzzTUJDQ1m3bh1///vf+etf/8o777zj2v/NN98wevToBhW8W+rX2LFj2bhxI5WVDXPIL1++nGnTpjUJHurq6li6dCllZWVceOGFHp6Zc3PmzBnsdjsJCQketffW+QQ4cOAAPXr0oHfv3sydO5cDBw649p3L+RaiPbKSowE4IOsgOt2SJWb3QAghOkZQjEC0ZSTALBaLhWPHjhEbG8uYMWOafOlsrLS0lJKSEmbMmOGaXz9w4MAW7zN48GD++Mc/AtC/f39eeOEFvvjiC6677joA8vLy6Natm8f96t69O7W1tRw9erTBmokVK1bw4IMPum7/8MMPjBs3jqqqKmJiYnjvvfcYNmyYB2fl3N15552MHDmScePGedTeW+fz/PPP55VXXmHgwIGcPHmShx56iAsvvJBdu3aRlJR0TudbiPbISjECCOdC6l1HZZ1NR9EaNm6EJ5+EDz+EoUNh0SKYPt24HjMGWvmoF0IInyQjED5k69atjBgxotXgASAxMZEFCxYwZcoUpk2bxp///GcOHz7c4n0aTxnq3r07J0+edN2urKzEarV63K/IyEjX/ZxycnI4cOAAU6ZMcW0bMGAA27ZtY/369SxcuJD58+c3u8D5kUceISYmxnV58803m2z75ptvWjzO3/72t6xdu5Zly5a1OIJQn7fO5xVXXME111zD8OHDueSSS/jggw+w2+28+uqrrjZtOd9CtFdUeCi9kqLYesjIXfHeliMm9ygw1NbC9dfDxRfDu+9Cejp8/LFxvWyZsf366412QgjhbySA8CHbtm1j1KhRHrd/+eWX2bBhAxdddBHvv/8+/fv3b7IWoL6wsLAGt5VS2O121+3k5GSKi4s97pdzgXJKSopr2/Lly5k8eTLR0dGubeHh4fTt25fs7GweffRRRo4cyV/+8he3fbz99tvZtm2b6zJz5swm27Kzs5s9xrvuuou3336bL7/8kqysJgXNW+St81lfTEwMQ4YMYd++fa5tbTnfQnSE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\n",
"text/plain": [
"<Figure size 792x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"t = np.linspace(t_min, t_max, int((t_max - t_min) / resolution))\n",
"\n",
"n_steps = 20\n",
"t_instance = np.linspace(12.2, 12.2 + resolution * (n_steps + 1), n_steps + 1)\n",
"\n",
"plt.figure(figsize=(11,4))\n",
"plt.subplot(121)\n",
"plt.title(\"시계열 데이터 (인공 생성)\", fontsize=14)\n",
"plt.plot(t, time_series(t), label=r\"$t . \\sin(t) / 3 + 2 . \\sin(5t)$\")\n",
"plt.plot(t_instance[:-1], time_series(t_instance[:-1]), \"b-\", linewidth=3, label=\"훈련 샘플\")\n",
"plt.legend(loc=\"lower left\", fontsize=14)\n",
"plt.axis([0, 30, -17, 13])\n",
"plt.xlabel(\"시간\")\n",
"plt.ylabel(\"값\", rotation=0)\n",
"\n",
"plt.subplot(122)\n",
"plt.title(\"훈련 샘플\", fontsize=14)\n",
"plt.plot(t_instance[:-1], time_series(t_instance[:-1]), \"bo\", markersize=12, label=\"샘플\")\n",
"plt.plot(t_instance[1:], time_series(t_instance[1:]), \"w*\", markeredgewidth=0.5, markeredgecolor=\"b\", markersize=14, label=\"타깃\")\n",
"plt.legend(loc=\"upper left\")\n",
"plt.xlabel(\"시간\")\n",
"\n",
"\n",
"save_fig(\"time_series_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"X_batch, y_batch = next_batch(1, n_steps)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1.38452097, 2.05081182],\n",
" [ 2.05081182, 2.29742291],\n",
" [ 2.29742291, 2.0465599 ],\n",
" [ 2.0465599 , 1.34009916],\n",
" [ 1.34009916, 0.32948704],\n",
" [ 0.32948704, -0.76115235],\n",
" [-0.76115235, -1.68967022],\n",
" [-1.68967022, -2.25492776],\n",
" [-2.25492776, -2.34576159],\n",
" [-2.34576159, -1.96789418],\n",
" [-1.96789418, -1.24220428],\n",
" [-1.24220428, -0.37478448],\n",
" [-0.37478448, 0.39387907],\n",
" [ 0.39387907, 0.84815766],\n",
" [ 0.84815766, 0.85045064],\n",
" [ 0.85045064, 0.3752526 ],\n",
" [ 0.3752526 , -0.48422846],\n",
" [-0.48422846, -1.53852738],\n",
" [-1.53852738, -2.54795941],\n",
" [-2.54795941, -3.28097239]])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.c_[X_batch[0], y_batch[0]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## `OuputProjectionWrapper` 사용하기"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"RNN 하나를 만들어 보겠습니다. 이 신경망은 100개의 순환 뉴런을 가지고 있고 각 훈련 샘플은 20개의 입력 길이로 구성되므로 20개의 타임 스텝에 펼칠 것입니다. 각 입력은 하나의 특성을 가집니다(각 시간에서의 값 하나). 타깃도 20개의 입력 시퀀스이고 하나의 값을 가집니다:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_steps = 20\n",
"n_inputs = 1\n",
"n_neurons = 100\n",
"n_outputs = 1\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"y = tf.placeholder(tf.float32, [None, n_steps, n_outputs])\n",
"\n",
"cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons, activation=tf.nn.relu)\n",
"outputs, states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"각 타임 스텝에서 크기가 100인 출력 벡터가 만들어 집니다. 하지만 각 타임 스텝에서 하나의 출력 값을 원합니다. 간단한 방법은 `OutputProjectionWrapper`로 셀을 감싸는 것입니다."
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_steps = 20\n",
"n_inputs = 1\n",
"n_neurons = 100\n",
"n_outputs = 1\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"y = tf.placeholder(tf.float32, [None, n_steps, n_outputs])"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"cell = tf.contrib.rnn.OutputProjectionWrapper(\n",
" tf.contrib.rnn.BasicRNNCell(num_units=n_neurons, activation=tf.nn.relu),\n",
" output_size=n_outputs)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"outputs, states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [],
"source": [
"learning_rate = 0.001\n",
"\n",
"loss = tf.reduce_mean(tf.square(outputs - y)) # MSE\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"training_op = optimizer.minimize(loss)\n",
"\n",
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"saver = tf.train.Saver()"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 \tMSE: 11.967253\n",
"100 \tMSE: 0.5267912\n",
"200 \tMSE: 0.1495199\n",
"300 \tMSE: 0.07283236\n",
"400 \tMSE: 0.06168884\n",
"500 \tMSE: 0.05886846\n",
"600 \tMSE: 0.05303419\n",
"700 \tMSE: 0.048641633\n",
"800 \tMSE: 0.04998502\n",
"900 \tMSE: 0.047834214\n",
"1000 \tMSE: 0.04796028\n",
"1100 \tMSE: 0.04780812\n",
"1200 \tMSE: 0.0415957\n",
"1300 \tMSE: 0.047843512\n",
"1400 \tMSE: 0.04253944\n"
]
}
],
"source": [
"n_iterations = 1500\n",
"batch_size = 50\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" for iteration in range(n_iterations):\n",
" X_batch, y_batch = next_batch(batch_size, n_steps)\n",
" sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" if iteration % 100 == 0:\n",
" mse = loss.eval(feed_dict={X: X_batch, y: y_batch})\n",
" print(iteration, \"\\tMSE:\", mse)\n",
" \n",
" saver.save(sess, \"./my_time_series_model\") # not shown in the book"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restoring parameters from ./my_time_series_model\n"
]
}
],
"source": [
"with tf.Session() as sess: # 책에는 없음\n",
" saver.restore(sess, \"./my_time_series_model\") # 책에는 없음\n",
"\n",
" X_new = time_series(np.array(t_instance[:-1].reshape(-1, n_steps, n_inputs)))\n",
" y_pred = sess.run(outputs, feed_dict={X: X_new})"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[[-3.409996 ],\n",
" [-2.4543931],\n",
" [-1.1121919],\n",
" [ 0.7361519],\n",
" [ 2.16957 ],\n",
" [ 3.024978 ],\n",
" [ 3.4844422],\n",
" [ 3.366301 ],\n",
" [ 2.8970137],\n",
" [ 2.213668 ],\n",
" [ 1.6406606],\n",
" [ 1.5506338],\n",
" [ 1.9295691],\n",
" [ 2.7553375],\n",
" [ 3.8671415],\n",
" [ 5.0822144],\n",
" [ 6.0878325],\n",
" [ 6.6626954],\n",
" [ 6.645318 ],\n",
" [ 6.0674458]]], dtype=float32)"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.title(\"모델 테스트\", fontsize=14)\n",
"plt.plot(t_instance[:-1], time_series(t_instance[:-1]), \"bo\", markersize=12, label=\"샘플\")\n",
"plt.plot(t_instance[1:], time_series(t_instance[1:]), \"w*\", markeredgewidth=0.5, markeredgecolor=\"b\", markersize=14, label=\"타깃\")\n",
"plt.plot(t_instance[1:], y_pred[0,:,0], \"r.\", markersize=10, label=\"예측\")\n",
"plt.legend(loc=\"upper left\")\n",
"plt.xlabel(\"시간\")\n",
"\n",
"save_fig(\"time_series_pred_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## `OutputProjectionWrapper` 사용하지 않기"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_steps = 20\n",
"n_inputs = 1\n",
"n_neurons = 100\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"y = tf.placeholder(tf.float32, [None, n_steps, n_outputs])"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons, activation=tf.nn.relu)\n",
"rnn_outputs, states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"n_outputs = 1\n",
"learning_rate = 0.001"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"stacked_rnn_outputs = tf.reshape(rnn_outputs, [-1, n_neurons])\n",
"stacked_outputs = tf.layers.dense(stacked_rnn_outputs, n_outputs)\n",
"outputs = tf.reshape(stacked_outputs, [-1, n_steps, n_outputs])"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"loss = tf.reduce_mean(tf.square(outputs - y))\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"training_op = optimizer.minimize(loss)\n",
"\n",
"init = tf.global_variables_initializer()\n",
"saver = tf.train.Saver()"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 \tMSE: 13.907028\n",
"100 \tMSE: 0.5062197\n",
"200 \tMSE: 0.20180194\n",
"300 \tMSE: 0.101789564\n",
"400 \tMSE: 0.06869375\n",
"500 \tMSE: 0.0650903\n",
"600 \tMSE: 0.056519922\n",
"700 \tMSE: 0.048897255\n",
"800 \tMSE: 0.050609533\n",
"900 \tMSE: 0.04794232\n",
"1000 \tMSE: 0.047962066\n",
"1100 \tMSE: 0.04990514\n",
"1200 \tMSE: 0.041599542\n",
"1300 \tMSE: 0.048676066\n",
"1400 \tMSE: 0.043152742\n"
]
}
],
"source": [
"n_iterations = 1500\n",
"batch_size = 50\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" for iteration in range(n_iterations):\n",
" X_batch, y_batch = next_batch(batch_size, n_steps)\n",
" sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" if iteration % 100 == 0:\n",
" mse = loss.eval(feed_dict={X: X_batch, y: y_batch})\n",
" print(iteration, \"\\tMSE:\", mse)\n",
" \n",
" X_new = time_series(np.array(t_instance[:-1].reshape(-1, n_steps, n_inputs)))\n",
" y_pred = sess.run(outputs, feed_dict={X: X_new})\n",
" \n",
" saver.save(sess, \"./my_time_series_model\")"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[[-3.433237 ],\n",
" [-2.454809 ],\n",
" [-1.0924242 ],\n",
" [ 0.70101255],\n",
" [ 2.1101534 ],\n",
" [ 3.0261526 ],\n",
" [ 3.4682128 ],\n",
" [ 3.321571 ],\n",
" [ 2.8254244 ],\n",
" [ 2.2395434 ],\n",
" [ 1.7126881 ],\n",
" [ 1.5265634 ],\n",
" [ 1.9084352 ],\n",
" [ 2.750864 ],\n",
" [ 3.8967836 ],\n",
" [ 5.1164637 ],\n",
" [ 6.1152263 ],\n",
" [ 6.6678505 ],\n",
" [ 6.6391854 ],\n",
" [ 6.045873 ]]], dtype=float32)"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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RTBuHKxbF7wuWhSsl6GhoC4iCaF5RhNDOXURGXYZMc9omkjPmno0ChUVsGJF8BpNnUEh77//fr797W/T1NTEFVdcQbSHsnUcubGvfUXSXWye0eiTEc4IVzOiKZjarX2e0ScjNDRAS0uyS5r+0i+oxyZxvegiuPXW4HXWrJQK7AAHHHAAa9asIdTDEJsdg3pf+4qku7SfZzSNpF/6peMkrtB5Etfy8kGftqqqihUrVnDooYfyzjvvMHr0aM4888z2nqaf/vSnufXWW1m4cCG7du1iz549fPe732X69Oncd999PPDAA4wZM4b8/HxOOOEEAA499FDee+89duzYwTXXXMO7775LKBRixowZrF27ttNwvLF93333XRYvXsxf//pXotEoy5Yt49xzz+Xyyy8nHA7z5ptv8t5773HTTTdx8cUXx305RRIh9s8zsngSI/PzP/n3C53mGX3hheSVMVOkX1DvbRLXOII6wNtvv826desoKCjg+uuvp7m5mZ07d/Liiy+Sm5vL5ZdfzgUXXMC8efPYvn07Z555Jo888ghr1qzhpZdeYv/99+eyyy7b57zLly+ntLSUhQsXArBz506OOuootmzZwve+971O+y5dupQrr7ySc845h/r6ek455RSmTZvW9jUbePrpp9m2bRtnn322grqkjfZ5RvPKWFdcQqimOvh3m5/faZ7RHoZbkgFIv6Aem8S1y51+KCZxnTp1avsgXqeddhqXXHIJ11xzDbm5uUAwtO7bb7/N97//fQAaGxvZtGkTU6ZMYf/99wfg1FNP5f333+903pqaGlauXNn+fsyYMT2W4b//+7+ZOnUqAOFwmAkTJrSP8njeeedhZhxxxBHs2LEj7u8rkijz58Pq1W3zjP57JXkbI0T/q5bQF4ponF5GwTUpPs9oGkm/nPowTuK6ZcsWWltbAdiwYQMrV67sNOTuCSecwD/90z9RVVVFVVUVlZWVHHnkkbz88svtDzlf6Ob/H0888UR+8YtftL/fvn07ZtZtGU488cT23qr19fX8/ve/5zOf+QwAI0Z8cg8OxswXSQ9pP89oGkm/oD6Mk7i6O3PmzGHy5Mns2rVrn8C7atUq7rzzTmbMmMG0adN49NFHOe200/jiF7/IKaecwumnn87u3bv3Oe/KlSt5/PHHmTJlCqWlpdTU1PQ4HO+qVav40Y9+xMyZMykrK+OOO+7goIMOivu7iSRTRswzmiYs0TW+4uJir6mp6bTujTfeYOLEiQktR1dVVVXcf//9/Od//mdSyxGvVLiWIj2pq4O77oIHH/xkntFLLw1q6ArovTOzV9y9uK/90i+nLiJpa/x4uPfeYJHhkX7pFxER6ZFq6m1KS0vbJ4wWEUlXKVNTV2uO+OkaikhKBPWRI0eyc+dOBaU4uDs7d+5k5MiRyS6KiCRRSqRfxo0bx7Zt29i+fXuyi5LWRo4cybhx45JdDBFJopQI6rm5uRxzzDHJLoaISNpLifSLiIgMDQV1EZEMoqAuIpJBFNRFRDKIgrqISAYZsqBuZseb2Qdm9u2hOqeIiAzMkAR1MxsN3AesHYrziUjqqquDxQujXDamgtcvWsFlYypYvDBKXV2ySyYwBO3UzSwHeAD4JnBWD/tcDVwNcOSRR8b7kSKSJJEIXHBelCeaZ/HFUDUjH27g/lA+v/lhCUU/reSRn4WGYr4aicNQ1NRvB37l7r/uaQd3/6G7F7t78dixY4fgI0Uk0erqYO5cmN4U4WSvZmRrPbhzQGs9J3s105sizJ2LauxJFldQN7PzgCPdXaMji2S4vXuDGYoqbtvEKOs8+fsoa6BiRS0NDdDSkqQCChB/Tb0MmGhmvzWz3wJfBb5qZo/GXzQRSSXLlwdBvX3y947aJn9vaAjmI5XkiSun7u5f7fg+1vLF3b8dz3lFJPVEIlBeDhVPlJFfUgLV1UGUz8+HkhIappUxezZ0M/e6JFBKDOglIqkvHIaqKph3cYhHH6/kgKoI1NZCURFNpWXMuzDExo1QUJDskma3Ie185O7fVi09e9XVwaJFMG4crFsXvC5apAdnmWL+fMjNhdGjodVDtH6pnMalN9P6pXJaPcTo0cH2Sy9Ndkmzm3qUypCIRKCwEFavhhkzYM4cKC0N3hcWBtslvS1bFgTtK6+EvDzYvBm+/OXgNS8PFiwIti9ZkuySZjcFdYlbrKlbYyNEW6JcN7ECVqzguokVRFuiNDbSZ1M31fJT3/jx8NhjUF8PN9wAxcXwzDNw8slw441Bev2xx4L9JHmUU5e4xZq6EY3CrFn4d6uhsYHCvHyiM0ugshJCIbZs6f74SCQI+i0tMG9eUMv/2c+CWv4DDwSBQh1aUkNZWXCjrayEUaOCAB8OQ1MTHHecAnoqUE1d4tbe1C0SgepqrCHolGIN9UELiUikx6ZuHWv5LS3B/8JD8NrSQr9q+ZJY48fDvffC7t3BfXz37uC9AnpqUFCXuMWauu2t3tQW3TtoaGDvy7XMng3r1+97bKyW7w7eGmXKh0HqZuruCrw1ijvq0CIyAArqErdYU7c71k/C8zp3SvG8fO6IFLFxY7BfV+21/LbUTe7fXQS33hq8zpoF0ag6tIgMgIK6xC3W1G3rhDKixSV4fhg3w/PDRItL2DqhrMembrFafvO6IHVDfZC6oT5I3TSvi/RYyxeRfSmoSyeDaYUSa+q24KoQ9nQldbev5SfH3Ebd7Wuxpyu54quhHpu6xWr5j31rE94ldeMNDTz6rdoea/kisi8FdWk32LbmnZq6fTPEZ5eWs+Dtm/ncsnJu/Fao16ZusVr+e4dNgi6pG/Lyef+wInVoERkABXUB4m+FUlYWNGlrbg6auuXkdG7q1lOTxFgt/6Sby6CkhOgBYT7GiB4QhpISvvCtMnVoERkABXUBhqYVymCaurXX8ptCXP/5Sr7StJZ/5DbmNK/lhqJKGppD/erQos5LIm3cPaHLSSed5JJ6zj7bvb7e3Vtb3WfOdA+H3c2C15kz3Vtbvb4+2G84bN3qvnixe0GBe05O8Lp4cbC+L0895Z6X556b6z5/frDukkuC93l5wXaRdAfUeD9irAX7Jk5xcbHX1NQk9DOlbzk5MH06RBZXMPKKi4IEeUw4TPOatXzp3nJeeCGohaeKurog39/YGLzfsCF4HrBhA8ycGayLjVOizjGSzszsFXcv7ms/pV8ESN9WKOq8JNKZgroA6dsKRZ2XBkfPIDKXgroA6dsKRZ2XBi7WdPXH/xZlyYQK5ry2gms/U8GP/y2qYZIzgEZpFGDfVihbNkT4PLVsbi7i2KIypvazFUqitaeN/rSJSxoasA7b2tNGb5VrNp42saarzY1RKplFaXU1bGzg2pH5FLWWMKu1krlzQ3oGkcZUU5d2sbbmTXtDPF9Qzh05N7NxVDmNe0K9tjVPpnRNGyVL7BlE9MkIZ4SrGdEU/J/NiKZ6zghXE30yomcQaU5BXTpJt2FV0zVtlCztzyA2dT+iJrW1egaR5pR+kbSWrmmjZIk9g4gsnsTI/PzOTVfz82k+tojZs+GFF5JXRomPgrqkvU9m4wnSRk/VlxMOw5F7NBtPV7FnEBfklbGuuIRQTXVQQ8/PJ1pcwgVryti4ET2DSGMK6pIRYmmje+9NdklS2/z5wQBtBQeFaPz3SvI2Roj+Vy2hLxTROL2MgmtCegaR5pRTF8kisWcQV14JeaNCvHpEObN/fTOvHlFO3qgQCxagZxBpTkFdsl42dcTpNEzyDVBcDM88AyefDDfeSK/DJEt6UFCXrDbYMeTT2WCHSZb0oAG9JGt1HAwshyib/ilCYXQTr+ZM4gs3l/ExIQ0GJilDA3plsWxKJ8SjfTCw1ijRmbM48bvBuDGFd1xEdOYsvDWqjjiSdhTUM4zG9ei/9o44kWDcGGsIeldaQzBuDJGIOuJI2lGTxgyicT0GJtYRp3LKJvbrpnfl3pdrmX1nuTriSFpRTT2DaFyPgYl1xLlj/SS8y7gxnpfPHZGilBxDXqQ3cQd1M/uamb1qZjVmttnMFg1FwWTgNK7HwMQGA9s6oYxocQmeH8bN8Pww0eIStk4oS9mOOHpuIj2JK6ibWQiYAExueypbBqw0s08NReFkYNrHFp84CfK7jFjYYVwPjS0eiHXEWXBVCHu6krrb1/KTY26j7va12NOVXPHVUEp2xNFzE+nNkDZpNLORwPvAie7+Tnf7qEnj8CkogI8+gnPOjrKucdY+43rMyavkyadCFBQEoy9KEABbW2HjRli1KphfIycHli6FadNgxIjUarcda4bZ/tzkgGpGNDfQOjKfqqYSZlHJyDw9N8lEyWrSeDfwcNeAbmZXt6VnarZv3z7EHykxsXRCwUEhGtdVEn1oLXtvuY3oQ2tpXFdJwUEa16OreDviJDoNoucm0id3H5IFuB14Etivt/1OOukkl+Gxdat7Xp77hg3ura3ur7zifsYZwWtrq/uzzwbbt25Ndkkzw1NPBdczN9d9/vxg3SWXBO/z8oLtQ+3ss93r6939ttvczdzb5tx2CN6vWOH19cF+klmAGu9HLB6SmrqZ3QkcD5zn7nuH4pwycBrXI3FizUcbGyHaEuW6iRWwYgXXTawg2hKlsTHYPtQ1dj03kb7E+6A0x8zuB44AzldATz6N65EYQ9EbdTCpm/bx0NcELXYIh8EMwuFO46GrGWYW6091vqcFKAcc+B3w2w7LGT0do/SLZIL2NMiTT7qHw53TIOGw+5NP9poGGWzq5utfD/a55BL3v+5q9dbHn/Q9/7jCWx9/0v+6q7X9HIsXD8vXliSin+mXIcup93dRUJdMYOZeWuq+5+buc9t7blnh06e75+Tse2zs2Uds9w0bgvXPPvvJup6efei5Sfbqb1BXj1KRQYinN2p76saD9M2UD4N8/NTdFXhrFHd6TN3ouYn0RUFdZBDi6Y3a3vM3GoVZs8j9uyAfn/t3F8GsWRCN9trzV89NpDcaT11kEGKdgCoqYNrkKP/7rxFeuKeWqX9fxDGLytj4Yohzzul+LPacHJg+HSKLKxh5xUVBtTsmHKZ5zVq+dG8wkFg0mtjvJamrv52PNEqjyCB0SoN8M8SqVeW4l5OzDJa+G/RG7SkNEkvdPPanTVzS0IB12OYNDTz6rVo2vlVOQUGivo1kEqVfRAZpsGmQWOrmvcMmQZd8PHn5vH9YkXr+yqAp/SKSYO2pmyeilN4xi49/U401NeAH5JNzWgnP3VjJOV/R+C3SmdIvIimqPXXTFOL6z1eyZUOEz1PL5uYiji0qY2pzSC1YZNAU1EWSoKwsqLFXVoZ4vqCcp+rLCYfhyD1B6kYBXQZL6RcRkTSQrKF3RUQkiRTURUQyiIK6iEgGUVAXEckgCuopSDPFi8hgKainmNhM8atXw4wZMGcOlJYG7zVTvIj0RUE9hXScIq2lBRYsCNYvWBC8H64p0kQkcyiop5B4xtkWEQH1KE0py5fDI49A/si2cbarq6Ghgdz8fCgpgcpKGppDLFsGv/xlsksrIqlINfUU0j5T/LoIVFcH47q6B6/V1TSvi2imeBHplYJ6CmkfZ/tbm/CGhk7b2sfZ1kzxItILBfUUonG2RSReCuopZNmyIKifdHMZlJQQPSDMxxjRA8JQUsIXvhXMe7lkSbJLKiKpSg9KU4jG2RaReCmopxiNsy0i8dB46iIiaUDjqYuIZCEFdRGRDKKgLiKSQRTURUQyiIK6iEgGiTuom9l0M/svM9tsZjVmdupQFExERAYurnbqZjYa+DlQ7u6/MbNS4AkzO8bdG4eigCIi0n/x1tRnAW+6+28A3L0K+DMwM87ziojIIMQb1D8NdJ2Hp65tfTszu7otNVOzffv2OD9SRER6Em9QNyDaZV1r1/O6+w/dvdjdi8eOHRvnR4qISE/iDerbgCO7rDuybb2IiCRYvEH9CaDQzE4EMLNTgGOBX8VbMBERGbi4Wr+4+24zOx/4sZk5QerlbHf/cEhKJyIiAxL30Lvu/hxw8hCURURE4qQepSIiGURBXUQkgyioi4hkEAX1YVJXB4sWwbhxsG5d8LpoUbBeRGS4KKgPg0gECgth9WqYMQPmzIHS0uB9YWGwXURkOCioD7G6Opg7FxoboaUFFiwI1i9YELxvbAy2q8YuIsMh7iaN0tnevdDQ8Mn7PXuC18mToeMc31u2JLZcIpIdVFMfYsuXdw7q++/f+RWC7cuWJbZcIpIdFNSHWCQC5eWdA3tHDQ0wezasX5/YcolIdlBQH2LhMFRVwbx50NTUeVtTU7B+48ZgPxGRoaagPsTmz4fcXBg9Glpbg6Wx8ZO/R48Otl96abJLKiKZSEF9iC1bFgQm7A/HAAAK20lEQVTtK6+EvDzYvBm+/OXgNS8vaAWTmwtLliS7pCKSicw7NslIgOLiYq+pqUnoZyZaJBLUyp9/LsqWuyIUsYlXbRLHLiljammIESOgrCzZpRSRdGJmr7h7cV/7qUnjMCgrg7q3okz4+izGUc0BNNDk+Wx7uITcr1Uy/rOhZBdRRDKU0i/DZPxbEY7dXU2YekI4Yeo5dnc1499Sd1IRGT4K6sNl06Z92zU2NEBtbXLKIyJZQUF9uEyaBPn5ndfl50NRUXLKIyJZQUF9uJSVQUlJ0CDdLHgtKdETUhEZVnpQOlxCIaisDJrC1NYGNfSysmC9iMgwUVAfTqFQMGZAeXmySyIiWULpFxGRDKKgLiKSQRTURUQyiIK6iEgGUVAXEckgCuoiIhlEQV1EJIMoqIuIZBAFdRGRDKKg3ou6Oli0CMaNg3XrgtdFi4L1IiKpKK6gbmZfM7NXzazGzDab2aKhKliyRSJQWAirV8OMGTBnDpSWBu8LC4PtIiKpZtBB3cxCwARgctsUS2XASjP71FAVLlnq6mDu3GDC6JaWYF5RCF5bWoL1c+eqxi4iqWfQA3q5exRY3mHVTmAvkPbDEO7d23l+iz17gtfJk6HjlK5btiS2XCIifemzpm5m+5nZb7tZ9uuy693Aw+7+TjfnuLotRVOzffv2oSr7sFm+vHNQ33//zq8QbF+2LLHlEhHpi3nHqudgT2J2O/B54Dx339vbvsXFxV5TUxP3Zw6nnByYPh0qKvadvAiCgD57NrzwAkSjiS+fiGQfM3ulLdXdq7hbv5jZncDx9COgp4twGKqqYN48aGrqvK2pKVi/cWOwn4hIKonnQWmOmd0PHAGcnykBHWD+fMjNhdGjobU1WBobP/l79Ohg+6WXJrukIiKdxVNTPxv4GvBp4MUOufYzhqZoybNsWRC0r7wS8vJg82b48peD17y8oBVMbi4sWZLskoqIdDYkOfWBSIecOgTt0FtbgzTLqlVBq5ecHFi6FKZNgxEjNIe0iCROf3PqmqO0B2VlQTv0pyNR5o6McGzzJrbsP4nmhjKOOy7E+PHJLqGIyL4U1Hsx/ugo97w1C0LVQAOE8uGtEji6kgxoji8iGUhjv/QmEoHqaqivD/Iv9fXBe40RICIpSkG9N5s2de6FBMH72trklEdEpA8K6r2ZNGnf3kf5+VBUlJzyiIj0QUG9N2VlUFIS9DIyC15LStTsRURSlh6U9iYUgsrKIIdeWxvU0MvKgvUiIilIQb0voRCUlweLiEiKy/j0i2YvEpFsktFBXbMXiUi2ydigrtmLRCQbZWxOXbMXiUg2ytiaumYvEpFslLFBPRIJGqx07RAaE5u9aP36xJZLRGQ4ZWxQ1+xFIpKNMjaoa/YiEclGaRHUY23NCwqCiSoKCvpua67Zi0QkG6X8zEeRSND0sKUlWGJyc4Plscd6HopFsxeJSKbo78xHKV1T79rWvKP+tDUvK4PjjoPmZhg1Kgjo4XCQUz/uOAV0Eck8Kd1OfeXKfYN5Vy0tcNddcO+93W8fPx7u/Zco934pEoyPPmmSBuUSkYyV0umXggL46KP+7bd7dw8bo1GYNSuYsaihIRgPvaQkGH1RgV1E0kRGpF/q64dgP01JJyJZJKWDen/bkPe6n6akE5EsktJBPdbWvDd9tjXXlHQikkVSOqjH2pr3ps+25pqSTkSySEq3fhk/PmiH3lc79fHjezmJpqQTkSyS0q1fYurqgmaLDz4YPOcMh4OUy5IlfQR0EZEM0d/WL2kR1EVEsl1GNGkUEZGBUVAXEckgCuoiIhlEQV1EJIMk/EGpmW0H/i+hH5o8BwM7kl2IFKbr0zddo95l0/U5yt3H9rVTwoN6NjGzmv48rc5Wuj590zXqna7PvpR+ERHJIArqIiIZREF9eP0w2QVIcbo+fdM16p2uTxfKqYuIZBDV1EVEMoiCuohIBlFQFxHJIArqA2RmuWa23MxazOzCDuu/ZmavmlmNmW02s0U9HD/GzBrM7LcdljsT9w2GXy/XaEXbNXrZzP7LzL7eyzkWm9kWM3vNzCrM7JDElH74xXt9svk31GH78Wb2gZl9u4fjre16vmlmr5vZQ2aW392+mSalJ8lIUVcBDvw2tsLMQsAEYLK715vZp4CtZvaEu7/b5fiDgV+7+5kJK3Hi7XON2uwCit29xczGAv9rZuvd/X877mRmpcANwEnuvr3tH+6PgPJhL3lixHV9yO7fEGY2GrgPWNvL8ZcBZwNF7t5kZmuAfwauGYayphQF9QFy938FMLNzOqyLAss77LYT2At0N73SwUChmf2G4Pr/Frjd3d8ftkInWHfXqG39qg5vjwbqgQ+6OcU84CF33972/l+A7WZ2oLvvHvoSJ9YQXJ+s/Q2ZWQ7wAPBN4KxeTjEP+IG7N7W9/xfgWbIgqCv9MjzuBh5293e62VYDHO7upwGlBMH/KTOzBJYvacxsgpn9HqgE5vcQpD8N1MXeuPsuYDdBoMto/bw+2fwbuh34lbv/uo/9Ov2G2v7+GzM7cNhKliIU1IeYmd0OfIoeagTuvqetZo+7NwDXA8cCn0lYIZPI3X/v7hOAmcBPzez4bnYzINplXStZ8Hvtz/XJ1t+QmZ0HHOnu9/Zndzr/hlrbXjP+N6T0yxBqe1g1HjjP3ff29zCCH9pfh61gKcjdN7WlD2YA/9Nl8zbgyNgbM8sDxrStzwp9XJ+usuU3VAZMNLNYnn0cBA9N3f38Lvt2+g21/V0PfDjspUyyjL9rJYKZ5ZjZ/cARwPkdA7qZhczsWTOb2vb+XDM7rO1vA24DqjIpH9odMzvRzC6IpQjaHiaXADVdrxHwIHBJh/9VXgy81CHHnnEGcn2y9Tfk7l9195Pc/VR3PxVYDax29/PbWgS9ZGYT2nZ/EPiqme3X9v7vgZ97FnShV019aJwNfI0g1/lih9TmzcCLwDHA37Stc+DnZpYLfAxsBi5JaGmT4/+AhcANZtYC7Afc4u6/NbORdLhG7v6cmd0HbGzb90/APs3aMky/rw/Z+xvqTR5wFBCrCPyUIB31spm1Aq+TBQ9JQWO/iIhkFKVfREQyiIK6iEgGUVAXEckgCuoiIhlEQV1EJIMoqEtWM7NSM6vvY59Y2/HLzey1xJRMZHAU1CUrmNksM2vsY5+zzay1y/IxcH+CiikSN3U+kmzS1Mf2SmB0299OMFDW20DtcBZKZCgpqEu2OBzobtTMdm2DZLWnYszsZOAwoGJ4iyYydJR+kWwxHWjp785tE5/cCfyHu/+xw6bjzczNbMtQF1BkKKimLhnPzEYA5wIHmlmJu1f3sX8Y+DHBWCLnddn8BvBF9h0aWCQlqKYu2eByYA9wE/CvbUF+H22jbZYTDMz2eeAMd9/RZbeP3f1Dd/9oOAssMlgK6pLRzOxIYCVwC3BX2+rv97D7M8DPgPXAye6+dfhLKDK0lH6RjNUW0CuBiLuvblt3PsHwyA8CV3c55BvADnd/L7ElFRk6qqlLJrsXeA34u9gKd38bmAaEgZEdd3b319z9PTOrMrOvdHO+Z4BFw1hekbippi6ZbB7Q3HW2m7a0yhyAHuZqHkcQ9Dtx921k0ZR6kp4U1CVjuXtfnY16s39bK5juNGTDtGiSnpR+EeneauCjHpZPJbFcIr3SdHYiIhlENXURkQyioC4ikkEU1EVEMoiCuohIBlFQFxHJIArqIiIZREFdRCSD/H9/WXZo1R4dqAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.title(\"모델 테스트\", fontsize=14)\n",
"plt.plot(t_instance[:-1], time_series(t_instance[:-1]), \"bo\", markersize=10, label=\"instance\")\n",
"plt.plot(t_instance[1:], time_series(t_instance[1:]), \"w*\", markersize=10, label=\"target\")\n",
"plt.plot(t_instance[1:], y_pred[0,:,0], \"r.\", markersize=10, label=\"prediction\")\n",
"plt.legend(loc=\"upper left\")\n",
"plt.xlabel(\"시간\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 새로운 시퀀스 생성하기"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restoring parameters from ./my_time_series_model\n"
]
}
],
"source": [
"with tf.Session() as sess: # 책에는 없음\n",
" saver.restore(sess, \"./my_time_series_model\") # 책에는 없음\n",
"\n",
" sequence = [0.] * n_steps\n",
" for iteration in range(300):\n",
" X_batch = np.array(sequence[-n_steps:]).reshape(1, n_steps, 1)\n",
" y_pred = sess.run(outputs, feed_dict={X: X_batch})\n",
" sequence.append(y_pred[0, -1, 0])"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8,4))\n",
"plt.plot(np.arange(len(sequence)), sequence, \"b-\")\n",
"plt.plot(t[:n_steps], sequence[:n_steps], \"b-\", linewidth=3)\n",
"plt.xlabel(\"시간\")\n",
"plt.ylabel(\"값\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restoring parameters from ./my_time_series_model\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 792x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with tf.Session() as sess:\n",
" saver.restore(sess, \"./my_time_series_model\")\n",
"\n",
" sequence1 = [0. for i in range(n_steps)]\n",
" for iteration in range(len(t) - n_steps):\n",
" X_batch = np.array(sequence1[-n_steps:]).reshape(1, n_steps, 1)\n",
" y_pred = sess.run(outputs, feed_dict={X: X_batch})\n",
" sequence1.append(y_pred[0, -1, 0])\n",
"\n",
" sequence2 = [time_series(i * resolution + t_min + (t_max-t_min/3)) for i in range(n_steps)]\n",
" for iteration in range(len(t) - n_steps):\n",
" X_batch = np.array(sequence2[-n_steps:]).reshape(1, n_steps, 1)\n",
" y_pred = sess.run(outputs, feed_dict={X: X_batch})\n",
" sequence2.append(y_pred[0, -1, 0])\n",
"\n",
"plt.figure(figsize=(11,4))\n",
"plt.subplot(121)\n",
"plt.plot(t, sequence1, \"b-\")\n",
"plt.plot(t[:n_steps], sequence1[:n_steps], \"b-\", linewidth=3)\n",
"plt.xlabel(\"시간\")\n",
"plt.ylabel(\"값\", rotation=0)\n",
"\n",
"plt.subplot(122)\n",
"plt.plot(t, sequence2, \"b-\")\n",
"plt.plot(t[:n_steps], sequence2[:n_steps], \"b-\", linewidth=3)\n",
"plt.xlabel(\"시간\")\n",
"save_fig(\"creative_sequence_plot\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 심층 RNN"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## MultiRNNCell"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_inputs = 2\n",
"n_steps = 5\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"n_neurons = 100\n",
"n_layers = 3\n",
"\n",
"layers = [tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)\n",
" for layer in range(n_layers)]\n",
"multi_layer_cell = tf.contrib.rnn.MultiRNNCell(layers)\n",
"outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [],
"source": [
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [],
"source": [
"X_batch = np.random.rand(2, n_steps, n_inputs)"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [],
"source": [
"with tf.Session() as sess:\n",
" init.run()\n",
" outputs_val, states_val = sess.run([outputs, states], feed_dict={X: X_batch})"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2, 5, 100)"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outputs_val.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 여러 GPU에 심층 RNN 분산하기"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"이렇게 사용해서는 **안됩니다**:"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [],
"source": [
"with tf.device(\"/gpu:0\"): # 이 할당은 무시됩니다\n",
" layer1 = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)\n",
"\n",
"with tf.device(\"/gpu:1\"): # 이 할당은 무시됩니다\n",
" layer2 = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"대신 `DeviceCellWrapper`를 사용합니다:"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"\n",
"class DeviceCellWrapper(tf.contrib.rnn.RNNCell):\n",
" def __init__(self, device, cell):\n",
" self._cell = cell\n",
" self._device = device\n",
"\n",
" @property\n",
" def state_size(self):\n",
" return self._cell.state_size\n",
"\n",
" @property\n",
" def output_size(self):\n",
" return self._cell.output_size\n",
"\n",
" def __call__(self, inputs, state, scope=None):\n",
" with tf.device(self._device):\n",
" return self._cell(inputs, state, scope)"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_inputs = 5\n",
"n_steps = 20\n",
"n_neurons = 100\n",
"\n",
"X = tf.placeholder(tf.float32, shape=[None, n_steps, n_inputs])"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [],
"source": [
"devices = [\"/cpu:0\", \"/cpu:0\", \"/cpu:0\"] # 만약 GPU가 세 개 있다면 [\"/gpu:0\", \"/gpu:1\", \"/gpu:2\"]로 바꿉니다\n",
"cells = [DeviceCellWrapper(dev,tf.contrib.rnn.BasicRNNCell(num_units=n_neurons))\n",
" for dev in devices]\n",
"multi_layer_cell = tf.contrib.rnn.MultiRNNCell(cells)\n",
"outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"또 다른 방법으로 텐서플로 1.1부터 `tf.contrib.rnn.DeviceWrapper` 클래스를 사용할 수 있습니다(텐서플로 1.2부터는 `tf.nn.rnn_cell.DeviceWrapper`가 되었습니다)."
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[[-3.29020061e-02 1.17019236e-01 -4.58992608e-02 ... 3.84477153e-02\n",
" -5.24900258e-02 5.80436960e-02]\n",
" [ 3.54288332e-02 -7.42610693e-02 -6.42375052e-02 ... -2.45757148e-01\n",
" -1.77626804e-01 -3.26535292e-03]\n",
" [ 2.59726584e-01 1.44605249e-01 3.29312116e-01 ... 3.38821977e-01\n",
" 5.98853417e-02 -8.31450596e-02]\n",
" ...\n",
" [ 1.18043743e-01 -2.41663873e-01 -8.27798247e-01 ... -1.85782462e-01\n",
" 1.89682379e-01 -1.35261893e-01]\n",
" [ 2.87830859e-01 3.92953992e-01 -3.15236300e-01 ... -7.85605535e-02\n",
" 4.32724983e-01 -6.61824420e-02]\n",
" [ 7.49779761e-01 6.11052871e-01 -3.01685542e-01 ... 1.95649698e-01\n",
" -1.62457466e-01 -5.23968339e-02]]\n",
"\n",
" [[-6.68027624e-02 7.35576972e-02 -2.90275402e-02 ... -7.79968277e-02\n",
" -3.65773253e-02 -4.66752201e-02]\n",
" [ 1.71546549e-01 4.28418722e-03 2.18812120e-03 ... 3.68538052e-02\n",
" -8.13241452e-02 9.01001915e-02]\n",
" [ 3.45635489e-02 -9.57525298e-02 1.59450233e-01 ... 1.63022086e-01\n",
" -6.83046281e-02 1.07990295e-01]\n",
" ...\n",
" [ 1.96414590e-01 -2.15230390e-01 -5.82537949e-01 ... 3.02532643e-01\n",
" 5.47862291e-01 -1.06282756e-02]\n",
" [ 2.01206997e-01 2.52655987e-02 -5.02945222e-02 ... 9.56110135e-02\n",
" -2.03766495e-01 -1.52696133e-01]\n",
" [ 4.77758050e-01 1.66605622e-01 -1.56402126e-01 ... 1.67080894e-01\n",
" -2.03233853e-01 7.59940522e-05]]]\n"
]
}
],
"source": [
"with tf.Session() as sess:\n",
" init.run()\n",
" print(sess.run(outputs, feed_dict={X: np.random.rand(2, n_steps, n_inputs)}))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 드롭아웃"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"n_inputs = 1\n",
"n_neurons = 100\n",
"n_layers = 3\n",
"n_steps = 20\n",
"n_outputs = 1"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [],
"source": [
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"y = tf.placeholder(tf.float32, [None, n_steps, n_outputs])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"노트: `input_keep_prob` 매개변수는 플레이스홀더로 훈련하는 동안에는 어느 값이나 가능하고 테스트할 때는 1.0으로 지정합니다(드롭아웃을 끕니다)."
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"keep_prob = tf.placeholder_with_default(1.0, shape=())\n",
"cells = [tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)\n",
" for layer in range(n_layers)]\n",
"cells_drop = [tf.contrib.rnn.DropoutWrapper(cell, input_keep_prob=keep_prob)\n",
" for cell in cells]\n",
"multi_layer_cell = tf.contrib.rnn.MultiRNNCell(cells_drop)\n",
"rnn_outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [],
"source": [
"learning_rate = 0.01\n",
"\n",
"stacked_rnn_outputs = tf.reshape(rnn_outputs, [-1, n_neurons])\n",
"stacked_outputs = tf.layers.dense(stacked_rnn_outputs, n_outputs)\n",
"outputs = tf.reshape(stacked_outputs, [-1, n_steps, n_outputs])\n",
"\n",
"loss = tf.reduce_mean(tf.square(outputs - y))\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"training_op = optimizer.minimize(loss)\n",
"\n",
"init = tf.global_variables_initializer()\n",
"saver = tf.train.Saver()"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 훈련 MSE: 16.386942\n",
"100 훈련 MSE: 4.25324\n",
"200 훈련 MSE: 3.2349327\n",
"300 훈련 MSE: 3.5502756\n",
"400 훈련 MSE: 2.6301303\n",
"500 훈련 MSE: 4.105153\n",
"600 훈련 MSE: 3.5806417\n",
"700 훈련 MSE: 3.3154318\n",
"800 훈련 MSE: 3.5841472\n",
"900 훈련 MSE: 3.4554102\n",
"1000 훈련 MSE: 3.165893\n",
"1100 훈련 MSE: 3.691963\n",
"1200 훈련 MSE: 3.7539616\n",
"1300 훈련 MSE: 2.4574566\n",
"1400 훈련 MSE: 3.9499161\n"
]
}
],
"source": [
"n_iterations = 1500\n",
"batch_size = 50\n",
"train_keep_prob = 0.5\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" for iteration in range(n_iterations):\n",
" X_batch, y_batch = next_batch(batch_size, n_steps)\n",
" _, mse = sess.run([training_op, loss],\n",
" feed_dict={X: X_batch, y: y_batch,\n",
" keep_prob: train_keep_prob})\n",
" if iteration % 100 == 0: # not shown in the book\n",
" print(iteration, \"훈련 MSE:\", mse) # not shown\n",
" \n",
" saver.save(sess, \"./my_dropout_time_series_model\")"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restoring parameters from ./my_dropout_time_series_model\n"
]
}
],
"source": [
"with tf.Session() as sess:\n",
" saver.restore(sess, \"./my_dropout_time_series_model\")\n",
"\n",
" X_new = time_series(np.array(t_instance[:-1].reshape(-1, n_steps, n_inputs)))\n",
" y_pred = sess.run(outputs, feed_dict={X: X_new})"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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CLX0y9x9U1JKlyZlZWV88sknlJaWMmXKFF566SUAmpubef755znooIMYMGAAl112GVVVVTz77LNce+21/PnPf+aQQw5h+/btfP/73+ess87ihhtuYM2aNTQ1NXHxxRczevRo7r77burr63njjTeoUC8JkV4rKwt56CtWhPFXamvbjr+igN5KPEM5JnPp69C7qXbIIYe4u/vGjRu9qanJt23b5rNmzfInn3zS3d0Bf+ONN9zd/YEHHvDrrrvO3d1ra2v9S1/6kldUVPiSJUt83rx57u7e3Nzsp5xyin/44Ye+ZMkSv/HGG9PyPrLhWopI8hG1oXfT5ZlnnqG6upovf/nL7Nq1i/r60Idq6NChjB49GoC33nqLs846C4D+/fszbtw4AKqqqnj11VcpLS0F4PPPP+eDDz5I/5sQkbyloN7K9u3b+dnPfsY777xDU1MTL7RKfC0o2Hf74eijj2bNmjV8/etfZ9euXaxdu5aLL76YUaNGccghh+wdxfH999/nyCOP5N133037exGR/JRzY7+kypgxY7j44ov54x//yJgxYzj33HPbTHTR2rx583j77beZOHEi3/jGNzj44IMxM7797W/z8ccfM3HiREpLS7n55psB+NrXvsby5cs577zz+Mtf/pLOtyUieUY19RYv9NAdbcuWLXv/HjBgAM8999zex+eeey6DBg2isLCQBx54oMO5xx9/PBs2bEheYUVEuqCaeh/s3Llzb1v7X/7yF6qqqvjKV76S4VKJiKim3ieffPIJF110EWZGbW0t999/P4MHD850sUREFNT74rDDDuPll1/OdDFERDpQ84uISIQoqItI2lRXw/z5MGwYPPtsWM+fr1mLkklBXUTSQvOMpoeCuoiknOYZTZ/cDOrNzbBsGdx5Z1g3Z89Ivw899BC33347DQ0NXHHFFTR3UbbWIzf2dKxIrovNM+oelvHjw/bYPKPuYX9jY2bLGQW5F9Sbm+Hss+Gb34Tbbgvrs8/OqsAOcOCBB7JkyRIKCws73d86qPd0rEiu0zyj6ZN7KY0VFbBmTRh7E8J6zZp9Exn2UWVlJXfeeSeHHnooH3zwAYMHD+bMM8/c29P0mGOO4bbbbmPevHls376dXbt28eMf/5jJkyfz4IMP8sgjjzBkyBD69+/PqFGjADj00EPZsmULW7du5ZprruGjjz6isLCQKVOm8MQT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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.title(\"모델 테스트\", fontsize=14)\n",
"plt.plot(t_instance[:-1], time_series(t_instance[:-1]), \"bo\", markersize=10, label=\"instance\")\n",
"plt.plot(t_instance[1:], time_series(t_instance[1:]), \"w*\", markersize=10, label=\"target\")\n",
"plt.plot(t_instance[1:], y_pred[0,:,0], \"r.\", markersize=10, label=\"prediction\")\n",
"plt.legend(loc=\"upper left\")\n",
"plt.xlabel(\"시간\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"이런 드롭아웃이 이 경우엔 크게 도움이 안되네요. :/"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# LSTM"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"lstm_cell = tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons)"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [],
"source": [
"n_steps = 28\n",
"n_inputs = 28\n",
"n_neurons = 150\n",
"n_outputs = 10\n",
"n_layers = 3\n",
"\n",
"learning_rate = 0.001\n",
"\n",
"X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
"y = tf.placeholder(tf.int32, [None])\n",
"\n",
"lstm_cells = [tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons)\n",
" for layer in range(n_layers)]\n",
"multi_cell = tf.contrib.rnn.MultiRNNCell(lstm_cells)\n",
"outputs, states = tf.nn.dynamic_rnn(multi_cell, X, dtype=tf.float32)\n",
"top_layer_h_state = states[-1][1]\n",
"logits = tf.layers.dense(top_layer_h_state, n_outputs, name=\"softmax\")\n",
"xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)\n",
"loss = tf.reduce_mean(xentropy, name=\"loss\")\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"training_op = optimizer.minimize(loss)\n",
"correct = tf.nn.in_top_k(logits, y, 1)\n",
"accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))\n",
" \n",
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(LSTMStateTuple(c=<tf.Tensor 'rnn/while/Exit_3:0' shape=(?, 150) dtype=float32>, h=<tf.Tensor 'rnn/while/Exit_4:0' shape=(?, 150) dtype=float32>),\n",
" LSTMStateTuple(c=<tf.Tensor 'rnn/while/Exit_5:0' shape=(?, 150) dtype=float32>, h=<tf.Tensor 'rnn/while/Exit_6:0' shape=(?, 150) dtype=float32>),\n",
" LSTMStateTuple(c=<tf.Tensor 'rnn/while/Exit_7:0' shape=(?, 150) dtype=float32>, h=<tf.Tensor 'rnn/while/Exit_8:0' shape=(?, 150) dtype=float32>))"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"states"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<tf.Tensor 'rnn/while/Exit_8:0' shape=(?, 150) dtype=float32>"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"top_layer_h_state"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"에포크 0 훈련 정확도 = 0.9533333 테스트 정확도 = 0.9549\n",
"에포크 1 훈련 정확도 = 0.9866667 테스트 정확도 = 0.9733\n",
"에포크 2 훈련 정확도 = 0.99333334 테스트 정확도 = 0.9769\n",
"에포크 3 훈련 정확도 = 0.99333334 테스트 정확도 = 0.9807\n",
"에포크 4 훈련 정확도 = 0.98 테스트 정확도 = 0.9845\n",
"에포크 5 훈련 정확도 = 0.9866667 테스트 정확도 = 0.9815\n",
"에포크 6 훈련 정확도 = 0.99333334 테스트 정확도 = 0.9845\n",
"에포크 7 훈련 정확도 = 1.0 테스트 정확도 = 0.9876\n",
"에포크 8 훈련 정확도 = 1.0 테스트 정확도 = 0.9877\n",
"에포크 9 훈련 정확도 = 0.99333334 테스트 정확도 = 0.9881\n"
]
}
],
"source": [
"n_epochs = 10\n",
"batch_size = 150\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" for iteration in range(mnist.train.num_examples // batch_size):\n",
" X_batch, y_batch = mnist.train.next_batch(batch_size)\n",
" X_batch = X_batch.reshape((batch_size, n_steps, n_inputs))\n",
" sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
" acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})\n",
" acc_test = accuracy.eval(feed_dict={X: X_test, y: y_test})\n",
" print(\"에포크\", epoch, \"훈련 정확도 =\", acc_train, \"테스트 정확도 =\", acc_test)"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"lstm_cell = tf.contrib.rnn.LSTMCell(num_units=n_neurons, use_peepholes=True)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [],
"source": [
"gru_cell = tf.contrib.rnn.GRUCell(num_units=n_neurons)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 임베딩"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"이 섹션은 텐서플로의 [Word2Vec 튜토리얼](https://www.tensorflow.org/versions/r0.11/tutorials/word2vec/index.html)을 기반으로 합니다."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 데이터 추출"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [],
"source": [
"from six.moves import urllib\n",
"\n",
"import errno\n",
"import os\n",
"import zipfile\n",
"\n",
"WORDS_PATH = \"datasets/words\"\n",
"WORDS_URL = 'http://mattmahoney.net/dc/text8.zip'\n",
"\n",
"def mkdir_p(path):\n",
" \"\"\"디렉토리 생성, 이미 있다면 그냥 통과\n",
" \n",
" 이 함수는 파이썬 2 버전을 지원하기 위해서입니다.\n",
" 파이썬 3.2 이상이면 다음과 같이 쓸 수 있습니다:\n",
" >>> os.makedirs(path, exist_ok=True)\n",
" \"\"\"\n",
" try:\n",
" os.makedirs(path)\n",
" except OSError as exc:\n",
" if exc.errno == errno.EEXIST and os.path.isdir(path):\n",
" pass\n",
" else:\n",
" raise\n",
"\n",
"def fetch_words_data(words_url=WORDS_URL, words_path=WORDS_PATH):\n",
" os.makedirs(words_path, exist_ok=True)\n",
" zip_path = os.path.join(words_path, \"words.zip\")\n",
" if not os.path.exists(zip_path):\n",
" urllib.request.urlretrieve(words_url, zip_path)\n",
" with zipfile.ZipFile(zip_path) as f:\n",
" data = f.read(f.namelist()[0])\n",
" return data.decode(\"ascii\").split()"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [],
"source": [
"words = fetch_words_data()"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['anarchism', 'originated', 'as', 'a', 'term']"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"words[:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 사전 구축"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [],
"source": [
"from collections import Counter\n",
"\n",
"vocabulary_size = 50000\n",
"\n",
"vocabulary = [(\"UNK\", None)] + Counter(words).most_common(vocabulary_size - 1)\n",
"vocabulary = np.array([word for word, _ in vocabulary])\n",
"dictionary = {word: code for code, word in enumerate(vocabulary)}\n",
"data = np.array([dictionary.get(word, 0) for word in words])"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('anarchism originated as a term of abuse first used',\n",
" array([5244, 3083, 12, 6, 195, 2, 3135, 46, 59]))"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\" \".join(words[:9]), data[:9]"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'belonging didn as a term of extinct first used'"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\" \".join([vocabulary[word_index] for word_index in [5241, 3081, 12, 6, 195, 2, 3134, 46, 59]])"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('culottes', 0)"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"words[24], data[24]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 배치 생성"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"from collections import deque\n",
"\n",
"def generate_batch(batch_size, num_skips, skip_window):\n",
" global data_index\n",
" assert batch_size % num_skips == 0\n",
" assert num_skips <= 2 * skip_window\n",
" batch = np.ndarray(shape=(batch_size), dtype=np.int32)\n",
" labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)\n",
" span = 2 * skip_window + 1 # [ skip_window target skip_window ]\n",
" buffer = deque(maxlen=span)\n",
" for _ in range(span):\n",
" buffer.append(data[data_index])\n",
" data_index = (data_index + 1) % len(data)\n",
" for i in range(batch_size // num_skips):\n",
" target = skip_window # buffer 중간에 타깃 레이블을 둡니다\n",
" targets_to_avoid = [ skip_window ]\n",
" for j in range(num_skips):\n",
" while target in targets_to_avoid:\n",
" target = random.randint(0, span - 1)\n",
" targets_to_avoid.append(target)\n",
" batch[i * num_skips + j] = buffer[skip_window]\n",
" labels[i * num_skips + j, 0] = buffer[target]\n",
" buffer.append(data[data_index])\n",
" data_index = (data_index + 1) % len(data)\n",
" return batch, labels"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [],
"source": [
"data_index=0\n",
"batch, labels = generate_batch(8, 2, 1)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([3083, 3083, 12, 12, 6, 6, 195, 195], dtype=int32),\n",
" ['originated', 'originated', 'as', 'as', 'a', 'a', 'term', 'term'])"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"batch, [vocabulary[word] for word in batch]"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([[ 12],\n",
" [5244],\n",
" [ 6],\n",
" [3083],\n",
" [ 195],\n",
" [ 12],\n",
" [ 2],\n",
" [ 6]], dtype=int32),\n",
" ['as', 'anarchism', 'a', 'originated', 'term', 'as', 'of', 'a'])"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"labels, [vocabulary[word] for word in labels[:, 0]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 모델 구성"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [],
"source": [
"batch_size = 128\n",
"embedding_size = 128 # 임베딩 벡터 차원\n",
"skip_window = 1 # 고려할 왼쪽과 오른쪽 단어의 개수\n",
"num_skips = 2 # 레이블을 생성하기 위한 입력의 재사용 횟수\n",
"\n",
"# 가까운 이웃을 샘플링하기 위해 랜덤한 검증 세트를 만듭니다.\n",
"# 검증 샘플은 가장 흔한 단어인 낮은 ID 번호를 가진 것으로 제한합니다.\n",
"valid_size = 16 # 유사도를 평가하기 위해 랜덤하게 구성할 단어 세트 크기\n",
"valid_window = 100 # 검증 샘플을 전체 샘플의 앞 부분에서만 선택합니다\n",
"valid_examples = np.random.choice(valid_window, valid_size, replace=False)\n",
"num_sampled = 64 # 부정 샘플링(negative sampling)의 수\n",
"\n",
"learning_rate = 0.01"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"# 입력 데이터\n",
"train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])\n",
"valid_dataset = tf.constant(valid_examples, dtype=tf.int32)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [],
"source": [
"vocabulary_size = 50000\n",
"embedding_size = 150\n",
"\n",
"# 입력을 위해 임베딩을 조회합니다\n",
"init_embeds = tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0)\n",
"embeddings = tf.Variable(init_embeds)"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [],
"source": [
"train_inputs = tf.placeholder(tf.int32, shape=[None])\n",
"embed = tf.nn.embedding_lookup(embeddings, train_inputs)"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From <ipython-input-108-1dfd74cb904f>:18: calling reduce_sum (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"keep_dims is deprecated, use keepdims instead\n"
]
}
],
"source": [
"# NCE 손실을 위한 변수를 만듭니다\n",
"nce_weights = tf.Variable(\n",
" tf.truncated_normal([vocabulary_size, embedding_size],\n",
" stddev=1.0 / np.sqrt(embedding_size)))\n",
"nce_biases = tf.Variable(tf.zeros([vocabulary_size]))\n",
"\n",
"# 배치에서 NCE 손실의 평균을 계산합니다.Compute the average NCE loss for the batch.\n",
"# tf.nce_loss는 자동으로 손실을 평가할 때마다 음성 레이블에서 새로운 샘플을 뽑습니다.\n",
"loss = tf.reduce_mean(\n",
" tf.nn.nce_loss(nce_weights, nce_biases, train_labels, embed,\n",
" num_sampled, vocabulary_size))\n",
"\n",
"# Adam 옵티마이저\n",
"optimizer = tf.train.AdamOptimizer(learning_rate)\n",
"training_op = optimizer.minimize(loss)\n",
"\n",
"# 미니배치 샘플과 모든 임베딩 사이의 코사인 유사도를 계산합니다\n",
"norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), axis=1, keep_dims=True))\n",
"normalized_embeddings = embeddings / norm\n",
"valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings, valid_dataset)\n",
"similarity = tf.matmul(valid_embeddings, normalized_embeddings, transpose_b=True)\n",
"\n",
"# 초기화를 위한 연산\n",
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 모델 훈련"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"반복: 0\t스텝 0 에서의 평균 손실: 294.72406005859375\n",
"would에 가장 가까운 단어: lindy, humorously, engagements, bek, phoenicia, showcase, losing, nf,\n",
"on에 가장 가까운 단어: imprints, arbitrarily, cis, prefect, saccharomyces, jj, classmate, ave,\n",
"four에 가장 가까운 단어: citations, insist, tank, macarthur, uneducated, plissken, riordan, vasili,\n",
"his에 가장 가까운 단어: generous, archie, themes, achieved, somehow, bartle, value, lexis,\n",
"often에 가장 가까운 단어: deception, sticks, hitomaro, subtract, calculates, darrow, lavender, anthony,\n",
"in에 가장 가까운 단어: termini, bubonic, elaborating, commence, tobacco, subdivided, competing, puppets,\n",
"an에 가장 가까운 단어: queene, lavon, chestnuts, solomon, clayton, voce, abolishes, patched,\n",
"eight에 가장 가까운 단어: rig, retaliated, spr, bump, poinsot, wild, sportspeople, bison,\n",
"these에 가장 가까운 단어: conferences, ypres, neck, refrain, bessarabia, cord, gravely, reconciling,\n",
"nine에 가장 가까운 단어: pittsburg, trivia, carol, menorah, overwriting, audition, develop, ranks,\n",
"called에 가장 가까운 단어: bon, dealing, stallion, hata, ise, vadim, sizeable, forgetfulness,\n",
"about에 가장 가까운 단어: euphoria, hinayana, vikernes, centralization, lt, washing, promontory, mop,\n",
"up에 가장 가까운 단어: abet, drives, addictions, piercing, constants, quipped, misr, rainy,\n",
"one에 가장 가까운 단어: syntactically, broughton, kuru, radiodiffusion, chute, alan, announcing, pashtuns,\n",
"and에 가장 가까운 단어: soft, visas, fasts, lillard, drowsiness, coffin, komondor, vulnerability,\n",
"been에 가장 가까운 단어: sang, expositor, reloading, otis, linear, widen, ephraem, astros,\n",
"반복: 2000\t스텝 2000 에서의 평균 손실: 131.0253740901947\n",
"반복: 4000\t스텝 4000 에서의 평균 손실: 62.29951333236694\n",
"반복: 6000\t스텝 6000 에서의 평균 손실: 41.85774783444405\n",
"반복: 8000\t스텝 8000 에서의 평균 손실: 30.861831660270692\n",
"반복: 10000\t스텝 10000 에서의 평균 손실: 26.37321024131775\n",
"would에 가장 가까운 단어: can, mk, to, mari, may, should, doubleday, outdoors,\n",
"on에 가장 가까운 단어: cin, bambaataa, and, of, in, halfback, cca, dh,\n",
"four에 가장 가까운 단어: three, five, one, six, seven, two, nine, zero,\n",
"his에 가장 가까운 단어: the, propositional, achill, livelihood, merchandising, intercollegiate, bukhara, bicycle,\n",
"often에 가장 가까운 단어: dubbing, commonly, utf, altaic, also, signed, and, which,\n",
"in에 가장 가까운 단어: and, of, from, trench, for, the, altaic, coulomb,\n",
"an에 가장 가까운 단어: nen, anointed, rat, chi, antigua, abandonment, abscess, barbara,\n",
"eight에 가장 가까운 단어: one, six, nine, seven, five, three, zero, four,\n",
"these에 가장 가까운 단어: bremer, notice, bambaataa, nage, automorphism, olympias, psalms, mannerisms,\n",
"nine에 가장 가까운 단어: one, six, eight, zero, seven, five, four, two,\n",
"called에 가장 가까운 단어: also, is, loser, cma, amalgamated, hat, difficulty, viva,\n",
"about에 가장 가까운 단어: altaic, donation, selenium, numidia, preston, paramount, seven, bragg,\n",
"up에 가장 가까운 단어: whittier, maguey, windmill, bartholomew, dry, qualities, aardwolf, coffee,\n",
"one에 가장 가까운 단어: nine, eight, six, seven, four, two, three, zero,\n",
"and에 가장 가까운 단어: in, the, UNK, of, altaic, one, for, a,\n",
"been에 가장 가까운 단어: have, cma, enver, was, had, diodorus, pseudonym, argued,\n"
]
}
],
"source": [
"num_steps = 10001\n",
"\n",
"with tf.Session() as session:\n",
" init.run()\n",
"\n",
" average_loss = 0\n",
" for step in range(num_steps):\n",
" print(\"\\r반복: {}\".format(step), end=\"\\t\")\n",
" batch_inputs, batch_labels = generate_batch(batch_size, num_skips, skip_window)\n",
" feed_dict = {train_inputs : batch_inputs, train_labels : batch_labels}\n",
"\n",
" # 훈련 연산을 평가하여 스텝을 한 단계를 업데이트합니다(session.run()에서 반환된 값을 사용합니다)\n",
" _, loss_val = session.run([training_op, loss], feed_dict=feed_dict)\n",
" average_loss += loss_val\n",
"\n",
" if step % 2000 == 0:\n",
" if step > 0:\n",
" average_loss /= 2000\n",
" # 평균 손실은 2000개 배치에 대한 손실의 추정입니다.\n",
" print(\"스텝 \", step, \"에서의 평균 손실: \", average_loss)\n",
" average_loss = 0\n",
"\n",
" # 이 코드는 비용이 많이 듭니다 (500 스텝마다 ~20%씩 느려집니다)\n",
" if step % 10000 == 0:\n",
" sim = similarity.eval()\n",
" for i in range(valid_size):\n",
" valid_word = vocabulary[valid_examples[i]]\n",
" top_k = 8 # 가장 가까운 단어의 개수\n",
" nearest = (-sim[i, :]).argsort()[1:top_k+1]\n",
" log_str = \"%s에 가장 가까운 단어:\" % valid_word\n",
" for k in range(top_k):\n",
" close_word = vocabulary[nearest[k]]\n",
" log_str = \"%s %s,\" % (log_str, close_word)\n",
" print(log_str)\n",
"\n",
" final_embeddings = normalized_embeddings.eval()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"마지막 임베딩을 저장합니다(물론 텐서플로의 `Saver`를 사용해도 됩니다):"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [],
"source": [
"np.save(\"./my_final_embeddings.npy\", final_embeddings)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 임베딩 그래프"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [],
"source": [
"def plot_with_labels(low_dim_embs, labels):\n",
" assert low_dim_embs.shape[0] >= len(labels), \"임베딩보다 레이블이 많습니다.\"\n",
" plt.figure(figsize=(18, 18)) # 인치 크기\n",
" for i, label in enumerate(labels):\n",
" x, y = low_dim_embs[i,:]\n",
" plt.scatter(x, y)\n",
" plt.annotate(label,\n",
" xy=(x, y),\n",
" xytext=(5, 2),\n",
" textcoords='offset points',\n",
" ha='right',\n",
" va='bottom')"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABBMAAAP3CAYAAAB+tAZHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3X9gzvX+//H7e7/HMvmxX340P8rY7DiaY8zaGJE4jhL6MT8iVEjo0Fk6O6kPaSdSQoe2SiWdUzQ16jvWZpiGRRgZi2xrGzNhm2vb9f1juWohxuyyedz+6drrel/v9+v1Pp1cHnu/nk/DbDYjIiIiIiIiInKlbKw9ARERERERERGpXRQmiIiIiIiIiEiVKEwQERERERERkSpRmCAiIiIiIiIiVaIwQURERERERESqRGGCiIiIiIiIiFSJwgQRERERERERqRKFCSIiIiIiIiJSJQoTRERERERERKRK7Gr6gk2aNDF7e3vX9GVFRERERERE5DK2b9+ebzabm17uuBoPE7y9vUlNTa3py4qIiIiIiIjIZRiG8cOVHKdtDiIiIiIiIiJSJQoTRERERERERKRKFCaIiIiIiIiISJUoTBARERERERGRKlGYICIiIiIiIiJVojBBRERERERERKpEYYKIiIiIiIiIVInCBBERERERERGpEoUJIiIiIiIiIlIlChNEREREREREpEoUJoiIiIiIiIhIlVRLmGAYxjTDML4zDOMbwzBSDcOoVx3nFREREREREZEbj921nsAwjH8BjkAns9lcahhGQ6D4mmcmIiIiIiIiIjeka3oy4ZfgoC/wM5BsGMbXQDez2VxeHZMTERERERERkRvPtW5zuBPwBX40m81dgSnAB4ZhtPntQYZhjPtl+0NqXl7eNV5SRERERERERKzpWsMENyDTbDa/A2A2m3cC8UC/3x5kNpvfMpvNAWazOaBp06bXeEkRERERERERsaZrDRNygVO/GysHyq7xvCIiIiIiIiJyg7rWMCEJaG0YRg8AwzDaAb2AL691YiIiIiIiIiJyY7qmbg5ms/mcYRj9gWWGYdhQ8VTCSLPZfKhaZiciIiIiIiIiN5xrbg35S52EO6thLiIiIiIiIiJSC1zrNgcRERERERERuckoTBARERERERGRKlGYICIiIiIiIiJVojBBRERERERERKpE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Wanjx48rKChIR44cUfPmzbVixQrdcsstddabPHmyvvnmGwUEBGjEiBEX3CYA1DfCBACA39m0aZP69esnqfakPDU1VZ999tkl19u6dasSExMVGxsrSbr66qvrvH6xb/iAxmbJkiWqqKhQYWGhampqlJqaqoMHD15w+dPD7L/77julpqbK7XYrPDxc//jHP5Sdna2lS5eqtLRUGRkZmj17tlasWKFHH31Ujz76qPLz81VQUKDAwEClp6dr7dq1Fw3f4uPjNXPmTL300kt64YUXNG/ePG99LF5lrdU999yjQ4cOKS4uTlOnTlWvXr3UunVrJSQkXHC92267TTk5OXrttdd0//33n2l/+eWXNXbsWBljFBoaqoULF+rxxx9Xz5491aZNG8XExPzovTIyMnTjjTcqJiaGJzwA8CrCBACA37nhhhtUUFCgQYMGyVqroqIijR079pLrJSQkaPPmzdq/f7+ioqJUXl5eZ2TCxb7hAxobt9utoqIiuVwuSdLhw4fVpk2bM6+fOyT+9JD3r776Sh07dlR4eLik2qH6kydPliTFxsbq5ptvllQ7bD87O1tut1tbt25Vnz59JEmlpaXavXu3tmzZcsHwLT09XZLUpk0brVixogH2vnGIj4/Xq6++WqdtypQpP1ru7HkRJGn48OEaPnz4mZ9P/w579OihgoKCOstmZWUpKyvrR+/p8XgkSXPmzDlvbSUlJZeoHgAuD2ECAMDvjBo1SuPHj5fL5dLJkyfVt2/fi06yeFpERITmzp2rQYMGKSQkRNdcc42WLl165nW+4YM/SUpKUlRUlHJyciTVXjxOnDhRu3btUseOHfXuu+/WWf70kPf4+HgVFxfryJEjCg8PV2Fhobp06SKp9r59j8ej6OhoffDBB7rhhhuUlJSktLQ05eXlSZL279+vq6++WvHx8RcM34KCfjjFtNY22GcAAPAdwgQAgN8JDg7WggULftR++ps6SXUen3b2N4B333237r777vOuxzd88CejR4/WhAkTlJaWpsDAQLVq1UqPPPKIsrKyNGfOHN10003nXS8yMlKzZs3S7bffrpCQEIWHhys3N1eS1KxZMz322GPavXu3JCkvL09xcXHasGGDUlNTz4RwS5YsIXxrhN7+dI+eWrVFe0uPKSYiTBP7X69BN8f6uiwATZTxdlqcnJxs3W63V7cJAIATW9d5tHbZ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\n",
"text/plain": [
"<Figure size 1296x1296 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.manifold import TSNE\n",
"\n",
"tsne = TSNE(perplexity=30, n_components=2, init='pca', n_iter=5000)\n",
"plot_only = 500\n",
"low_dim_embs = tsne.fit_transform(final_embeddings[:plot_only,:])\n",
"labels = [vocabulary[i] for i in range(plot_only)]\n",
"plot_with_labels(low_dim_embs, labels)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 기계 번역"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`basic_rnn_seq2seq()` 함수는 간단한 인코더/디코더 모델을 만듭니다. 먼저 `encoder_inputs`를 상태 벡터로 인코딩하는 RNN을 실행하고 그다음 `decoder_inputs`을 마지막 인코더 상태로 초기화시킨 디코더를 실행합니다. 인코더와 디코더는 같은 RNN 셀 타입을 사용하지만 파라미터를 공유하지는 않습니다."
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"reset_graph()\n",
"\n",
"n_steps = 50\n",
"n_neurons = 200\n",
"n_layers = 3\n",
"num_encoder_symbols = 20000\n",
"num_decoder_symbols = 20000\n",
"embedding_size = 150\n",
"learning_rate = 0.01\n",
"\n",
"X = tf.placeholder(tf.int32, [None, n_steps]) # 영어 문장\n",
"Y = tf.placeholder(tf.int32, [None, n_steps]) # 프랑스어 번역\n",
"W = tf.placeholder(tf.float32, [None, n_steps - 1, 1])\n",
"Y_input = Y[:, :-1]\n",
"Y_target = Y[:, 1:]\n",
"\n",
"encoder_inputs = tf.unstack(tf.transpose(X)) # 1D 텐서의 리스트\n",
"decoder_inputs = tf.unstack(tf.transpose(Y_input)) # 1D 텐서의 리스트\n",
"\n",
"lstm_cells = [tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons)\n",
" for layer in range(n_layers)]\n",
"cell = tf.contrib.rnn.MultiRNNCell(lstm_cells)\n",
"\n",
"output_seqs, states = tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq(\n",
" encoder_inputs,\n",
" decoder_inputs,\n",
" cell,\n",
" num_encoder_symbols,\n",
" num_decoder_symbols,\n",
" embedding_size)\n",
"\n",
"logits = tf.transpose(tf.unstack(output_seqs), perm=[1, 0, 2])"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [],
"source": [
"logits_flat = tf.reshape(logits, [-1, num_decoder_symbols])\n",
"Y_target_flat = tf.reshape(Y_target, [-1])\n",
"W_flat = tf.reshape(W, [-1])\n",
"xentropy = W_flat * tf.nn.sparse_softmax_cross_entropy_with_logits(labels=Y_target_flat, logits=logits_flat)\n",
"loss = tf.reduce_mean(xentropy)\n",
"optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"training_op = optimizer.minimize(loss)\n",
"\n",
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# 연습문제 해답"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. to 6."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"부록 A 참조."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 7. 임베딩된 레버(Reber) 문법"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"먼저 문법에 맞는 문자열을 생성하는 함수가 필요합니다. 이 문법은 각 상태에서 가능한 전이 상태의 리스트입니다. 하나의 전이는 출력할 문자열(또는 생성할 문법)과 다음 상태를 지정합니다."
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [],
"source": [
"from random import choice, seed\n",
"\n",
"# 일관된 출력을 위한 유사난수 초기화\n",
"seed(42)\n",
"np.random.seed(42)\n",
"\n",
"default_reber_grammar = [\n",
" [(\"B\", 1)], # (상태 0) =B=>(상태 1)\n",
" [(\"T\", 2), (\"P\", 3)], # (상태 1) =T=>(상태 2) or =P=>(상태 3)\n",
" [(\"S\", 2), (\"X\", 4)], # (상태 2) =S=>(상태 2) or =X=>(상태 4)\n",
" [(\"T\", 3), (\"V\", 5)], # 등등..\n",
" [(\"X\", 3), (\"S\", 6)],\n",
" [(\"P\", 4), (\"V\", 6)],\n",
" [(\"E\", None)]] # (상태 6) =E=>(종료 상태)\n",
"\n",
"embedded_reber_grammar = [\n",
" [(\"B\", 1)],\n",
" [(\"T\", 2), (\"P\", 3)],\n",
" [(default_reber_grammar, 4)],\n",
" [(default_reber_grammar, 5)],\n",
" [(\"T\", 6)],\n",
" [(\"P\", 6)],\n",
" [(\"E\", None)]]\n",
"\n",
"def generate_string(grammar):\n",
" state = 0\n",
" output = []\n",
" while state is not None:\n",
" production, state = choice(grammar[state])\n",
" if isinstance(production, list):\n",
" production = generate_string(grammar=production)\n",
" output.append(production)\n",
" return \"\".join(output)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"기본 레버 문법에 맞는 문자열을 몇 개 만들어 보겠습니다:"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BTXXTTTTVPXTTTTTVPSE BTXSE BTXXTVPSE BTXXVPSE BTSSXXTTVVE BTXSE BTSSSXSE BPTTTVVE BTXXVVE BPTTVVE BTSXXTTTTVPSE BPTTVVE BPTVPSE BPTTVPXVVE BPVPXTTTVPXTVPSE BTXSE BPTTTTVPXTTTTTTTVPXVVE BPTVVE BTXSE BPTTTVVE BTSXXVPSE BTXXTTTTTVVE BPTTVPSE BPVVE BPTTTVPXVPXTTTTTVPXTTVVE "
]
}
],
"source": [
"for _ in range(25):\n",
" print(generate_string(default_reber_grammar), end=\" \")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"좋습니다. 이제 임베딩된 레버 문법에 맞는 문자열을 몇 개 만들어 보겠습니다:"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BPBPTVVEPE BTBPTVPXVVETE BPBPTTTVVEPE BPBTXSEPE BPBPTTTTTVPSEPE BTBTSXSETE BPBPVPSEPE BPBPVVEPE BPBTXSEPE BPBTSXSEPE BTBPTTVVETE BPBPVVEPE BTBTXSETE BPBPTTVVEPE BTBTSXXVVETE BTBTXXTVPXTVPSETE BTBPTVVETE BPBPVPXTTVPXTVVEPE BTBTXSETE BPBTXSEPE BPBTSXXTVPSEPE BPBPVVEPE BPBPTTTTTTTTTTVPXVVEPE BPBPVVEPE BPBPVVEPE "
]
}
],
"source": [
"for _ in range(25):\n",
" print(generate_string(embedded_reber_grammar), end=\" \")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"좋네요, 이제 이 문법을 따르지 않는 문자열을 생성할 함수를 만듭니다. 무작위하게 문자열을 만들 수 있지만 그렇게 하면 너무 문제가 쉬워지므로 대신 문법을 따르는 문자열을 만든 후 하나의 문자만 바꾸어 놓도록 하겠습니다:"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [],
"source": [
"def generate_corrupted_string(grammar, chars=\"BEPSTVX\"):\n",
" good_string = generate_string(grammar)\n",
" index = np.random.randint(len(good_string))\n",
" good_char = good_string[index]\n",
" bad_char = choice(list(set(chars) - set(good_char)))\n",
" return good_string[:index] + bad_char + good_string[index + 1:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"잘못된 문자열 몇 개를 만들어 보죠:"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"BPBPVPPEPE BPBSXSEPE BPBPTVVTPE BTBPEPSETE BTBPVVVTE BPBTSSXXTSTVVEPE BPVTSXXTVPSEPE BPBTXSPPE BTBPTTTVPSTTE BPBTSXXTTTXTTVVEPE BPBBXXVPXTVPXTTVVEPE BPBPTTVXEPE BPBPVVEEE BPPPTTVVEPE BPBPVESEPE BPBTBXXVVEPE BVBPTTTVPXVVETE BPBTSSXVEPE BPBPVXEPE BVBTXSEPE BTBPTVPXVPXVVETV EPBTSXXTVPXVPSEPE BPBTSXXTTTVBSEPE BPBPVPXVVPPE BTBTSBSETE "
]
}
],
"source": [
"for _ in range(25):\n",
" print(generate_corrupted_string(embedded_reber_grammar), end=\" \")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"문자열을 바로 RNN에 주입할 수는 없습니다. 먼저 벡터의 연속으로 바꾸어야 합니다. 각 벡터는 원-핫 인코딩을 사용하여 하나의 문자를 나타냅니다. 예를 들어, 벡터 `[1, 0, 0, 0, 0, 0, 0]`는 문자 \"B\"를 나타내고 벡터 `[0, 1, 0, 0, 0, 0, 0]`는 문자 \"E\"를 나타내는 식입니다. 이런 원-핫 벡터의 연속으로 문자열을 바꾸는 함수를 작성해 보겠습니다. 문자열이 `n_steps`보다 짧으면 0 벡터로 패딩됩니다(나중에, 텐서플로에게 각 문자열의 실제 길이를 `sequence_length` 매개변수로 전달할 것입니다)."
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [],
"source": [
"def string_to_one_hot_vectors(string, n_steps, chars=\"BEPSTVX\"):\n",
" char_to_index = {char: index for index, char in enumerate(chars)}\n",
" output = np.zeros((n_steps, len(chars)), dtype=np.int32)\n",
" for index, char in enumerate(string):\n",
" output[index, char_to_index[char]] = 1.\n",
" return output"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 1, 0, 0],\n",
" [1, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 1, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 1],\n",
" [0, 0, 0, 1, 0, 0, 0],\n",
" [0, 1, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 1, 0, 0],\n",
" [0, 1, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0]], dtype=int32)"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"string_to_one_hot_vectors(\"BTBTXSETE\", 12)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"이제 50%는 올바른 문자열 50%는 잘못된 문자열로 이루어진 데이터셋을 만듭니다:"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [],
"source": [
"def generate_dataset(size):\n",
" good_strings = [generate_string(embedded_reber_grammar)\n",
" for _ in range(size // 2)]\n",
" bad_strings = [generate_corrupted_string(embedded_reber_grammar)\n",
" for _ in range(size - size // 2)]\n",
" all_strings = good_strings + bad_strings\n",
" n_steps = max([len(string) for string in all_strings])\n",
" X = np.array([string_to_one_hot_vectors(string, n_steps)\n",
" for string in all_strings])\n",
" seq_length = np.array([len(string) for string in all_strings])\n",
" y = np.array([[1] for _ in range(len(good_strings))] +\n",
" [[0] for _ in range(len(bad_strings))])\n",
" rnd_idx = np.random.permutation(size)\n",
" return X[rnd_idx], seq_length[rnd_idx], y[rnd_idx]"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [],
"source": [
"X_train, l_train, y_train = generate_dataset(10000)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"첫 번째 훈련 샘플을 확인해 보겠습니다:"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 1, 0, 0],\n",
" [1, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 1, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 1, 0, 0],\n",
" [0, 0, 0, 0, 1, 0, 0],\n",
" [0, 0, 0, 0, 0, 1, 0],\n",
" [0, 0, 1, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 1],\n",
" [0, 0, 0, 0, 0, 1, 0],\n",
" [0, 0, 1, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 1],\n",
" [0, 0, 0, 0, 0, 1, 0],\n",
" [0, 0, 1, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 1],\n",
" [0, 0, 1, 0, 0, 0, 0],\n",
" [0, 0, 1, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 1],\n",
" [0, 0, 0, 0, 0, 1, 0],\n",
" [0, 0, 0, 0, 0, 1, 0],\n",
" [0, 1, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 1, 0, 0],\n",
" [0, 1, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0]], dtype=int32)"
]
},
"execution_count": 124,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"데이터셋에서 가장 긴 문자열 때문에 패딩된 0 벡터가 많습니다. 문자열 길이가 얼마나 될까요?"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"23"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"l_train[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"타깃 클래스는?"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0])"
]
},
"execution_count": 126,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"아주 좋습니다! 올바른 문자열을 구분할 RNN을 만들 준비가 되었습니다. 앞서 MNIST 이미지를 분류하기 위해 만든 것과 매우 비슷한 시퀀스 분류기를 만듭니다. 차이점은 다음 두 가지입니다:\n",
"* 첫째, 입력 문자열이 가변 길이이므로 `dynamic_rnn()` 함수를 호출할 때 `sequence_length`를 지정해야 합니다.\n",
"* 둘째, 이진 분류기이므로 출력 뉴런은 하나만 필요합니다. 이 뉴런은 각 문자열에 대해 올바른 문자열일 추정 로그 확률을 출력할 것입니다. 다중 클래스 분류에서는 `sparse_softmax_cross_entropy_with_logits()`를 사용했지만 이진 분류에서는 `sigmoid_cross_entropy_with_logits()`를 사용합니다."
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [],
"source": [
"reset_graph()\n",
"\n",
"possible_chars = \"BEPSTVX\"\n",
"n_inputs = len(possible_chars)\n",
"n_neurons = 30\n",
"n_outputs = 1\n",
"\n",
"learning_rate = 0.02\n",
"momentum = 0.95\n",
"\n",
"X = tf.placeholder(tf.float32, [None, None, n_inputs], name=\"X\")\n",
"seq_length = tf.placeholder(tf.int32, [None], name=\"seq_length\")\n",
"y = tf.placeholder(tf.float32, [None, 1], name=\"y\")\n",
"\n",
"gru_cell = tf.contrib.rnn.GRUCell(num_units=n_neurons)\n",
"outputs, states = tf.nn.dynamic_rnn(gru_cell, X, dtype=tf.float32,\n",
" sequence_length=seq_length)\n",
"\n",
"logits = tf.layers.dense(states, n_outputs, name=\"logits\")\n",
"y_pred = tf.cast(tf.greater(logits, 0.), tf.float32, name=\"y_pred\")\n",
"y_proba = tf.nn.sigmoid(logits, name=\"y_proba\")\n",
"\n",
"xentropy = tf.nn.sigmoid_cross_entropy_with_logits(labels=y, logits=logits)\n",
"loss = tf.reduce_mean(xentropy, name=\"loss\")\n",
"optimizer = tf.train.MomentumOptimizer(learning_rate=learning_rate,\n",
" momentum=momentum,\n",
" use_nesterov=True)\n",
"training_op = optimizer.minimize(loss)\n",
"\n",
"correct = tf.equal(y_pred, y, name=\"correct\")\n",
"accuracy = tf.reduce_mean(tf.cast(correct, tf.float32), name=\"accuracy\")\n",
"\n",
"init = tf.global_variables_initializer()\n",
"saver = tf.train.Saver()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"훈련하는 동안 진척 상황을 확인할 수 있도록 검증 세트를 만듭니다:"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {},
"outputs": [],
"source": [
"X_val, l_val, y_val = generate_dataset(5000)"
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0 훈련 손실: 0.6829, 정확도: 54.00% 검증 세트 정확도: 58.80%\n",
" 1 훈련 손실: 0.6518, 정확도: 64.00% 검증 세트 정확도: 62.38%\n",
" 2 훈련 손실: 0.6082, 정확도: 72.00% 검증 세트 정확도: 67.86%\n",
" 3 훈련 손실: 0.6268, 정확도: 64.00% 검증 세트 정확도: 66.56%\n",
" 4 훈련 손실: 0.4726, 정확도: 74.00% 검증 세트 정확도: 77.60%\n",
" 5 훈련 손실: 0.3666, 정확도: 84.00% 검증 세트 정확도: 84.02%\n",
" 6 훈련 손실: 0.3469, 정확도: 90.00% 검증 세트 정확도: 81.58%\n",
" 7 훈련 손실: 0.2350, 정확도: 76.00% 검증 세트 정확도: 71.58%\n",
" 8 훈련 손실: 0.2000, 정확도: 94.00% 검증 세트 정확도: 95.86%\n",
" 9 훈련 손실: 0.4007, 정확도: 74.00% 검증 세트 정확도: 76.34%\n",
" 10 훈련 손실: 0.3353, 정확도: 88.00% 검증 세트 정확도: 90.50%\n",
" 11 훈련 손실: 0.0116, 정확도: 100.00% 검증 세트 정확도: 99.44%\n",
" 12 훈련 손실: 0.0029, 정확도: 100.00% 검증 세트 정확도: 99.90%\n",
" 13 훈련 손실: 0.0016, 정확도: 100.00% 검증 세트 정확도: 99.96%\n",
" 14 훈련 손실: 0.0011, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 15 훈련 손실: 0.0010, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 16 훈련 손실: 0.0009, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 17 훈련 손실: 0.0007, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 18 훈련 손실: 0.0006, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 19 훈련 손실: 0.0006, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 20 훈련 손실: 0.0005, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 21 훈련 손실: 0.0004, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 22 훈련 손실: 0.0004, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 23 훈련 손실: 0.0004, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 24 훈련 손실: 0.0003, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 25 훈련 손실: 0.0003, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 26 훈련 손실: 0.0003, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 27 훈련 손실: 0.0003, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 28 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 29 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 30 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 31 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 32 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 33 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 34 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 35 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 36 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 37 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 38 훈련 손실: 0.0002, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 39 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 40 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 41 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 42 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 43 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 44 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 45 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 46 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 47 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 48 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n",
" 49 훈련 손실: 0.0001, 정확도: 100.00% 검증 세트 정확도: 100.00%\n"
]
}
],
"source": [
"n_epochs = 50\n",
"batch_size = 50\n",
"\n",
"with tf.Session() as sess:\n",
" init.run()\n",
" for epoch in range(n_epochs):\n",
" X_batches = np.array_split(X_train, len(X_train) // batch_size)\n",
" l_batches = np.array_split(l_train, len(l_train) // batch_size)\n",
" y_batches = np.array_split(y_train, len(y_train) // batch_size)\n",
" for X_batch, l_batch, y_batch in zip(X_batches, l_batches, y_batches):\n",
" loss_val, _ = sess.run(\n",
" [loss, training_op],\n",
" feed_dict={X: X_batch, seq_length: l_batch, y: y_batch})\n",
" acc_train = accuracy.eval(feed_dict={X: X_batch, seq_length: l_batch, y: y_batch})\n",
" acc_val = accuracy.eval(feed_dict={X: X_val, seq_length: l_val, y: y_val})\n",
" print(\"{:4d} 훈련 손실: {:.4f}, 정확도: {:.2f}% 검증 세트 정확도: {:.2f}%\".format(\n",
" epoch, loss_val, 100 * acc_train, 100 * acc_val))\n",
" saver.save(sess, \"./my_reber_classifier\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"이제 두 개의 문자열에 이 RNN을 테스트해 보죠. 첫 번째는 잘못된 것이고 두 번째는 올바른 것입니다. 이 문자열은 마지막에서 두 번째 글자만 다릅니다. RNN이 이를 맞춘다면 두 번째 문자가 항상 끝에서 두 번째 문자와 같아야 한다는 패턴을 알게 됐다는 것을 의미합니다. 이렇게 하려면 꽤 긴 단기 기억(long short-term memory)이 필요합니다(그래서 GRU 셀을 사용했습니다)."
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restoring parameters from my_reber_classifier\n",
"\n",
"레버 문자열일 추정 확률:\n",
"BPBTSSSSSSSSSSSSXXTTTTTVPXTTVPXTTTTTTTVPXVPXVPXTTTVVETE: 0.00%\n",
"BPBTSSSSSSSSSSSSXXTTTTTVPXTTVPXTTTTTTTVPXVPXVPXTTTVVEPE: 1.00%\n"
]
}
],
"source": [
"test_strings = [\n",
" \"BPBTSSSSSSSSSSSSXXTTTTTVPXTTVPXTTTTTTTVPXVPXVPXTTTVVETE\",\n",
" \"BPBTSSSSSSSSSSSSXXTTTTTVPXTTVPXTTTTTTTVPXVPXVPXTTTVVEPE\"]\n",
"l_test = np.array([len(s) for s in test_strings])\n",
"max_length = l_test.max()\n",
"X_test = [string_to_one_hot_vectors(s, n_steps=max_length)\n",
" for s in test_strings]\n",
"\n",
"with tf.Session() as sess:\n",
" saver.restore(sess, \"my_reber_classifier\")\n",
" y_proba_val = y_proba.eval(feed_dict={X: X_test, seq_length: l_test})\n",
"\n",
"print()\n",
"print(\"레버 문자열일 추정 확률:\")\n",
"for index, string in enumerate(test_strings):\n",
" print(\"{}: {:.2f}%\".format(string, y_proba_val[index][0]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"쨘! 잘 작동하네요. 이 RNN이 완벽한 신뢰도로 정확한 답을 냈습니다. :)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 8. 과 9."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Coming soon..."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.5"
},
"nav_menu": {},
"toc": {
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 6,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 1
}