diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/.DS_Store differ diff --git a/.ipynb_checkpoints/LV3-checkpoint.ipynb b/.ipynb_checkpoints/LV3-checkpoint.ipynb new file mode 100644 index 0000000..db9d9e1 --- /dev/null +++ b/.ipynb_checkpoints/LV3-checkpoint.ipynb @@ -0,0 +1,467 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "tf.reset_default_graph()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class FNN(object):\n", + " \"\"\"Build a general FeedForward neural network\n", + " Parameters\n", + " ----------\n", + " learning_rate : float\n", + " drop_out : float\n", + " Layers : list\n", + " The number of layers\n", + " N_hidden : list\n", + " The numbers of nodes in layers\n", + " D_input : int\n", + " Input dimension\n", + " D_label : int\n", + " Label dimension\n", + " Task_type : string\n", + " 'regression' or 'classification'\n", + " L2_lambda : float\n", + " Auther : YJango; 2016/11/25\n", + " \"\"\"\n", + " def __init__(self, learning_rate, Layers, N_hidden, D_input, D_label, Task_type='regression', L2_lambda=0.0):\n", + " \n", + " #var\n", + " self.learning_rate = learning_rate\n", + " self.Layers = Layers\n", + " self.N_hidden = N_hidden\n", + " self.D_input = D_input\n", + " self.D_label = D_label\n", + " # 类型控制loss函数的选择\n", + " self.Task_type = Task_type\n", + " # l2 regularization的惩罚强弱,过高会使得输出都拉向0\n", + " self.L2_lambda = L2_lambda\n", + " # 用于存放所累积的每层l2 regularization\n", + " self.l2_penalty = tf.constant(0.0)\n", + " \n", + " # 用于生成tensorflow缩放图的,括号里起名字\n", + " with tf.name_scope('Input'):\n", + " self.inputs = tf.placeholder(tf.float32, [None, D_input], name=\"inputs\")\n", + " with tf.name_scope('Label'):\n", + " self.labels = tf.placeholder(tf.float32, [None, D_label], name=\"labels\")\n", + " with tf.name_scope('keep_rate'):\n", + " self.drop_keep_rate = tf.placeholder(tf.float32, name=\"dropout_keep\")\n", + " \n", + "\n", + " # 初始化的时候直接生成,build方法是后面会建立的\n", + " self.build('F')\n", + " \n", + " def weight_init(self,shape):\n", + " # shape : list [in_dim, out_dim]\n", + " # 在这里更改初始化方法\n", + " # 方式1:下面的权重初始化若用ReLU激活函数,可以使用带有6个隐藏层的神经网络\n", + " # 若过深,则使用dropout会难以拟合。\n", + " #initial = tf.truncated_normal(shape, stddev=0.1)/ np.sqrt(shape[1])\n", + " # 方式2:下面的权重初始化若用ReLU激活函数,可以扩展到15个隐藏层以上(通常不会用那么多)\n", + " initial = tf.random_uniform(shape,minval=-np.sqrt(5)*np.sqrt(1.0/shape[0]), maxval=np.sqrt(5)*np.sqrt(1.0/shape[0]))\n", + " return tf.Variable(initial)\n", + "\n", + " def bias_init(self,shape):\n", + " # can change initialization here\n", + " initial = tf.constant(0.1, shape=shape)\n", + " return tf.Variable(initial)\n", + " \n", + " def variable_summaries(self, var, name):\n", + " with tf.name_scope(name+'_summaries'):\n", + " mean = tf.reduce_mean(var)\n", + " tf.summary.scalar('mean/' + name, mean)\n", + " with tf.name_scope(name+'_stddev'):\n", + " stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))\n", + " # 记录每次训练后变量的数值变化\n", + " tf.summary.scalar('_stddev/' + name, stddev)\n", + " tf.summary.scalar_('_max/' + name, tf.reduce_max(var))\n", + " tf.summary.scalar_('_min/' + name, tf.reduce_min(var))\n", + " tf.summary.histogram(name, var)\n", + "\n", + " def layer(self,in_tensor, in_dim, out_dim, layer_name, act=tf.nn.relu):\n", + " with tf.name_scope(layer_name):\n", + " with tf.name_scope(layer_name+'_weights'):\n", + " # 用所建立的weight_init函数进行初始化。\n", + " weights = self.weight_init([in_dim, out_dim])\n", + " # 存放着每一个权重W\n", + " self.W.append(weights)\n", + " # 对权重进行统计\n", + " self.variable_summaries(weights, layer_name + '/weights')\n", + " with tf.name_scope(layer_name+'_biases'):\n", + " biases = self.bias_init([out_dim])\n", + " # 存放着每一个偏移b\n", + " self.b.append(biases)\n", + " self.variable_summaries(biases, layer_name + '/biases')\n", + " with tf.name_scope(layer_name+'_Wx_plus_b'):\n", + " # 计算Wx+b\n", + " pre_activate = tf.matmul(in_tensor, weights) + biases\n", + " # 记录直方图\n", + " tf.summary.histogram(layer_name + '/pre_activations', pre_activate)\n", + " # 计算a(Wx+b)\n", + " activations = act(pre_activate, name='activation')\n", + " tf.summary.histogram(layer_name + '/activations', activations)\n", + " # 最终返回该层的输出,以及权重W的L2\n", + " return activations, tf.nn.l2_loss(weights)\n", + "\n", + " def drop_layer(self,in_tensor):\n", + " #tf.scalar_summary('dropout_keep', self.drop_keep_rate)\n", + " dropped = tf.nn.dropout(in_tensor, self.drop_keep_rate)\n", + " return dropped\n", + "\n", + " def build(self, prefix):\n", + " # 建立网络 \n", + " # incoming也代表当前tensor的流动位置\n", + " incoming = self.inputs\n", + " # 如果没有隐藏层\n", + " if self.Layers!=0:\n", + " layer_nodes = [self.D_input] + self.N_hidden\n", + " else:\n", + " layer_nodes = [self.D_input]\n", + " \n", + " # hid_layers用于存储所有隐藏层的输出\n", + " self.hid_layers=[]\n", + " # W用于存储所有层的权重\n", + " self.W=[]\n", + " # b用于存储所有层的偏移\n", + " self.b=[]\n", + " # total_l2用于存储所有层的L2\n", + " self.total_l2=[]\n", + " \n", + " # 开始叠加隐藏层。这跟千层饼没什么区别。\n", + " for l in range(self.Layers):\n", + " # 使用刚才编写的函数来建立层,并更新incoming的位置\n", + " incoming,l2_loss= self.layer(incoming,layer_nodes[l],layer_nodes[l+1],prefix+'_hid_'+str(l+1),act=tf.nn.relu)\n", + " # 累计l2\n", + " self.total_l2.append(l2_loss)\n", + " # 输出一些信息,让我们知道网络在建造中做了什么\n", + " print('Add dense layer: relu')\n", + " print(' %sD --> %sD' %(layer_nodes[l],layer_nodes[l+1]))\n", + " # 存储所有隐藏层的输出\n", + " self.hid_layers.append(incoming)\n", + " # 加入dropout层\n", + " incoming = self.drop_layer(incoming)\n", + " \n", + " # 输出层的建立。输出层需要特别对待的原因是输出层的activation function要根据任务来变。\n", + " # 回归任务的话,下面用的是tf.identity,也就是没有activation function\n", + " if self.Task_type=='regression':\n", + " out_act=tf.identity\n", + " else:\n", + " # 分类任务使用softmax来拟合概率\n", + " out_act=tf.nn.softmax\n", + " self.output,l2_loss= self.layer(incoming,layer_nodes[-1],self.D_label, layer_name='output',act=out_act)\n", + " self.total_l2.append(l2_loss)\n", + " print('Add output layer: linear')\n", + " print(' %sD --> %sD' %(layer_nodes[-1],self.D_label))\n", + " \n", + " # l2 loss的缩放图\n", + " with tf.name_scope('total_l2'):\n", + " for l2 in self.total_l2:\n", + " self.l2_penalty+=l2\n", + " tf.summary.scalar('l2_penalty', self.l2_penalty)\n", + " \n", + " # 不同任务的loss\n", + " # 若为回归,则loss是用于判断所有预测值和实际值差别的函数。\n", + " if self.Task_type=='regression':\n", + " with tf.name_scope('SSE'):\n", + " self.loss=tf.reduce_mean((self.output-self.labels)**2)\n", + " self.loss2=tf.nn.l2_loss(self.output-self.labels)\n", + " \n", + " tf.summary.scalar('loss', self.loss)\n", + " else:\n", + " # 若为分类,cross entropy的loss function\n", + " entropy = tf.nn.softmax_cross_entropy_with_logits(self.output, self.labels)\n", + " with tf.name_scope('cross entropy'):\n", + " self.loss = tf.reduce_mean(entropy)\n", + " tf.summary.scalar('loss', self.loss)\n", + " with tf.name_scope('accuracy'):\n", + " correct_prediction = tf.equal(tf.argmax(self.output, 1), tf.argmax(self.labels, 1))\n", + " self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", + " tf.summary.scalar('accuracy', self.accuracy)\n", + " \n", + " # 整合所有loss,形成最终loss\n", + " with tf.name_scope('total_loss'):\n", + " self.total_loss=self.loss + self.l2_penalty*self.L2_lambda\n", + " tf.summary.scalar('total_loss', self.total_loss)\n", + " \n", + " # 训练操作\n", + " with tf.name_scope('train'):\n", + " self.train_step = tf.train.AdamOptimizer(self.learning_rate).minimize(self.total_loss)\n", + "\n", + " # 洗牌功能\n", + " def shufflelists(self,lists):\n", + " ri=np.random.permutation(len(lists[1]))\n", + " out=[]\n", + " for l in lists:\n", + " out.append(l[ri])\n", + " return out" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def Standardize(seq):\n", + " #subtract mean\n", + " centerized=seq-np.mean(seq, axis = 0)\n", + " #divide standard deviation\n", + " normalized=centerized/np.std(centerized, axis = 0)\n", + " return normalized\n", + "def Makewindows(indata,window_size=41):\n", + " outdata=[]\n", + " mid=int(window_size/2)\n", + " indata=np.vstack((np.zeros((mid,indata.shape[1])),indata,np.zeros((mid,indata.shape[1]))))\n", + " for i in range(indata.shape[0]-window_size+1):\n", + " outdata.append(np.hstack(indata[i:i+window_size]))\n", + " return np.array(outdata)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mfc=np.load('X.npy')\n", + "art=np.load('Y.npy')\n", + "x=[]\n", + "y=[]\n", + "for i in range(len(mfc)):\n", + " x.append(Makewindows(Standardize(mfc[i])))\n", + " y.append(Standardize(art[i]))\n", + "vali_size=20\n", + "totalsamples=len(np.vstack(x))\n", + "X_train=np.vstack(x)[int(totalsamples/vali_size):].astype(\"float32\")\n", + "Y_train=np.vstack(y)[int(totalsamples/vali_size):].astype(\"float32\")\n", + "\n", + "X_test=np.vstack(x)[:int(totalsamples/vali_size)].astype(\"float32\")\n", + "Y_test=np.vstack(y)[:int(totalsamples/vali_size)].astype(\"float32\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "((37500, 1599), (37500, 24), (1973, 1599), (1973, 24))\n" + ] + } + ], + "source": [ + "print(X_train.shape,Y_train.shape,X_test.shape,Y_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Add dense layer: relu\n", + " 1599D --> 2048D\n", + "Add dense layer: relu\n", + " 2048D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 512D\n", + "Add dense layer: relu\n", + " 512D --> 256D\n", + "Add dense layer: relu\n", + " 256D --> 128D\n", + "Add output layer: linear\n", + " 128D --> 24D\n" + ] + } + ], + "source": [ + "# 生成网络实例\n", + "ff=FNN(learning_rate=7e-5, Layers=5, N_hidden=[2048,1024,512,256,128], D_input=1599, D_label=24, L2_lambda=1e-4)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sess = tf.InteractiveSession()\n", + "sess.run(tf.global_variables_initializer())\n", + "merged = tf.summary.merge_all()\n", + "train_writer = tf.summary.FileWriter('log3' + '/train',sess.graph)\n", + "test_writer = tf.summary.FileWriter('log3' + '/test')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def plots(T,P,i, n=21,length=400):\n", + " m=0\n", + " plt.figure(figsize=(20,16))\n", + " plt.subplot(411)\n", + " plt.plot(T[m:m+length,7],'--')\n", + " plt.plot(P[m:m+length,7])\n", + "\n", + " plt.subplot(412)\n", + " plt.plot(T[m:m+length,8],'--')\n", + " plt.plot(P[m:m+length,8])\n", + " \n", + " plt.subplot(413)\n", + " plt.plot(T[m:m+length,15],'--')\n", + " plt.plot(P[m:m+length,15])\n", + " \n", + " plt.subplot(414)\n", + " plt.plot(T[m:m+length,16],'--')\n", + " plt.plot(P[m:m+length,16])\n", + " plt.legend(['True','Predicted'])\n", + " plt.savefig('epoch'+str(i)+'.png')\n", + " plt.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch0 | train_loss:0.693693 |test_loss:0.695782\n", + "epoch1 | train_loss:0.561398 |test_loss:0.583177\n", + "epoch2 | train_loss:0.478702 |test_loss:0.54134\n", + "epoch3 | train_loss:0.389257 |test_loss:0.482584\n", + "epoch4 | train_loss:0.320454 |test_loss:0.453059\n", + "epoch5 | train_loss:0.27317 |test_loss:0.441251\n", + "epoch6 | train_loss:0.234799 |test_loss:0.436898\n", + "epoch7 | train_loss:0.203948 |test_loss:0.436239\n", + "epoch8 | train_loss:0.176413 |test_loss:0.426064\n", + "epoch9 | train_loss:0.156074 |test_loss:0.425965\n", + "epoch10 | train_loss:0.132211 |test_loss:0.414978\n", + "epoch11 | train_loss:0.120031 |test_loss:0.40392\n", + "epoch12 | train_loss:0.105933 |test_loss:0.407968\n", + "epoch13 | train_loss:0.100558 |test_loss:0.402615\n", + "epoch14 | train_loss:0.0894171 |test_loss:0.39814\n", + "epoch15 | train_loss:0.0805371 |test_loss:0.395325\n", + "epoch16 | train_loss:0.0755967 |test_loss:0.396785\n", + "epoch17 | train_loss:0.0714638 |test_loss:0.399197\n", + "epoch18 | train_loss:0.0633848 |test_loss:0.399693\n", + "epoch19 | train_loss:0.0614749 |test_loss:0.393158\n", + "epoch20 | train_loss:0.0591606 |test_loss:0.394801\n", + "epoch21 | train_loss:0.055984 |test_loss:0.38638\n", + "epoch22 | train_loss:0.0540141 |test_loss:0.390381\n", + "epoch23 | train_loss:0.0496812 |test_loss:0.384337\n", + "epoch24 | train_loss:0.049253 |test_loss:0.387584\n", + "epoch25 | train_loss:0.0445422 |test_loss:0.383592\n", + "epoch26 | train_loss:0.0432337 |test_loss:0.382902\n", + "epoch27 | train_loss:0.0451354 |test_loss:0.382096\n", + "epoch28 | train_loss:0.041636 |test_loss:0.385363\n", + "epoch29 | train_loss:0.0392896 |test_loss:0.380636\n", + "epoch30 | train_loss:0.0386417 |test_loss:0.386117\n", + "epoch31 | train_loss:0.0378463 |test_loss:0.38561\n", + "epoch32 | train_loss:0.036046 |test_loss:0.383354\n", + "epoch33 | train_loss:0.0359106 |test_loss:0.381586\n", + "epoch34 | train_loss:0.0344725 |test_loss:0.379078\n", + "epoch35 | train_loss:0.0337404 |test_loss:0.376501\n", + "epoch36 | train_loss:0.0340016 |test_loss:0.379459\n", + "epoch37 | train_loss:0.032026 |test_loss:0.37459\n", + "epoch38 | train_loss:0.0317964 |test_loss:0.37812\n", + "epoch39 | train_loss:0.033109 |test_loss:0.37789\n", + "epoch40 | train_loss:0.0311886 |test_loss:0.372208\n", + "epoch41 | train_loss:0.0303357 |test_loss:0.370058\n", + "epoch42 | train_loss:0.0300332 |test_loss:0.37759\n", + "epoch43 | train_loss:0.0293583 |test_loss:0.36993\n", + "epoch44 | train_loss:0.0287083 |test_loss:0.373513\n", + "epoch45 | train_loss:0.0296841 |test_loss:0.371504\n", + "epoch46 | train_loss:0.0279586 |test_loss:0.370936\n", + "epoch47 | train_loss:0.0285195 |test_loss:0.373591\n", + "epoch48 | train_loss:0.0281992 |test_loss:0.37003\n", + "epoch49 | train_loss:0.0267218 |test_loss:0.368262\n" + ] + } + ], + "source": [ + "# 训练并记录\n", + "k=0\n", + "Batch=32\n", + "for i in range(50):\n", + " idx=0\n", + " X0,Y0=ff.shufflelists([X_train,Y_train])\n", + " while idxlen(layer_nodes):\n", + " nodes_in=layer_nodes[-1]\n", + " nodes_out=layer_nodes[-1]\n", + " else:\n", + " nodes_in=layer_nodes[l]\n", + " nodes_out=layer_nodes[l+1]\n", + " incoming,l2_loss= self.layer(incoming,nodes_in,nodes_out,prefix+'_hid_'+str(l+1),act=tf.nn.relu)\n", + " # 累计l2\n", + " self.total_l2.append(l2_loss)\n", + " # 输出一些信息,让我们知道网络在建造中做了什么\n", + " print('Add dense layer: relu')\n", + " print(' %sD --> %sD' %(nodes_in,nodes_out))\n", + " # 存储所有隐藏层的输出\n", + " self.hid_layers.append(incoming)\n", + " # 加入dropout层\n", + " incoming = self.drop_layer(incoming)\n", + " \n", + " # 输出层的建立。输出层需要特别对待的原因是输出层的activation function要根据任务来变。\n", + " # 回归任务的话,下面用的是tf.identity,也就是没有activation function\n", + " if self.Task_type=='regression':\n", + " out_act=tf.identity\n", + " else:\n", + " # 分类任务使用softmax来拟合概率\n", + " out_act=tf.nn.softmax\n", + " self.output,l2_loss= self.layer(incoming,layer_nodes[-1],self.D_label, layer_name='output',act=out_act)\n", + " self.total_l2.append(l2_loss)\n", + " print('Add output layer: linear')\n", + " print(' %sD --> %sD' %(layer_nodes[-1],self.D_label))\n", + " \n", + " # l2 loss的缩放图\n", + " with tf.name_scope('total_l2'):\n", + " for l2 in self.total_l2:\n", + " self.l2_penalty+=l2\n", + " tf.summary.histogram('l2_penalty', self.l2_penalty)\n", + " \n", + " # 不同任务的loss\n", + " # 若为回归,则loss是用于判断所有预测值和实际值差别的函数。\n", + " if self.Task_type=='regression':\n", + " with tf.name_scope('SSE'):\n", + " self.loss=tf.reduce_mean((self.output-self.labels)**2)\n", + " self.loss2=tf.nn.l2_loss(self.output-self.labels)\n", + " \n", + " tf.summary.histogram('loss', self.loss)\n", + " else:\n", + " # 若为分类,cross entropy的loss function\n", + " entropy = tf.nn.softmax_cross_entropy_with_logits(self.output, self.labels)\n", + " with tf.name_scope('cross entropy'):\n", + " self.loss = tf.reduce_mean(entropy)\n", + " tf.summary.histogram('loss', self.loss)\n", + " with tf.name_scope('accuracy'):\n", + " correct_prediction = tf.equal(tf.argmax(self.output, 1), tf.argmax(self.labels, 1))\n", + " self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", + " tf.summary.histogram('accuracy', self.accuracy)\n", + " \n", + " # 整合所有loss,形成最终loss\n", + " with tf.name_scope('total_loss'):\n", + " self.total_loss=self.loss + self.l2_penalty*self.L2_lambda\n", + " tf.summary.histogram('total_loss', self.total_loss)\n", + " \n", + " # 训练操作\n", + " with tf.name_scope('train'):\n", + " self.train_step = tf.train.AdamOptimizer(self.learning_rate).minimize(self.total_loss)\n", + "\n", + " # 洗牌功能\n", + " def shufflelists(self,lists):\n", + " ri=np.random.permutation(len(lists[1]))\n", + " out=[]\n", + " for l in lists:\n", + " out.append(l[ri])\n", + " return out" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def Standardize(seq):\n", + " #subtract mean\n", + " centerized=seq-np.mean(seq, axis = 0)\n", + " #divide standard deviation\n", + " normalized=centerized/np.std(centerized, axis = 0)\n", + " return normalized\n", + "def Makewindows(indata,window_size=41):\n", + " outdata=[]\n", + " mid=int(window_size/2)\n", + " indata=np.vstack((np.zeros((mid,indata.shape[1])),indata,np.zeros((mid,indata.shape[1]))))\n", + " for i in range(indata.shape[0]-window_size+1):\n", + " outdata.append(np.hstack(indata[i:i+window_size]))\n", + " return np.array(outdata)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "mfc=np.load('X.npy')\n", + "art=np.load('Y.npy')\n", + "x=[]\n", + "y=[]\n", + "for i in range(len(mfc)):\n", + " x.append(Makewindows(Standardize(mfc[i])))\n", + " y.append(Standardize(art[i]))\n", + "vali_size=20\n", + "totalsamples=len(np.vstack(x))\n", + "X_train=np.vstack(x)[int(totalsamples/vali_size):].astype(\"float32\")\n", + "Y_train=np.vstack(y)[int(totalsamples/vali_size):].astype(\"float32\")\n", + "\n", + "X_test=np.vstack(x)[:int(totalsamples/vali_size)].astype(\"float32\")\n", + "Y_test=np.vstack(y)[:int(totalsamples/vali_size)].astype(\"float32\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "((37500, 1599), (37500, 24), (1973, 1599), (1973, 24))\n" + ] + } + ], + "source": [ + "print(X_train.shape,Y_train.shape,X_test.shape,Y_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Add dense layer: relu\n", + " 1599D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add dense layer: relu\n", + " 1024D --> 1024D\n", + "Add output layer: linear\n", + " 1024D --> 24D\n" + ] + } + ], + "source": [ + "# 生成网络实例\n", + "# 如果不指定全部隐藏层节点,则多出的隐藏层全部按最后一个指定的隐藏层节点数设定\n", + "ff=FNN(learning_rate=7e-5, Layers=50,N_hidden=[1024], D_input=1599, D_label=24, L2_lambda=1e-4)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "sess = tf.InteractiveSession()\n", + "sess.run(tf.global_variables_initializer())\n", + "merged = tf.summary.merge_all()\n", + "train_writer = tf.summary.FileWriter('log' + '/train',sess.graph)\n", + "test_writer = tf.summary.FileWriter('log' + '/test')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def plots(T,P,i, n=21,length=400):\n", + " m=0\n", + " plt.figure(figsize=(20,16))\n", + " plt.subplot(411)\n", + " plt.plot(T[m:m+length,7],'--')\n", + " plt.plot(P[m:m+length,7])\n", + "\n", + " plt.subplot(412)\n", + " plt.plot(T[m:m+length,8],'--')\n", + " plt.plot(P[m:m+length,8])\n", + " \n", + " plt.subplot(413)\n", + " plt.plot(T[m:m+length,15],'--')\n", + " plt.plot(P[m:m+length,15])\n", + " \n", + " plt.subplot(414)\n", + " plt.plot(T[m:m+length,16],'--')\n", + " plt.plot(P[m:m+length,16])\n", + " plt.legend(['True','Predicted'])\n", + " plt.savefig('epoch'+str(i)+'.png')\n", + " plt.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch0 | train_loss:[0.60085243] |test_loss:0.659336\n", + "epoch1 | train_loss:[0.56255817] |test_loss:0.653993\n", + "epoch2 | train_loss:[0.53966987] |test_loss:0.644001\n", + "epoch3 | train_loss:[0.47888839] |test_loss:0.609307\n", + "epoch4 | train_loss:[0.4274255] |test_loss:0.580894\n", + "epoch5 | train_loss:[0.41663638] |test_loss:0.58645\n", + "epoch6 | train_loss:[0.39932683] |test_loss:0.594072\n", + "epoch7 | train_loss:[0.35524291] |test_loss:0.57222\n", + "epoch8 | train_loss:[0.35336751] |test_loss:0.565518\n", + "epoch9 | train_loss:[0.30439419] |test_loss:0.545433\n" + ] + } + ], + "source": [ + "# 训练并记录\n", + "k=0\n", + "EPOCH=10\n", + "Batch=256\n", + "for i in range(EPOCH):\n", + " idx=0\n", + " X0,Y0=ff.shufflelists([X_train,Y_train])\n", + " while idx %sD' %(layer_nodes[l],layer_nodes[l+1]))\n", + " # 存储所有隐藏层的输出\n", + " self.hid_layers.append(incoming)\n", + " # 加入dropout层\n", + " incoming = self.drop_layer(incoming)\n", + " \n", + " # 输出层的建立。输出层需要特别对待的原因是输出层的activation function要根据任务来变。\n", + " # 回归任务的话,下面用的是tf.identity,也就是没有activation function\n", + " if self.Task_type=='regression':\n", + " out_act=tf.identity\n", + " else:\n", + " # 分类任务使用softmax来拟合概率\n", + " out_act=tf.nn.softmax\n", + " self.output,l2_loss= self.layer(incoming,layer_nodes[-1],self.D_label, layer_name='output',act=out_act)\n", + " print('Add output layer: linear')\n", + " print(' %sD --> %sD' %(layer_nodes[-1],self.D_label))\n", + " \n", + " # l2 loss的缩放图\n", + " with tf.name_scope('total_l2'):\n", + " for l2 in self.total_l2:\n", + " self.l2_penalty+=l2\n", + " tf.summary.scalar('l2_penalty', self.l2_penalty)\n", + " \n", + " # 不同任务的loss\n", + " # 若为回归,则loss是用于判断所有预测值和实际值差别的函数。\n", + " if self.Task_type=='regression':\n", + " with tf.name_scope('SSE'):\n", + " self.loss=tf.reduce_mean((self.output-self.labels)**2)\n", + " tf.summary.scalar('loss', self.loss)\n", + " else:\n", + " # 若为分类,cross entropy的loss function\n", + " entropy = tf.nn.softmax_cross_entropy_with_logits(logits=self.output, labels=self.labels)\n", + " with tf.name_scope('cross_entropy'):\n", + " self.loss = tf.reduce_mean(entropy)\n", + " tf.summary.scalar('loss', self.loss)\n", + " with tf.name_scope('accuracy'):\n", + " correct_prediction = tf.equal(tf.argmax(self.output, 1), tf.argmax(self.labels, 1))\n", + " self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", + " tf.summary.scalar('accuracy', self.accuracy)\n", + " \n", + " # 整合所有loss,形成最终loss\n", + " with tf.name_scope('total_loss'):\n", + " self.total_loss=self.loss + self.l2_penalty*self.L2_lambda\n", + " tf.summary.scalar('total_loss', self.total_loss)\n", + " \n", + " # 训练操作\n", + " with tf.name_scope('train'):\n", + " self.train_step = tf.train.AdamOptimizer(self.learning_rate).minimize(self.total_loss)\n", + "\n", + " # 洗牌功能\n", + " def shufflelists(self,lists):\n", + " ri=np.random.permutation(len(lists[1]))\n", + " out=[]\n", + " for l in lists:\n", + " out.append(l[ri])\n", + " return out" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# 准备训练数据\n", + "inputs=[[0,0],[0,1],[1,0],[1,1]]\n", + "outputs=[0,1,1,0]\n", + "X=np.array(inputs).reshape((4,1,2)).astype('int16')\n", + "Y=np.array(outputs).reshape((4,1,1)).astype('int16')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Add dense layer: relu with drop_keep:1.0\n", + " 2D --> 2D\n", + "Add output layer: linear\n", + " 2D --> 1D\n" + ] + } + ], + "source": [ + "# 生成网络实例\n", + "ff=FNN(learning_rate=1e-3, drop_keep=1.0, Layers=1, N_hidden=[2], D_input=2, D_label=1, Task_type='regression', L2_lambda=1e-2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# 加载\n", + "sess = tf.InteractiveSession()\n", + "sess.run(tf.global_variables_initializer())\n", + "merged = tf.summary.merge_all()\n", + "train_writer = tf.summary.FileWriter('log' + '/train',sess.graph)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W_0:\n", + "[[ 0.50515938 1.1875577 ]\n", + " [-0.36632717 -0.7873252 ]]\n", + "W_1:\n", + "[[ 0.3926791 ]\n", + " [ 1.36484265]]\n" + ] + }, + { + "data": { + "text/plain": [ + "Text(4,2.5,u'1.36')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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nT3efuzYMb1p0yb91FNP6b/97W+l/75jxw7duXNnnZeXp8+fP68HDx6s9+7da3X5Aetvf9M6Jkbr3bvtriQ0ffKJ1ldeqXW9elo/95zW5855d7/qft5zc3N1SUmJ1lrr7du364SEhNLbBgwYoD///PPS4/Ly8mr3JBwO2KK96LEycr9EsbFmWVlVEQX9+/enSZMmVd6/efPm9OzZk8jIyHL/vmvXLvr06UODBg2IiIhgwIABLF682MrSA9ann16IFkhIsLua0DRsmDnBOnmy2e3atat3MQbV/bxHRUWhXBsU8vLySj///vvvKSoq4pe//GXpcQ0aNKj9ExHS3GvDFxEFXbp0Ye3atZw4cYKzZ8+ybNky0tPTrXuAALVnD4wcKdECgcAdY/DttxAXZ12MweLFi+nQoQM333wzb731FgB79+6lUaNG3HHHHXTr1o3JkydTLJGslqi2uSul2iilvlBK7VJKfaeU+r2HYwYqpU4rpdJcH8/4ptzAM3QofPONdREFHTt25PHHH+eXv/wlQ4cOpWvXrkRERFjzzQOURAsEpoQEWLHCnPv44osLMQaX2ntvv/12du/ezZIlS/jTn/4EQFFREevWrWPKlCls3ryZH374gblz51r3JEKYNyP3IuBRrXVHoA8wUSnVycNx67TWSa6Pv1haZYAbPdrkilsVUXD//fezbds21q5dS5MmTbj66qut+cYBSKIFAptS5h3V7t0XYgx69qxdjEH//v05cOAAx48fJy4ujm7dutGuXTsiIiIYPnw42yStzxLVNnetdabWepvr81xgF9Da14UFE/fmEKsiCrKysgCzimDRokXcfffdtf+mAUqiBYJDbWMM9u/fj3b9cmzbto3CwkKaNm1Kz549OXnyJNnZ2QCsWrWKTp08jR1FjXlz1tX9AcQDPwLRFf59IHAC2A4sBzpX972CfbWMJwcPav3+++bzkSNH6hYtWuiIiAjdunVrPWfOHD1jxgw9Y8YMrbXWmZmZunXr1rphw4Y6JiZGt27dWp8+fVprrXW/fv10x44ddWJiol65cqVNz8b35s3Tum5drTdutLsSURPFxVrPmqV148Zax8ZqPXdu9T/vL774ou7UqZPu2rWr7tOnj163bl3p9/v888/1tddeq7t06aLvu+8+XVBQYNdTCwp4uVpGaS+HmkqpKGAN8Fet9aIKt0UDJVrr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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 训练前的权重\n", + "\n", + "\n", + "W0=sess.run(ff.W[0])\n", + "W1=sess.run(ff.W[1])\n", + "print('W_0:\\n%s' %sess.run(ff.W[0]))\n", + "print('W_1:\\n%s' %sess.run(ff.W[1]))\n", + "\n", + "plt.scatter([1,1,5],[1,3,2],color=['red','red','blue'],s=200,alpha=0.4,marker='o')\n", + "plt.scatter([3,3],[1,3],color=['green','green'],s=200,alpha=0.4,marker='o')\n", + "\n", + "plt.plot([1,3],[1,1],color='orange',linewidth=abs(W0[0,0]))\n", + "plt.annotate('%0.2f' %W0[0,0],xy=(2, 1.0))\n", + "\n", + "plt.plot([1,3],[3,1],color='blue',linewidth=abs(W0[1,0]))\n", + "plt.annotate('%0.2f' %W0[1,0],xy=(1.5, 1.5))\n", + "\n", + "plt.plot([1,3],[1,3],color='blue',linewidth=abs(W0[0,1]))\n", + "plt.annotate('%0.2f' %W0[0,1],xy=(1.5, 2.5))\n", + "\n", + "plt.plot([1,3],[3,3],color='orange',linewidth=abs(W0[1,1]))\n", + "plt.annotate('%0.2f' %W0[1,1],xy=(2, 3))\n", + "\n", + "plt.plot([3,5],[1,2],color='blue',linewidth=abs(W1[0]))\n", + "plt.annotate('%0.2f' %W1[0],xy=(4, 1.5))\n", + "\n", + "plt.plot([3,5],[3,2],color='blue',linewidth=abs(W1[1]))\n", + "plt.annotate('%0.2f' %W1[1],xy=(4, 2.5))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.27575219]\n", + " [ 0.1 ]\n", + " [ 2.0949471 ]\n", + " [ 0.87652308]]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 训练前的输出\n", + "pY=sess.run(ff.output,feed_dict={ff.inputs:X.reshape((4,2)),ff.drop_keep_rate:1.0})\n", + "print(pY)\n", + "plt.scatter([0,1,2,3],pY,color=['red','green','blue','black'],s=25,alpha=0.4,marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.1 0.1 ]\n", + " [ 0. 0. ]\n", + " [ 0.6051594 1.28755772]\n", + " [ 0.23883221 0.50023252]]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 训练前隐藏层的输出\n", + "pY=sess.run(ff.hid_layers[0],feed_dict={ff.inputs:X.reshape((4,2)),ff.drop_keep_rate:1.0})\n", + "print(pY)\n", + "plt.scatter(pY[:,0],pY[:,1],color=['red','green','blue','black'],s=25,alpha=0.4,marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# 训练并记录\n", + "k=0.0\n", + "for i in range(10000):\n", + " k+=1\n", + " summary, _ = sess.run([merged,ff.train_step],feed_dict={ff.inputs:X.reshape((4,2)),ff.labels:Y.reshape((4,1)),ff.drop_keep_rate:1.0})\n", + " train_writer.add_summary(summary, k)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W_0:\n", + "[[ 0.03714262 0.29223838]\n", + " [-0.03218493 -0.29465774]]\n", + "W_1:\n", + "[[ 0.4100056]\n", + " [ 2.2319622]]\n" + ] + }, + { + "data": { + "text/plain": [ + "Text(4,2.5,u'2.23')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 训练后的权重\n", + "\n", + "W0=sess.run(ff.W[0])\n", + "W1=sess.run(ff.W[1])\n", + "print('W_0:\\n%s' %sess.run(ff.W[0]))\n", + "print('W_1:\\n%s' %sess.run(ff.W[1]))\n", + "\n", + "plt.scatter([1,1,5],[1,3,2],color=['red','red','blue'],s=200,alpha=0.4,marker='o')\n", + "plt.scatter([3,3],[1,3],color=['green','green'],s=200,alpha=0.4,marker='o')\n", + "\n", + "plt.plot([1,3],[1,1],color='orange',linewidth=abs(W0[0,0]))\n", + "plt.annotate('%0.2f' %W0[0,0],xy=(2, 1.0))\n", + "\n", + "plt.plot([1,3],[3,1],color='blue',linewidth=abs(W0[1,0]))\n", + "plt.annotate('%0.2f' %W0[1,0],xy=(1.5, 1.5))\n", + "\n", + "plt.plot([1,3],[1,3],color='blue',linewidth=abs(W0[0,1]))\n", + "plt.annotate('%0.2f' %W0[0,1],xy=(1.5, 2.5))\n", + "\n", + "plt.plot([1,3],[3,3],color='orange',linewidth=abs(W0[1,1]))\n", + "plt.annotate('%0.2f' %W0[1,1],xy=(2, 3))\n", + "\n", + "plt.plot([3,5],[1,2],color='blue',linewidth=abs(W1[0]))\n", + "plt.annotate('%0.2f' %W1[0],xy=(4, 1.5))\n", + "\n", + "plt.plot([3,5],[3,2],color='blue',linewidth=abs(W1[1]))\n", + "plt.annotate('%0.2f' %W1[1],xy=(4, 2.5))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.33375549]\n", + " [ 0.33375549]\n", + " [ 0.99873507]\n", + " [ 0.33375549]]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAEpRJREFUeJzt3W2MXOd53vH/Jb40sU2Lkbi2CPFNCehCtOtGzkZ2YaBRKzuRZIhqY6OgPrSl4YRoG8atmxZV2sBJVRQFgqIB0qg1GESWHTSmBdeIaYOC7CS20xaxy2UiKxYl2mu21m4pQ0vKokRJFkXr7ocdSaPlknN2OcvZffT/AQPNc87Nc+5Hh3vx7JmZM6kqJEltuWzUDUiShs9wl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDVo9ah2vGHDhtq2bduodi9JK9Lhw4dPVNXYoLqRhfu2bduYmJgY1e4laUVK8t0udV6WkaQGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDVoYLgnuTvJ40m+eZ71SfLbSSaTPJjkHcNvU9JCPPccHDkCjzwCzz8/6m40Cl0+oXoP8DvAJ8+z/mZge+/xTuC/9v4raQSOH4ePfxyefXZ2fPnl8KEPwZVXjrYvXVoDz9yr6k+BJy5QchvwyZr1NWB9ko3DalDSwnzuc3DZZbB16+zjuefgi18cdVe61IZxzf1qYKpvPN1bdo4ke5JMJJmYmZkZwq4l9Tt7FqanX32WvmEDfOc7o+tJozGMcM88y2q+wqraV1XjVTU+NjbwpmaSFmj1anjzm+HUqVeWPfkkbNkyup40GsMI92lgc994E3B8CNuVtAg7d8Lp0/Dd784+XnwRfvZnR92VLrVh3PL3ALA3yX5mX0g9VVWPDWG7khZh2zb4yEfg29+GVatg+3ZYt27UXelSGxjuST4F3ABsSDIN/DqwBqCqPgYcBG4BJoFngQ8uVbOSulm/Hn76p0fdhUZpYLhX1e0D1hfwS0PrSJJ00fyEqiQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktSgTuGe5KYkR5NMJrljnvVbk/xxkgeTfCXJpuG3KknqamC4J1kF3AXcDOwAbk+yY07ZfwQ+WVVvB+4E/sOwG5UkddflzP16YLKqjlXVGWA/cNucmh3AH/eef3me9ZKkS6hLuF8NTPWNp3vL+n0DeH/v+d8F1iW58uLbkyQtRpdwzzzLas74XwA/k+QvgJ8B/h9w9pwNJXuSTCSZmJmZWXCzkqRuuoT7NLC5b7wJON5fUFXHq+rnq+o64N/0lp2au6Gq2ldV41U1PjY2dhFtS5IupEu4HwK2J7kmyVpgF3CgvyDJhiQvbetXgbuH26YkaSEGhntVnQX2AvcDDwP3VtVDSe5MsrNXdgNwNMm3gDcD/36J+pUkdZCquZfPL43x8fGamJgYyb4laaVKcriqxgfV+QlVSWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1qFO4J7kpydEkk0numGf9liRfTvIXSR5McsvwW5UkdTUw3JOsAu4CbgZ2ALcn2TGn7NeAe6vqOmAX8F+G3agkqbsuZ+7XA5NVdayqzgD7gdvm1BTwxt7zy4Hjw2tRkrRQqzvUXA1M9Y2ngXfOqfkN4ItJfhl4PfCeoXQnSVqULmfumWdZzRnfDtxTVZuAW4DfT3LOtpPsSTKRZGJmZmbh3UqSOukS7tPA5r7xJs697PIh4F6Aqvoz4EeADXM3VFX7qmq8qsbHxsYW17EkaaAu4X4I2J7kmiRrmX3B9MCcmkeBGwGSXMtsuHtqLkkjMjDcq+ossBe4H3iY2XfFPJTkziQ7e2W/Avxikm8AnwJ2V9XcSzeSpEukywuqVNVB4OCcZR/te34EePdwW5MkLZafUJWkBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoM6hXuSm5IcTTKZ5I551v9Wkgd6j28leXL4rUqSulo9qCDJKuAu4L3ANHAoyYGqOvJSTVV9pK/+l4HrlqBXSVJHXc7crwcmq+pYVZ0B9gO3XaD+duBTw2hOkrQ4XcL9amCqbzzdW3aOJFuBa4A/Oc/6PUkmkkzMzMwstFdJUkddwj3zLKvz1O4CPlNVP5xvZVXtq6rxqhofGxvr2qMkaYG6hPs0sLlvvAk4fp7aXXhJRpJGrku4HwK2J7kmyVpmA/zA3KIkfxX4MeDPhtuiJGmhBoZ7VZ0F9gL3Aw8D91bVQ0nuTLKzr/R2YH9Vne+SjSTpEhn4VkiAqjoIHJyz7KNzxr8xvLYkSRfDT6hKUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDeoU7kluSnI0yWSSO85T8/eSHEnyUJI/GG6bkqSFGPgF2UlWAXcB7wWmgUNJDlTVkb6a7cCvAu+uqu8nedNSNSxJGqzLmfv1wGRVHauqM8B+4LY5Nb8I3FVV3weoqseH26YkaSG6hPvVwFTfeLq3rN9bgLck+V9JvpbkpmE1KElauIGXZYDMs6zm2c524AZgE/A/krytqp581YaSPcAegC1btiy4WUlSN13O3KeBzX3jTcDxeWo+V1UvVNX/AY4yG/avUlX7qmq8qsbHxsYW27MkaYAu4X4I2J7kmiRrgV3AgTk1fwj8LYAkG5i9THNsmI1KkrobGO5VdRbYC9wPPAzcW1UPJbkzyc5e2f3AySRHgC8D/7KqTi5V05KkC0vV3Mvnl8b4+HhNTEyMZN+StFIlOVxV44Pq/ISqJDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIa1Cnck9yU5GiSySR3zLN+d5KZJA/0Hr8w/FYlSV2tHlSQZBVwF/BeYBo4lORAVR2ZU/rpqtq7BD1Kkhaoy5n79cBkVR2rqjPAfuC2pW1LknQxuoT71cBU33i6t2yu9yd5MMlnkmweSneSpEXpEu6ZZ1nNGX8e2FZVbwf+CPjEvBtK9iSZSDIxMzOzsE4lSZ11CfdpoP9MfBNwvL+gqk5W1fO94e8CPzXfhqpqX1WNV9X42NjYYvqVJHXQJdwPAduTXJNkLbALONBfkGRj33An8PDwWpQkLdTAd8tU1dkke4H7gVXA3VX1UJI7gYmqOgB8OMlO4CzwBLB7CXuWJA2QqrmXzy+N8fHxmpiYGMm+JWmlSnK4qsYH1fkJVUlqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNahTuCe5KcnRJJNJ7rhA3QeSVJKBX94qSVo6A8M9ySrgLuBmYAdwe5Id89StAz4MfH3YTUqSFqbLmfv1wGRVHauqM8B+4LZ56v4d8JvAD4bYnyRpEbqE+9XAVN94urfsZUmuAzZX1ReG2JskaZG6hHvmWVYvr0wuA34L+JWBG0r2JJlIMjEzM9O9S0nSgnQJ92lgc994E3C8b7wOeBvwlST/F3gXcGC+F1Wral9VjVfV+NjY2OK7liRdUJdwPwRsT3JNkrXALuDASyur6lRVbaiqbVW1DfgasLOqJpakY0nSQAPDvarOAnuB+4GHgXur6qEkdybZudQNSpIWbnWXoqo6CBycs+yj56m94eLbkiRdDD+hKkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBnW4/sKycPQtTU/Dii7BlC6xZM+qOXvPOvniWR089CsCWy7ew+rKV99dKWmpnzpzh0UcfZfXq1WzevJlVq1Yt6f5W1k/hk0/Cxz8OJ07Mjt/4RvjgB+FNbxptX69hJ589yT0P3MMTzz0BwBU/egW7f3I3V77uyhF3Ji0fjz32GPfccw+nT58G4KqrrmL37t2sW7duyfa5si7LfOlLswG/devs44UX4POfH3VXr2n3Td7HMy88w9b1W9m6fivPvPAM903eN+q2pGXls5/9LEnYunUrW7du5fHHH+erX/3qku5zZYX70aOvPksfG4Njx+CHPxxdT69xR08c5U2vf+WYjL1ujKMnjo6wI2l5+cEPfsDx48e54oorXl42NjbGI488sqT7XVnhvnEjPPXUK+Onn4Yrr4Qlvnal87vqDVfx1POvHJOnzzzNxnUbR9iRtLysXbuWdevW8cwzz7y87KmnnmLjxqX9OVlZ4f5zPwfPPz/7gurU1OwlmltvHXVXr2nve8v7OH3mNFOnppg6NcXpM6e5Zfsto25LWjYuu+wybr31Vk6ePMn09DRTU1O8+OKL3HjjjUu631TV4KolMD4+XhMTi/gmvieegCNHZi/FXHutL6YuAyeePcGRmSOEcO3YtWx43YZRtyQtO9/73vd45JFHWLNmDW9961tZv379oraT5HBVnfMd1efUrbhwl6TXsK7hvrIuy0iSOjHcJalBncI9yU1JjiaZTHLHPOv/UZK/TPJAkv+ZZMfwW5UkdTUw3JOsAu4CbgZ2ALfPE95/UFV/rap+EvhN4D8NvVNJUmddztyvByar6lhVnQH2A7f1F1RV35vPeT0wmldpJUlAt3vLXA1M9Y2ngXfOLUryS8A/B9YCf3u+DSXZA+wB2LJly0J7lSR11OXMPfMsO+fMvKruqqqfAP4V8Gvzbaiq9lXVeFWNj42NLaxTSVJnXcJ9GtjcN94EHL9A/X7g71xMU5Kki9Ml3A8B25Nck2QtsAs40F+QZHvf8H3At4fXoiRpoQZec6+qs0n2AvcDq4C7q+qhJHcCE1V1ANib5D3AC8D3gX84aLuHDx8+keS7F9H7BuDERfz55aSVuTiP5aeVubQyD7j4uWztUjSy2w9crCQTXT6CuxK0Mhfnsfy0MpdW5gGXbi5+QlWSGmS4S1KDVnK47xt1A0PUylycx/LTylxamQdcorms2GvukqTzW8ln7pKk81j24d7hjpR/Jcmne+u/nmTbpe9ysA7z2J1kpndnzQeS/MIo+hwkyd1JHk/yzfOsT5Lf7s3zwSTvuNQ9dtVhLjckOdV3TD56qXvsIsnmJF9O8nCSh5L803lqlv1x6TiPlXJMfiTJ/07yjd5c/u08NUubXVW1bB/Mvq/+O8CPM3vPmm8AO+bU/BPgY73nu4BPj7rvRc5jN/A7o+61w1z+JvAO4JvnWX8LcB+zt614F/D1Ufd8EXO5AfjCqPvsMI+NwDt6z9cB35rn79eyPy4d57FSjkmAN/SerwG+DrxrTs2SZtdyP3MfeEfK3vgTveefAW5MMt/9cEapyzxWhKr6U+CJC5TcBnyyZn0NWJ9kab/mfZE6zGVFqKrHqurPe8+fBh5m9oZ//Zb9cek4jxWh9//5dG+4pveY+wLnkmbXcg/3+e5IOfdgv1xTVWeBU8CVl6S77rrMA+D9vV+ZP5Nk8zzrV4Kuc10p/kbvV+v7krx11M0M0vvV/jpmzxT7rajjcoF5wAo5JklWJXkAeBz4UlWd95gsRXYt93DvckfKTnetHLEuPX4e2FZVbwf+iFf+RV9pVsLx6OrPga1V9deB/wz84Yj7uaAkbwD+O/DP6tXfsQAr6LgMmMeKOSZV9cOa/QKjTcD1Sd42p2RJj8lyD/cud6R8uSbJauBylt+v2gPnUVUnq+r53vB3gZ+6RL0N20LvIrpsVdVTL/1qXVUHgTVJNoy4rXklWcNsIP63qvrsPCUr4rgMmsdKOiYvqaonga8AN81ZtaTZtdzDfeAdKXvjl25U9gHgT6r3CsUy0uXOmv3XP3cye71xJToA/IPeuzPeBZyqqsdG3dRiJLnqpWugSa5n9ufl5Gi7Olevx98DHq6q833F5bI/Ll3msYKOyViS9b3nPwq8B3hkTtmSZleXb2Iamep2R8rfA34/ySSz/+rtGl3H8+s4jw8n2QmcZXYeu0fW8AUk+RSz71jYkGQa+HVmXyyiqj4GHGT2nRmTwLPAB0fT6WAd5vIB4B8nOQs8B+xahicOAO8G/j7wl71rvAD/GtgCK+q4dJnHSjkmG4FPZPY7qC8D7q2qL1zK7PITqpLUoOV+WUaStAiGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDfr/QeE0XVEjaZ0AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 训练后的输出\n", + "pY=sess.run(ff.output,feed_dict={ff.inputs:X.reshape((4,2)),ff.drop_keep_rate:1.0})\n", + "print(pY)\n", + "plt.scatter([0,1,2,3],pY,color=['red','green','blue','black'],s=25,alpha=0.4,marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [ 0.03147838 0.29215246]\n", + " [ 0. 0. ]]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 训练后隐藏层的输出\n", + "pY=sess.run(ff.hid_layers[0],feed_dict={ff.inputs:X.reshape((4,2)),ff.drop_keep_rate:1.0})\n", + "\n", + "print(pY)\n", + "plt.scatter(pY[:,0],pY[:,1],color=['red','green','blue','black'],s=25,alpha=0.4,marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[array([[-0.82895017, 0.82891428],\n", + " [ 0.82915729, -0.82918972]], dtype=float32), array([[ 1.17231631],\n", + " [ 1.1722393 ]], dtype=float32), array([ 0., 0.], dtype=float32), array([ 0.], dtype=float32)]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 该操作可以用于读取已经训练好的权重W和b\n", + "# 每层W想要读取的值\n", + "W_0=np.array([[-0.82895017,0.82891428],[ 0.82915729,-0.82918972]],dtype='float32')\n", + "W_1=np.array([[ 1.17231631],[ 1.1722393 ]],dtype='float32')\n", + "# 每层b想要读取的值\n", + "b_0=np.array([0,0],dtype='float32')\n", + "b_1=np.array([0],dtype='float32')\n", + "# 读取ops\n", + "reload1=tf.assign(ff.W[0],W_0)\n", + "reload2=tf.assign(ff.W[1],W_1)\n", + "reload3=tf.assign(ff.b[0],b_0)\n", + "reload4=tf.assign(ff.b[1],b_1)\n", + "# 执行ops\n", + "sess.run([reload1,reload2,reload3,reload4])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#用完关闭session\n", + "sess.close()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.14" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/.ipynb_checkpoints/core_code-checkpoint.ipynb b/.ipynb_checkpoints/core_code-checkpoint.ipynb new file mode 100644 index 0000000..8e27453 --- /dev/null +++ b/.ipynb_checkpoints/core_code-checkpoint.ipynb @@ -0,0 +1,159 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import numpy as np\n", + "tf.set_random_seed(55)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "#构建网络\n", + "D_input = 2\n", + "D_label = 1\n", + "D_hidden = 2\n", + "lr=1e-4\n", + "\n", + "x = tf.placeholder(tf.float32, [None, D_input], name=\"x\")\n", + "t = tf.placeholder(tf.float32, [None, D_label], name=\"t\")\n", + " \n", + "W_h1 = tf.Variable(tf.truncated_normal([D_input, D_hidden], stddev=0.1), name=\"W_h\")\n", + "b_h1 = tf.Variable(tf.constant(0.1, shape=[D_hidden]), name=\"b_h\")\n", + "pre_act_h1 = tf.matmul(x, W_h1) + b_h1\n", + "act_h1 = tf.nn.relu(pre_act_h1, name='act_h')\n", + " \n", + "W_o = tf.Variable(tf.truncated_normal([D_hidden, D_label], stddev=0.1), name=\"W_o\")\n", + "b_o = tf.Variable(tf.constant(0.1, shape=[D_label]), name=\"b_o\")\n", + "pre_act_o = tf.matmul(act_h1, W_o) + b_o\n", + "y = tf.nn.relu(pre_act_o, name='act_y')\n", + " \n", + "loss=tf.reduce_mean((y-t)**2)\n", + " \n", + "train_step = tf.train.AdamOptimizer(lr).minimize(loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "#生成数据\n", + "X=[[0,0],[0,1],[1,0],[1,1]]\n", + "Y=[[0],[1],[1],[0]]\n", + "X=np.array(X).astype('int16')\n", + "Y=np.array(Y).astype('int16')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "#加载\n", + "sess = tf.InteractiveSession()\n", + "sess.run(tf.global_variables_initializer())" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "#训练\n", + "for i in range(20000):\n", + " sess.run(train_step,feed_dict={x:X,t:Y} )" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.01419991],\n", + " [ 0.97204113],\n", + " [ 0.97204131],\n", + " [ 0.04118853]], dtype=float32)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#计算预测值\n", + "sess.run(y,feed_dict={x:X})" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.96414495, 1.01730847],\n", + " [ 0. , 0.50864619],\n", + " [ 0. , 0.50864631],\n", + " [ 0. , 0. ]], dtype=float32)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#查看隐藏层的输出\n", + "sess.run(act_h1,feed_dict={x:X})" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "#用完关闭session\n", + "sess.close()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.14" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/FNN.py b/FNN.py index 360aa91..939ca05 100644 --- a/FNN.py +++ b/FNN.py @@ -66,13 +66,13 @@ def bias_init(self,shape): def variable_summaries(self, var, name): with tf.name_scope(name+'_summaries'): mean = tf.reduce_mean(var) - tf.scalar_summary('mean/' + name, mean) + tf.summary.scalar('mean/' + name, mean) with tf.name_scope(name+'_stddev'): stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean))) - tf.scalar_summary('_stddev/' + name, stddev) - tf.scalar_summary('_max/' + name, tf.reduce_max(var)) - tf.scalar_summary('_min/' + name, tf.reduce_min(var)) - tf.histogram_summary(name, var) + tf.summary.scalar('_stddev/' + name, stddev) + tf.summary.scalar('_max/' + name, tf.reduce_max(var)) + tf.summary.scalar('_min/' + name, tf.reduce_min(var)) + tf.summary.histogram(name, var) def layer(self,in_tensor, in_dim, out_dim, layer_name, act=tf.nn.relu): with tf.name_scope(layer_name): @@ -85,9 +85,9 @@ def layer(self,in_tensor, in_dim, out_dim, layer_name, act=tf.nn.relu): self.variable_summaries(biases, layer_name + '/biases') with tf.name_scope(layer_name+'_Wx_plus_b'): pre_activate = tf.matmul(in_tensor, weights) + biases - tf.histogram_summary(layer_name + '/pre_activations', pre_activate) + tf.summary.histogram(layer_name + '/pre_activations', pre_activate) activations = act(pre_activate, name='activation') - tf.histogram_summary(layer_name + '/activations', activations) + tf.summary.histogram(layer_name + '/activations', activations) return activations, tf.nn.l2_loss(weights) def drop_layer(self,in_tensor): @@ -129,25 +129,25 @@ def build(self, prefix): with tf.name_scope('total_l2'): for l2 in self.total_l2: self.l2_penalty+=l2 - tf.scalar_summary('l2_penalty', self.l2_penalty) + tf.summary.scalar_('l2_penalty', self.l2_penalty) if self.Task_type=='regression': with tf.name_scope('SSE'): self.loss=tf.reduce_mean(tf.nn.l2_loss((self.output - self.labels))) - tf.scalar_summary('loss', self.loss) + tf.summary.scalar('loss', self.loss) else: entropy = tf.nn.softmax_cross_entropy_with_logits(logits=self.output, labels=self.labels) with tf.name_scope('cross entropy'): self.loss = tf.reduce_mean(entropy) - tf.scalar_summary('loss', self.loss) + tf.summary.scalar('loss', self.loss) with tf.name_scope('accuracy'): correct_prediction = tf.equal(tf.argmax(self.output, 1), tf.argmax(self.labels, 1)) self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) - tf.scalar_summary('accuracy', self.accuracy) + tf.summary.scalar('accuracy', self.accuracy) with tf.name_scope('total_loss'): self.total_loss=self.loss + self.l2_penalty*self.L2_lambda - tf.scalar_summary('total_loss', self.total_loss) + tf.summary.scalar_('total_loss', self.total_loss) #train with tf.name_scope('train'): diff --git a/LV3.ipynb b/LV3.ipynb index c56d791..db9d9e1 100644 --- a/LV3.ipynb +++ b/LV3.ipynb @@ -11,15 +11,14 @@ "import tensorflow as tf\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "%matplotlib inline" + "%matplotlib inline\n", + "tf.reset_default_graph()" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "class FNN(object):\n", @@ -86,14 +85,14 @@ " def variable_summaries(self, var, name):\n", " with tf.name_scope(name+'_summaries'):\n", " mean = tf.reduce_mean(var)\n", - " tf.scalar_summary('mean/' + name, mean)\n", + " tf.summary.scalar('mean/' + name, mean)\n", " with tf.name_scope(name+'_stddev'):\n", " stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))\n", " # 记录每次训练后变量的数值变化\n", - " tf.scalar_summary('_stddev/' + name, stddev)\n", - " tf.scalar_summary('_max/' + name, tf.reduce_max(var))\n", - " tf.scalar_summary('_min/' + name, tf.reduce_min(var))\n", - " tf.histogram_summary(name, var)\n", + " tf.summary.scalar('_stddev/' + name, stddev)\n", + " tf.summary.scalar_('_max/' + name, tf.reduce_max(var))\n", + " tf.summary.scalar_('_min/' + name, tf.reduce_min(var))\n", + " tf.summary.histogram(name, var)\n", "\n", " def layer(self,in_tensor, in_dim, out_dim, layer_name, act=tf.nn.relu):\n", " with tf.name_scope(layer_name):\n", @@ -113,10 +112,10 @@ " # 计算Wx+b\n", " pre_activate = tf.matmul(in_tensor, weights) + biases\n", " # 记录直方图\n", - " tf.histogram_summary(layer_name + '/pre_activations', pre_activate)\n", + " tf.summary.histogram(layer_name + '/pre_activations', pre_activate)\n", " # 计算a(Wx+b)\n", " activations = act(pre_activate, name='activation')\n", - " tf.histogram_summary(layer_name + '/activations', activations)\n", + " tf.summary.histogram(layer_name + '/activations', activations)\n", " # 最终返回该层的输出,以及权重W的L2\n", " return activations, tf.nn.l2_loss(weights)\n", "\n", @@ -174,7 +173,7 @@ " with tf.name_scope('total_l2'):\n", " for l2 in self.total_l2:\n", " self.l2_penalty+=l2\n", - " tf.scalar_summary('l2_penalty', self.l2_penalty)\n", + " tf.summary.scalar('l2_penalty', self.l2_penalty)\n", " \n", " # 不同任务的loss\n", " # 若为回归,则loss是用于判断所有预测值和实际值差别的函数。\n", @@ -183,22 +182,22 @@ " self.loss=tf.reduce_mean((self.output-self.labels)**2)\n", " self.loss2=tf.nn.l2_loss(self.output-self.labels)\n", " \n", - " tf.scalar_summary('loss', self.loss)\n", + " tf.summary.scalar('loss', self.loss)\n", " else:\n", " # 若为分类,cross entropy的loss function\n", " entropy = tf.nn.softmax_cross_entropy_with_logits(self.output, self.labels)\n", " with tf.name_scope('cross entropy'):\n", " self.loss = tf.reduce_mean(entropy)\n", - " tf.scalar_summary('loss', self.loss)\n", + " tf.summary.scalar('loss', self.loss)\n", " with tf.name_scope('accuracy'):\n", " correct_prediction = tf.equal(tf.argmax(self.output, 1), tf.argmax(self.labels, 1))\n", " self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", - " tf.scalar_summary('accuracy', self.accuracy)\n", + " tf.summary.scalar('accuracy', self.accuracy)\n", " \n", " # 整合所有loss,形成最终loss\n", " with tf.name_scope('total_loss'):\n", " self.total_loss=self.loss + self.l2_penalty*self.L2_lambda\n", - " tf.scalar_summary('total_loss', self.total_loss)\n", + " tf.summary.scalar('total_loss', self.total_loss)\n", " \n", " # 训练操作\n", " with tf.name_scope('train'):\n", @@ -263,9 +262,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -282,9 +279,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -319,18 +314,16 @@ "outputs": [], "source": [ "sess = tf.InteractiveSession()\n", - "tf.initialize_all_variables().run()\n", - "merged = tf.merge_all_summaries()\n", - "train_writer = tf.train.SummaryWriter('log3' + '/train',sess.graph)\n", - "test_writer = tf.train.SummaryWriter('log3' + '/test')" + "sess.run(tf.global_variables_initializer())\n", + "merged = tf.summary.merge_all()\n", + "train_writer = tf.summary.FileWriter('log3' + '/train',sess.graph)\n", + "test_writer = tf.summary.FileWriter('log3' + '/test')" ] }, { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def plots(T,P,i, n=21,length=400):\n", @@ -360,7 +353,6 @@ "cell_type": "code", "execution_count": 9, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -439,6 +431,16 @@ " test_writer.add_summary(summary, k)\n", " print('epoch%s | train_loss:%s |test_loss:%s' %(i,sess.run(ff.loss,feed_dict={ff.inputs:X0,ff.labels:Y0,ff.drop_keep_rate:1.0}),sess.run(ff.loss,feed_dict={ff.inputs:X_test,ff.labels:Y_test,ff.drop_keep_rate:1.0})))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#用完关闭session\n", + "sess.close()" + ] } ], "metadata": { @@ -457,7 +459,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.12" + "version": "2.7.14" } }, "nbformat": 4, diff --git a/LV3_0.12.ipynb b/LV3_0.12.ipynb index 2e6a763..6b100f6 100644 --- a/LV3_0.12.ipynb +++ b/LV3_0.12.ipynb @@ -3,23 +3,20 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "%matplotlib inline" + "%matplotlib inline\n", + "tf.reset_default_graph()" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "class FNN(object):\n", @@ -222,9 +219,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def Standardize(seq):\n", @@ -245,9 +240,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mfc=np.load('X.npy')\n", @@ -269,9 +262,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -287,9 +278,8 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -410,14 +400,12 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [], "source": [ "sess = tf.InteractiveSession()\n", - "tf.global_variables_initializer().run()\n", + "sess.run(tf.global_variables_initializer())\n", "merged = tf.summary.merge_all()\n", "train_writer = tf.summary.FileWriter('log' + '/train',sess.graph)\n", "test_writer = tf.summary.FileWriter('log' + '/test')" @@ -425,10 +413,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [], "source": [ "def plots(T,P,i, n=21,length=400):\n", @@ -456,9 +442,8 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -466,16 +451,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "epoch0 | train_loss:[0.60085243] |test_loss:0.659336\n", - "epoch1 | train_loss:[0.56255817] |test_loss:0.653993\n", - "epoch2 | train_loss:[0.53966987] |test_loss:0.644001\n", - "epoch3 | train_loss:[0.47888839] |test_loss:0.609307\n", - "epoch4 | train_loss:[0.4274255] |test_loss:0.580894\n", - "epoch5 | train_loss:[0.41663638] |test_loss:0.58645\n", - "epoch6 | train_loss:[0.39932683] |test_loss:0.594072\n", - "epoch7 | train_loss:[0.35524291] |test_loss:0.57222\n", - "epoch8 | train_loss:[0.35336751] |test_loss:0.565518\n", - "epoch9 | train_loss:[0.30439419] |test_loss:0.545433\n" + "epoch0 | train_loss:[0.85698944] |test_loss:0.849185\n", + "epoch1 | train_loss:[0.75586188] |test_loss:0.74935\n", + "epoch2 | train_loss:[0.66804069] |test_loss:0.697456\n", + "epoch3 | train_loss:[0.59767956] |test_loss:0.649171\n", + "epoch4 | train_loss:[0.57731116] |test_loss:0.652371\n", + "epoch5 | train_loss:[0.5061782] |test_loss:0.596573\n", + "epoch6 | train_loss:[0.46441522] |test_loss:0.595333\n", + "epoch7 | train_loss:[0.40969208] |test_loss:0.555003\n", + "epoch8 | train_loss:[0.40397146] |test_loss:0.573359\n", + "epoch9 | train_loss:[0.37393975] |test_loss:0.553064\n" ] } ], @@ -502,10 +487,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 10, + "metadata": {}, "outputs": [], "source": [ "#用完关闭session\n", @@ -529,7 +512,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.12" + "version": "2.7.14" } }, "nbformat": 4, diff --git a/RNN/.DS_Store b/RNN/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/RNN/.DS_Store differ diff --git a/RNN/.ipynb_checkpoints/BGRU_BLSTM_scan_LV2-checkpoint.ipynb b/RNN/.ipynb_checkpoints/BGRU_BLSTM_scan_LV2-checkpoint.ipynb new file mode 100644 index 0000000..fe0b715 --- /dev/null +++ b/RNN/.ipynb_checkpoints/BGRU_BLSTM_scan_LV2-checkpoint.ipynb @@ -0,0 +1,724 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import numpy as np\n", + "import time\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "tf.set_random_seed(55)\n", + "np.random.seed(55)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "class LSTMcell(object):\n", + " \"\"\"\n", + " create parameters and step function\n", + " \"\"\"\n", + " def __init__(self, incoming, D_input, D_cell, initializer,\n", + " f_bias=1.0, L2=False, h_act=tf.tanh, \n", + " init_h=None, init_c=None):\n", + " \n", + " # var\n", + " self.incoming = incoming\n", + " self.D_input = D_input\n", + " self.D_cell = D_cell\n", + " self.initializer = initializer\n", + " self.f_bias = f_bias\n", + " self.h_act = h_act\n", + " self.type = 'lstm'\n", + " \n", + " if init_h is None and init_c is None:\n", + " # If init_h and init_c are not provided, initialize them\n", + " # the shape of init_h and init_c is [n_samples, D_cell]\n", + " self.init_h = tf.matmul(self.incoming[0,:,:], tf.zeros([self.D_input, self.D_cell]))\n", + " self.init_c = self.init_h\n", + " self.previous = tf.stack([self.init_h, self.init_c])\n", + " \n", + " # parameters, each of which has W_x W_h b_f\n", + " self.igate = self.Gate()\n", + " self.fgate = self.Gate(bias = f_bias)\n", + " self.ogate = self.Gate()\n", + " self.cell = self.Gate()\n", + " \n", + " # to speed up computation. W_x has the shape of [D_input, 4*D_cell]\n", + " self.W_x = tf.concat(values=[self.igate[0], self.fgate[0], self.ogate[0], self.cell[0]], axis=1)\n", + " self.W_h = tf.concat(values=[self.igate[1], self.fgate[1], self.ogate[1], self.cell[1]], axis=1)\n", + " self.b = tf.concat(values=[self.igate[2], self.fgate[2], self.ogate[2], self.cell[2]], axis=0)\n", + " \n", + " if L2:\n", + " self.L2_loss = tf.nn.l2_loss(self.W_x) + tf.nn.l2_loss(self.W_h)\n", + " \n", + " def Gate(self, bias = 0.001):\n", + " # Since we will use gate multiple times, let's code a class for reusing\n", + " Wx = self.initializer([self.D_input, self.D_cell])\n", + " Wh = self.initializer([self.D_cell, self.D_cell])\n", + " b = tf.Variable(tf.constant(bias, shape=[self.D_cell]),trainable=True) \n", + " return Wx, Wh, b\n", + "\n", + " def Slice_W(self, x, n):\n", + " # split W's after computing\n", + " return x[:, n*self.D_cell:(n+1)*self.D_cell] \n", + " \n", + " def Step(self, previous_h_c_tuple, current_x):\n", + " \n", + " # to split hidden state and cell\n", + " prev_h, prev_c = tf.unstack(previous_h_c_tuple)\n", + " \n", + " # computing all gates\n", + " gates = tf.matmul(current_x, self.W_x) + tf.matmul(prev_h, self.W_h) + self.b\n", + " \n", + " # computing\n", + " # input gate\n", + " i = tf.sigmoid(self.Slice_W(gates, 0))\n", + " # forget Gate\n", + " f = tf.sigmoid(self.Slice_W(gates, 1))\n", + " # output Gate\n", + " o = tf.sigmoid(self.Slice_W(gates, 2))\n", + " # new cell info\n", + " c = tf.tanh(self.Slice_W(gates, 3))\n", + " # current cell \n", + " current_c = f*prev_c + i*c\n", + " # current hidden state\n", + " current_h = o*self.h_act(current_c)\n", + "\n", + " return tf.stack([current_h, current_c])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class GRUcell(object):\n", + " \"\"\"\n", + " create parameters and step function\n", + " \"\"\"\n", + " def __init__(self, incoming, D_input, D_cell, initializer, L2=False, init_h=None):\n", + " \n", + " # var\n", + " self.incoming = incoming\n", + " self.D_input = D_input\n", + " self.D_cell = D_cell\n", + " self.initializer = initializer\n", + " self.type = 'gru'\n", + "\n", + " if init_h is None:\n", + " # If init_h is not provided, initialize it\n", + " # the shape of init_h is [n_samples, D_cell]\n", + " self.init_h = tf.matmul(self.incoming[0,:,:], tf.zeros([self.D_input, self.D_cell]))\n", + " self.previous = self.init_h\n", + " \n", + " # parameters, each of which has W_x W_h b_f\n", + " self.rgate = self.Gate()\n", + " self.ugate = self.Gate()\n", + " self.cell = self.Gate()\n", + " \n", + " # to speed up computation. W_x has the shape of [D_input, 3*D_cell]\n", + " self.W_x = tf.concat(values=[self.rgate[0], self.ugate[0], self.cell[0]], axis=1)\n", + " self.W_h = tf.concat(values=[self.rgate[1], self.ugate[1], self.cell[1]], axis=1)\n", + " self.b = tf.concat(values=[self.rgate[2], self.ugate[2], self.cell[2]], axis=0)\n", + " \n", + " if L2:\n", + " self.L2_loss = tf.nn.l2_loss(self.W_x) + tf.nn.l2_loss(self.W_h)\n", + " \n", + " def Gate(self, bias = 0.001):\n", + " # Since we will use gate multiple times, let's code a class for reusing\n", + " Wx = self.initializer([self.D_input, self.D_cell])\n", + " Wh = self.initializer([self.D_cell, self.D_cell])\n", + " b = tf.Variable(tf.constant(bias, shape=[self.D_cell]),trainable=True) \n", + " return Wx, Wh, b\n", + " \n", + " def Slice_W(self, x, n):\n", + " # split W's after computing\n", + " return x[:, n*self.D_cell:(n+1)*self.D_cell] \n", + " \n", + " def Step(self, prev_h, current_x):\n", + " \n", + " Wx = tf.matmul(current_x, self.W_x) + self.b\n", + " Wh = tf.matmul(prev_h, self.W_h)\n", + " \n", + " r = tf.sigmoid(self.Slice_W(Wx, 0) + self.Slice_W(Wh, 0))\n", + " u = tf.sigmoid(self.Slice_W(Wx, 1) + self.Slice_W(Wh, 1))\n", + " \n", + " c = tf.tanh(self.Slice_W(Wx, 2) + r*self.Slice_W(Wh, 2))\n", + " \n", + " current_h = (1-u)*prev_h + u*c\n", + " \n", + " return current_h " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def RNN(cell, cell_b=None, merge='sum'):\n", + " \"\"\"\n", + " Note that the input shape should be [n_steps, n_sample, D_output],\n", + " and the output shape will also be [n_steps, n_sample, D_output].\n", + " If the original data has a shape of [n_sample, n_steps, D_input],\n", + " use 'inputs_T = tf.transpose(inputs, perm=[1,0,2])'.\n", + " \"\"\"\n", + "\n", + " # forward rnn loop\n", + " hstates = tf.scan(fn = cell.Step,\n", + " elems = cell.incoming,\n", + " initializer = cell.previous,\n", + " name = 'hstates')\n", + " if cell.type == 'lstm':\n", + " hstates = hstates[:,0,:,:]\n", + " # reverse the input sequence\n", + " if cell_b is not None:\n", + " incoming_b = tf.reverse(cell.incoming, axis=[0])\n", + " \n", + " # backward rnn loop\n", + " b_hstates_rev = tf.scan(fn = cell_b.Step,\n", + " elems = incoming_b,\n", + " initializer = cell_b.previous,\n", + " name = 'b_hstates')\n", + " if cell_b.type == 'lstm':\n", + " b_hstates_rev = b_hstates_rev[:,0,:,:]\n", + " \n", + " b_hstates = tf.reverse(b_hstates_rev, axis=[0])\n", + " \n", + " if merge == 'sum':\n", + " hstates = hstates + b_hstates\n", + " else:\n", + " hstates = tf.concat(values=[hstates, b_hstates], axis=2)\n", + " return hstates" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "num of train sequences:83\n", + "num of test sequences:20\n", + "('shape of inputs:', (1, 886, 39))\n", + "('shape of labels:', (886, 24))\n" + ] + } + ], + "source": [ + "def weight_init(shape):\n", + " initial = tf.random_uniform(shape,minval=-np.sqrt(5)*np.sqrt(1.0/shape[0]), maxval=np.sqrt(5)*np.sqrt(1.0/shape[0]))\n", + " return tf.Variable(initial,trainable=True)\n", + "def zero_init(shape):\n", + " initial = tf.Variable(tf.zeros(shape))\n", + " return tf.Variable(initial,trainable=True)\n", + "def orthogonal_initializer(shape,scale = 1.0):\n", + " #https://github.com/Lasagne/Lasagne/blob/master/lasagne/init.py\n", + " flat_shape = (shape[0], np.prod(shape[1:]))\n", + " a = np.random.normal(0.0, 1.0, flat_shape)\n", + " u, _, v = np.linalg.svd(a, full_matrices=False)\n", + " q = u if u.shape == flat_shape else v\n", + " q = q.reshape(shape) #this needs to be corrected to float32\n", + " return tf.Variable(scale * q[:shape[0], :shape[1]], dtype=tf.float32,trainable=True)\n", + "def bias_init(shape):\n", + " initial = tf.constant(0.01, shape=shape)\n", + " return tf.Variable(initial,trainable=True)\n", + "def shufflelists(data):\n", + " ri=np.random.permutation(len(data))\n", + " data=[data[i] for i in ri]\n", + " return data\n", + "def Standardize(seq):\n", + " #subtract mean\n", + " centerized=seq-np.mean(seq, axis = 0)\n", + " #divide standard deviation\n", + " normalized=centerized/np.std(centerized, axis = 0)\n", + " return normalized\n", + "mfc=np.load('X.npy',encoding='latin1')\n", + "art=np.load('Y.npy',encoding='latin1')\n", + "totalsamples=len(mfc)\n", + "vali_size=0.2\n", + "def data_prer(X, Y):\n", + " D_input=X[0].shape[1]\n", + " D_output=24\n", + " data=[]\n", + " for x,y in zip(X,Y):\n", + " data.append([Standardize(x).reshape((1,-1,D_input)).astype(\"float32\"),\n", + " Standardize(y).astype(\"float32\")])\n", + " return data\n", + "data=data_prer(mfc, art)\n", + "train=data[int(totalsamples*vali_size):]\n", + "test=data[:int(totalsamples*vali_size)]\n", + "print('num of train sequences:%s' %len(train))\n", + "print('num of test sequences:%s' %len(test))\n", + "print('shape of inputs:' ,test[0][0].shape)\n", + "print('shape of labels:' ,test[0][1].shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "D_input = 39\n", + "D_label = 24\n", + "learning_rate = 7e-5\n", + "num_units=1024\n", + "L2_penalty = 1e-4\n", + "inputs = tf.placeholder(tf.float32, [None, None, D_input], name=\"inputs\")\n", + "labels = tf.placeholder(tf.float32, [None, D_label], name=\"labels\")\n", + "drop_keep_rate = tf.placeholder(tf.float32, name=\"dropout_keep\")\n", + "\n", + "n_steps = tf.shape(inputs)[1]\n", + "n_samples = tf.shape(inputs)[0]\n", + "\n", + "# reshape for dense layer: [n_samples, n_steps, D_input] to [n_samples*n_steps, D_input]\n", + "# first layer\n", + "re1 = tf.reshape(inputs, [-1, D_input])\n", + "Wf0 = weight_init([D_input, num_units])\n", + "bf0 = bias_init([num_units])\n", + "h1 = tf.nn.relu(tf.matmul(re1, Wf0) + bf0)\n", + "# dropout\n", + "h1d = tf.nn.dropout(h1, drop_keep_rate)\n", + "# second layer\n", + "Wf1 = weight_init([num_units, num_units])\n", + "bf1 = bias_init([num_units])\n", + "h2 = tf.nn.relu(tf.matmul(h1d, Wf1) + bf1)\n", + "# dropout\n", + "h2d = tf.nn.dropout(h2, drop_keep_rate)\n", + "# reshape for lstm: [n_samples*n_steps, D_input] to [n_samples, n_steps, D_input]\n", + "re2 = tf.reshape(h2d, [n_samples,n_steps, num_units])\n", + "\n", + "inputs_T = tf.transpose(re2, perm=[1,0,2])\n", + "\n", + "# lstm\n", + "#rnn_fcell = LSTMcell(inputs_T, num_units, num_units, zero_init, f_bias=1.0)\n", + "#rnn_bcell = LSTMcell(inputs_T, num_units, num_units, zero_init, f_bias=1.0)\n", + "rnn_fcell = GRUcell(inputs_T, num_units, num_units, orthogonal_initializer)\n", + "rnn_bcell = GRUcell(inputs_T, num_units, num_units, orthogonal_initializer)\n", + "rnn0 = RNN(rnn_fcell, rnn_bcell)\n", + "\n", + "#cell = Bi_LSTM_cell(inputs_T, num_units, num_units, 1)\n", + "#rnn0 = cell.get_states()\n", + "\n", + "# reshape for output layer\n", + "rnn1 = tf.reshape(rnn0, [-1, num_units])\n", + "\n", + "rnn2 = tf.nn.dropout(rnn1, drop_keep_rate)\n", + "\n", + "# third layer\n", + "W0 = weight_init([num_units, num_units])\n", + "b0 = bias_init([num_units])\n", + "rnn3 = tf.nn.relu(tf.matmul(rnn2, W0) + b0)\n", + "rnn4 = tf.nn.dropout(rnn3, drop_keep_rate)\n", + "# fourth layer\n", + "W1 = weight_init([num_units, num_units])\n", + "b1 = bias_init([num_units])\n", + "rnn5 = tf.nn.relu(tf.matmul(rnn4, W1) + b1)\n", + "rnn6 = tf.nn.dropout(rnn5, drop_keep_rate)\n", + "\n", + "# output layer\n", + "W = weight_init([num_units, D_label])\n", + "b = bias_init([D_label])\n", + "output = tf.matmul(rnn6, W) + b\n", + "\n", + "loss=tf.reduce_mean((output-labels)**2)\n", + "L2_total = tf.nn.l2_loss(Wf0) + tf.nn.l2_loss(Wf1)+ tf.nn.l2_loss(W0) + tf.nn.l2_loss(W1) + tf.nn.l2_loss(W)#+ rnn_fcell.L2_loss + rnn_bcell.L2_loss \n", + "\n", + "train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss + L2_penalty*L2_total)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "sess = tf.InteractiveSession()\n", + "tf.global_variables_initializer().run()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# 训练并记录\n", + "def train_epoch(EPOCH):\n", + " for k in range(EPOCH):\n", + " train0=shufflelists(train)\n", + " for i in range(len(train)):\n", + " sess.run(train_step,feed_dict={inputs:train0[i][0],labels:train0[i][1],drop_keep_rate:0.7})\n", + " tl=0\n", + " dl=0\n", + " for i in range(len(test)):\n", + " dl+=sess.run(loss,feed_dict={inputs:test[i][0],labels:test[i][1],drop_keep_rate:1.0})\n", + " for i in range(len(train)):\n", + " tl+=sess.run(loss,feed_dict={inputs:train[i][0],labels:train[i][1],drop_keep_rate:1.0})\n", + " print(k,'train:',round(tl/83,3),'test:',round(dl/20,3))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0, 'train:', 0.793, 'test:', 0.811)\n", + "(1, 'train:', 0.697, 'test:', 0.722)\n", + "(2, 'train:', 0.605, 'test:', 0.636)\n", + "(3, 'train:', 0.542, 'test:', 0.579)\n", + "(4, 'train:', 0.471, 'test:', 0.509)\n", + "(5, 'train:', 0.427, 'test:', 0.471)\n", + "(6, 'train:', 0.397, 'test:', 0.452)\n", + "(7, 'train:', 0.367, 'test:', 0.42)\n", + "(8, 'train:', 0.344, 'test:', 0.41)\n", + "(9, 'train:', 0.326, 'test:', 0.408)\n", + "(10, 'train:', 0.292, 'test:', 0.378)\n", + "(11, 'train:', 0.271, 'test:', 0.365)\n", + "(12, 'train:', 0.256, 'test:', 0.358)\n", + "(13, 'train:', 0.252, 'test:', 0.364)\n", + "(14, 'train:', 0.25, 'test:', 0.359)\n", + "(15, 'train:', 0.23, 'test:', 0.35)\n", + "(16, 'train:', 0.211, 'test:', 0.332)\n", + "(17, 'train:', 0.205, 'test:', 0.332)\n", + "(18, 'train:', 0.203, 'test:', 0.334)\n", + "(19, 'train:', 0.205, 'test:', 0.338)\n", + "(20, 'train:', 0.191, 'test:', 0.324)\n", + "(21, 'train:', 0.182, 'test:', 0.324)\n", + "(22, 'train:', 0.183, 'test:', 0.328)\n", + "(23, 'train:', 0.17, 'test:', 0.311)\n", + "(24, 'train:', 0.173, 'test:', 0.316)\n", + "(25, 'train:', 0.171, 'test:', 0.315)\n", + "(26, 'train:', 0.171, 'test:', 0.321)\n", + "(27, 'train:', 0.156, 'test:', 0.303)\n", + "(28, 'train:', 0.151, 'test:', 0.301)\n", + "(29, 'train:', 0.151, 'test:', 0.3)\n", + "(30, 'train:', 0.158, 'test:', 0.313)\n", + "(31, 'train:', 0.144, 'test:', 0.295)\n", + "(32, 'train:', 0.149, 'test:', 0.305)\n", + "(33, 'train:', 0.144, 'test:', 0.304)\n", + "(34, 'train:', 0.147, 'test:', 0.307)\n", + "(35, 'train:', 0.136, 'test:', 0.297)\n", + "(36, 'train:', 0.134, 'test:', 0.297)\n", + "(37, 'train:', 0.134, 'test:', 0.295)\n", + "(38, 'train:', 0.125, 'test:', 0.292)\n", + "(39, 'train:', 0.127, 'test:', 0.29)\n", + "(40, 'train:', 0.127, 'test:', 0.292)\n", + "(41, 'train:', 0.125, 'test:', 0.293)\n", + "(42, 'train:', 0.124, 'test:', 0.291)\n", + "(43, 'train:', 0.12, 'test:', 0.284)\n", + "(44, 'train:', 0.117, 'test:', 0.285)\n", + "(45, 'train:', 0.111, 'test:', 0.281)\n", + "(46, 'train:', 0.118, 'test:', 0.288)\n", + "(47, 'train:', 0.128, 'test:', 0.3)\n", + "(48, 'train:', 0.107, 'test:', 0.279)\n", + "(49, 'train:', 0.109, 'test:', 0.28)\n", + "(50, 'train:', 0.107, 'test:', 0.278)\n", + "(51, 'train:', 0.099, 'test:', 0.276)\n", + "(52, 'train:', 0.109, 'test:', 0.282)\n", + "(53, 'train:', 0.108, 'test:', 0.279)\n", + "(54, 'train:', 0.102, 'test:', 0.274)\n", + "(55, 'train:', 0.101, 'test:', 0.276)\n", + "(56, 'train:', 0.099, 'test:', 0.272)\n", + "(57, 'train:', 0.1, 'test:', 0.276)\n", + "(58, 'train:', 0.091, 'test:', 0.269)\n", + "(59, 'train:', 0.098, 'test:', 0.277)\n", + "(60, 'train:', 0.091, 'test:', 0.268)\n", + "(61, 'train:', 0.095, 'test:', 0.273)\n", + "(62, 'train:', 0.091, 'test:', 0.27)\n", + "(63, 'train:', 0.089, 'test:', 0.267)\n", + "(64, 'train:', 0.088, 'test:', 0.268)\n", + "(65, 'train:', 0.086, 'test:', 0.265)\n", + "(66, 'train:', 0.083, 'test:', 0.261)\n", + "(67, 'train:', 0.082, 'test:', 0.266)\n", + "(68, 'train:', 0.08, 'test:', 0.262)\n", + "(69, 'train:', 0.085, 'test:', 0.268)\n", + "(70, 'train:', 0.082, 'test:', 0.266)\n", + "(71, 'train:', 0.075, 'test:', 0.259)\n", + "(72, 'train:', 0.077, 'test:', 0.257)\n", + "(73, 'train:', 0.078, 'test:', 0.26)\n", + "(74, 'train:', 0.075, 'test:', 0.257)\n", + "(75, 'train:', 0.077, 'test:', 0.259)\n", + "(76, 'train:', 0.082, 'test:', 0.268)\n", + "(77, 'train:', 0.075, 'test:', 0.262)\n", + "(78, 'train:', 0.073, 'test:', 0.26)\n", + "(79, 'train:', 0.073, 'test:', 0.26)\n", + "(80, 'train:', 0.068, 'test:', 0.256)\n", + "(81, 'train:', 0.069, 'test:', 0.256)\n", + "(82, 'train:', 0.074, 'test:', 0.26)\n", + "(83, 'train:', 0.067, 'test:', 0.251)\n", + "(84, 'train:', 0.063, 'test:', 0.248)\n", + "(85, 'train:', 0.065, 'test:', 0.255)\n", + "(86, 'train:', 0.065, 'test:', 0.253)\n", + "(87, 'train:', 0.066, 'test:', 0.254)\n", + "(88, 'train:', 0.059, 'test:', 0.246)\n", + "(89, 'train:', 0.062, 'test:', 0.252)\n", + "(90, 'train:', 0.061, 'test:', 0.251)\n", + "(91, 'train:', 0.057, 'test:', 0.244)\n", + "(92, 'train:', 0.06, 'test:', 0.249)\n", + "(93, 'train:', 0.059, 'test:', 0.249)\n", + "(94, 'train:', 0.056, 'test:', 0.245)\n", + "(95, 'train:', 0.056, 'test:', 0.247)\n", + "(96, 'train:', 0.058, 'test:', 0.247)\n", + "(97, 'train:', 0.055, 'test:', 0.242)\n", + "(98, 'train:', 0.051, 'test:', 0.24)\n", + "(99, 'train:', 0.051, 'test:', 0.24)\n", + " 10892.490000 seconds\n" + ] + } + ], + "source": [ + "t0 = time.time()\n", + "train_epoch(100)\n", + "t1 = time.time()\n", + "print(\" %f seconds\" % round((t1 - t0),2))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0, 'train:', 0.053, 'test:', 0.243)\n", + "(1, 'train:', 0.053, 'test:', 0.242)\n", + "(2, 'train:', 0.053, 'test:', 0.244)\n", + "(3, 'train:', 0.052, 'test:', 0.243)\n", + "(4, 'train:', 0.051, 'test:', 0.242)\n", + "(5, 'train:', 0.053, 'test:', 0.245)\n", + "(6, 'train:', 0.046, 'test:', 0.236)\n", + "(7, 'train:', 0.047, 'test:', 0.24)\n", + "(8, 'train:', 0.046, 'test:', 0.236)\n", + "(9, 'train:', 0.048, 'test:', 0.241)\n", + "(10, 'train:', 0.045, 'test:', 0.24)\n", + "(11, 'train:', 0.046, 'test:', 0.235)\n", + "(12, 'train:', 0.045, 'test:', 0.238)\n", + "(13, 'train:', 0.042, 'test:', 0.233)\n", + "(14, 'train:', 0.043, 'test:', 0.235)\n", + "(15, 'train:', 0.046, 'test:', 0.237)\n", + "(16, 'train:', 0.042, 'test:', 0.236)\n", + "(17, 'train:', 0.045, 'test:', 0.24)\n", + "(18, 'train:', 0.04, 'test:', 0.235)\n", + "(19, 'train:', 0.041, 'test:', 0.235)\n", + "(20, 'train:', 0.043, 'test:', 0.237)\n", + "(21, 'train:', 0.041, 'test:', 0.235)\n", + "(22, 'train:', 0.039, 'test:', 0.233)\n", + "(23, 'train:', 0.043, 'test:', 0.237)\n", + "(24, 'train:', 0.038, 'test:', 0.235)\n", + "(25, 'train:', 0.039, 'test:', 0.231)\n", + "(26, 'train:', 0.04, 'test:', 0.235)\n", + "(27, 'train:', 0.037, 'test:', 0.231)\n", + "(28, 'train:', 0.04, 'test:', 0.234)\n", + "(29, 'train:', 0.039, 'test:', 0.234)\n", + "(30, 'train:', 0.035, 'test:', 0.229)\n", + "(31, 'train:', 0.04, 'test:', 0.235)\n", + "(32, 'train:', 0.036, 'test:', 0.231)\n", + "(33, 'train:', 0.038, 'test:', 0.232)\n", + "(34, 'train:', 0.037, 'test:', 0.229)\n", + "(35, 'train:', 0.038, 'test:', 0.235)\n", + "(36, 'train:', 0.036, 'test:', 0.231)\n", + "(37, 'train:', 0.036, 'test:', 0.23)\n", + "(38, 'train:', 0.036, 'test:', 0.233)\n", + "(39, 'train:', 0.034, 'test:', 0.228)\n", + "(40, 'train:', 0.034, 'test:', 0.228)\n", + "(41, 'train:', 0.036, 'test:', 0.233)\n", + "(42, 'train:', 0.033, 'test:', 0.229)\n", + "(43, 'train:', 0.033, 'test:', 0.23)\n", + "(44, 'train:', 0.033, 'test:', 0.229)\n", + "(45, 'train:', 0.031, 'test:', 0.226)\n", + "(46, 'train:', 0.033, 'test:', 0.228)\n", + "(47, 'train:', 0.032, 'test:', 0.228)\n", + "(48, 'train:', 0.031, 'test:', 0.228)\n", + "(49, 'train:', 0.031, 'test:', 0.231)\n", + "(50, 'train:', 0.03, 'test:', 0.225)\n", + "(51, 'train:', 0.029, 'test:', 0.225)\n", + "(52, 'train:', 0.034, 'test:', 0.229)\n", + "(53, 'train:', 0.029, 'test:', 0.223)\n", + "(54, 'train:', 0.03, 'test:', 0.225)\n", + "(55, 'train:', 0.029, 'test:', 0.227)\n", + "(56, 'train:', 0.03, 'test:', 0.228)\n", + "(57, 'train:', 0.029, 'test:', 0.227)\n", + "(58, 'train:', 0.029, 'test:', 0.225)\n", + "(59, 'train:', 0.03, 'test:', 0.228)\n", + "(60, 'train:', 0.029, 'test:', 0.225)\n", + "(61, 'train:', 0.028, 'test:', 0.224)\n", + "(62, 'train:', 0.029, 'test:', 0.229)\n", + "(63, 'train:', 0.027, 'test:', 0.224)\n", + "(64, 'train:', 0.028, 'test:', 0.225)\n", + "(65, 'train:', 0.028, 'test:', 0.225)\n", + "(66, 'train:', 0.027, 'test:', 0.226)\n", + "(67, 'train:', 0.027, 'test:', 0.226)\n", + "(68, 'train:', 0.026, 'test:', 0.223)\n", + "(69, 'train:', 0.026, 'test:', 0.223)\n", + "(70, 'train:', 0.025, 'test:', 0.223)\n", + "(71, 'train:', 0.028, 'test:', 0.228)\n", + "(72, 'train:', 0.026, 'test:', 0.224)\n", + "(73, 'train:', 0.027, 'test:', 0.226)\n", + "(74, 'train:', 0.025, 'test:', 0.223)\n", + "(75, 'train:', 0.025, 'test:', 0.222)\n", + "(76, 'train:', 0.025, 'test:', 0.224)\n", + "(77, 'train:', 0.024, 'test:', 0.222)\n", + "(78, 'train:', 0.025, 'test:', 0.222)\n", + "(79, 'train:', 0.025, 'test:', 0.222)\n", + "(80, 'train:', 0.024, 'test:', 0.22)\n", + "(81, 'train:', 0.023, 'test:', 0.222)\n", + "(82, 'train:', 0.024, 'test:', 0.222)\n", + "(83, 'train:', 0.024, 'test:', 0.224)\n", + "(84, 'train:', 0.026, 'test:', 0.229)\n", + "(85, 'train:', 0.024, 'test:', 0.223)\n", + "(86, 'train:', 0.024, 'test:', 0.221)\n", + "(87, 'train:', 0.024, 'test:', 0.223)\n", + "(88, 'train:', 0.025, 'test:', 0.223)\n", + "(89, 'train:', 0.023, 'test:', 0.224)\n", + "(90, 'train:', 0.023, 'test:', 0.221)\n", + "(91, 'train:', 0.023, 'test:', 0.225)\n", + "(92, 'train:', 0.023, 'test:', 0.223)\n", + "(93, 'train:', 0.024, 'test:', 0.225)\n", + "(94, 'train:', 0.023, 'test:', 0.221)\n", + "(95, 'train:', 0.024, 'test:', 0.222)\n", + "(96, 'train:', 0.022, 'test:', 0.225)\n", + "(97, 'train:', 0.022, 'test:', 0.224)\n", + "(98, 'train:', 0.022, 'test:', 0.223)\n", + "(99, 'train:', 0.022, 'test:', 0.222)\n", + " 10549.660000 seconds\n" + ] + } + ], + "source": [ + "t0 = time.time()\n", + "train_epoch(100)\n", + "t1 = time.time()\n", + "print(\" %f seconds\" % round((t1 - t0),2))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEICAYAAABLdt/UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXd4nNWZ9/85UzR91KslWe5yx2CDwfQWCJBAEl5IIFnS\nSEKy6b1tNkve3ewvYQNZ8iYkZGETEhJqQgnFNh1sbIO7ZUu2ZFvFaqM2M5rRlPP748zIktVmRiNL\nY5/Pdfka63meOXNU5jv3c5/7fG8hpUSj0Wg0pw6G6Z6ARqPRaNKLFnaNRqM5xdDCrtFoNKcYWtg1\nGo3mFEMLu0aj0ZxiaGHXaDSaUwwt7BqNRnOKoYVdc1oghGgQQlw+yTFuE0K8nq45aTRThRZ2jUaj\nOcXQwq455RFC/AGoBJ4SQniFEN8UQqwVQrwphOgWQuwQQlw85PrbhBCHhBB9Qoh6IcQtQojFwK+B\nc2NjdE/Tt6PRTIjQlgKa0wEhRAPwKSnleiHELGAn8FHgOeAy4GGgGvADLcAaKeV+IUQpkCel3COE\nuC02xvnT8T1oNImiI3bN6citwLNSymellFEp5YvAVuC9sfNRYJkQwialbJFS7pm2mWo0KaCFXXM6\nMhu4MZaG6Y6lVc4HSqWUPuAm4LNAixDiGSFE9XROVqNJFi3smtOFoTnHo8AfpJQ5Q/45pJT/ASCl\nfF5KeQVQCtQAvx1lDI1mxqKFXXO60ArMjf3/j8B1Qoj3CCGMQgirEOJiIUS5EKJYCPF+IYQDCAJe\nVGomPka5ECLr5E9fo0kcLeya04V/B74fS7vcBLwf+C7Qjorgv4F6PxiArwLNgAe4CPhcbIyNwB7g\nmBCi46TOXqNJAl0Vo9FoNKcYOmLXaDSaUwwt7BqNRnOKoYVdo9FoTjG0sGs0Gs0phmk6XrSgoEBW\nVVVNx0trNBpNxrJt27YOKWXhRNdNi7BXVVWxdevW6XhpjUajyViEEIcTuU6nYjQajeYUQwu7RqPR\nnGJoYddoNJpTjGnJsY9GKBSisbGRQCAw3VPJeKxWK+Xl5ZjN5umeikajmQYmLexCCCvwKmCJjfeo\nlPJfkh2nsbERl8tFVVUVQojJTuu0RUpJZ2cnjY2NzJkzZ7qno9FopoF0pGKCwKVSypXAGcBVQoi1\nyQ4SCATIz8/Xoj5JhBDk5+frOx+N5jRm0hG7VC5i3tiX5ti/lJzFtKinB/1z1GhOb9KyeBrztN4O\ntAEvSik3j3LN7UKIrUKIre3t7el4WY1GcypycCO06m6EkyEtwi6ljEgpzwDKgbOFEMtGueY+KeVq\nKeXqwsIJN06dEjidTgCam5v50Ic+NO61v/jFL/D7/UmN//LLL3PttdemPD+NZsYR6IWHb4H1P5ru\nmWQ0aS13lFJ2Ay8BV6Vz3JlEJBJJ+jllZWU8+uij416TirBrNKccux6BkF9H7JNk0sIuhCgUQuTE\n/m8DrkD1icw4GhoaqK6u5pZbbmHx4sV86EMfwu/3U1VVxbe+9S3OPPNMHnnkEQ4ePMhVV13FWWed\nxQUXXEBNjfp26+vrOffcc1m+fDnf//73h427bJm6iYlEInz9619n2bJlrFixgl/+8pfcc889NDc3\nc8kll3DJJZcA8MILL3Duuedy5plncuONN+L1qmWM5557jurqas4880wef/zxk/wT0mimmHceVI+9\nTdDfNb1zyWDSUcdeCjwohDCiPij+KqV8ejID/utTe9jb3JuGqR1nSZmbf7lu6YTX7d+/n/vvv591\n69bxiU98gl/96lcA5Ofn88477wBw2WWX8etf/5oFCxawefNm7rjjDjZu3MiXvvQlPve5z/Gxj32M\ne++9d9Tx77vvPhoaGti+fTsmkwmPx0NeXh533XUXL730EgUFBXR0dHDnnXeyfv16HA4HP/3pT7nr\nrrv45je/yac//Wk2btzI/Pnzuemmm9L3A9JoppuuBmjZAfMug4MboHUvVK2b7lllJOmoitkJrErD\nXGYEFRUVrFun/phuvfVW7rnnHoBBEfV6vbz55pvceOONg88JBoMAvPHGGzz22GMAfPSjH+Vb3/rW\niPHXr1/PZz/7WUwm9aPPy8sbcc2mTZvYu3fv4DwGBgY499xzqampYc6cOSxYsGBwfvfdd19avm+N\nZtrpbVaPyz+khL1NC3uqzJidp0NJJLKeKk4sFYx/7XA4AIhGo+Tk5LB9+/aEnp8KUkquuOIK/vzn\nPw87PtZrajSnBN429ViyAqw50Lp7eueTwWivmBM4cuQIb731FgB/+tOfOP/884edd7vdzJkzh0ce\neQRQIrxjxw4A1q1bx8MPPwzAQw89NOr4V1xxBb/5zW8Ih8MAeDweAFwuF319fQCsXbuWN954g7q6\nOgB8Ph8HDhygurqahoYGDh48CDBC+DWnGVJC3QboqFP/z3R8sTJoZxEUL1OpGE1KaGE/gUWLFnHv\nvfeyePFiurq6+NznPjfimoceeoj777+flStXsnTpUv72t78BcPfdd3PvvfeyfPlympqaRh3/U5/6\nFJWVlaxYsYKVK1fypz/9CYDbb7+dq666iksuuYTCwkIeeOABPvzhD7NixYrBNIzVauW+++7jmmuu\n4cwzz6SoqGjqfhCamc/hN+GPH4D/Pgte/f+mezaTx9sGCLDlQdFiaM/IGowZgZDT8Em/evVqeWKj\njX379rF48eKTPpehNDQ0cO2117J7d+bfAs6En6dminnuO7Dlfig7A/qOwZd2QCbvOn7qy7DvKfjm\nQXj1Z7Dx3+B7x8Bsm+6ZzRiEENuklKsnuk5H7BpNJiIl1DwDcy+C5TdC92HwHJruWU0OX7tKwwA4\nYpsYfR3TN58MRgv7EKqqqk6JaF1zGtC2V4n5ovfCvEvVsboN0zunyeJtOy7o8Ue/FvZU0MKu0WQi\ndevV46KrIX8e5M45fixT8Q0V9oLYMS3sqaCFXaPJRNr2gasMXCXq67kXw5G3Mrs6xtcxJBWjhX0y\naGHXaDKRjlooWHD868JFEOzNXCEc8MOAFxyFtPT006NcSo6XQGqSQgu7RpNpSBkT9oXHj+XNVY+Z\nuoDqi21Ochbxkd9u5itP1oHRooU9RbSwp5HbbrttQhdHjWbSeNsg2DM8Ys90YfcqAe82ZFPf4ePl\nA+1E7AXg75zmiWUmWtjHQEpJNBqd7mloNCPprFWPQ4U9ZzYIQ+YKeywyr+m1AhCV4JEuHbGniBb2\nITQ0NLBo0SI+9rGPsWzZMv7whz+Map374x//mDVr1rBs2TJuv/12pmOTl+Y0puOAehyaijFlQXZF\nBgu7SsW868nCZBAsn5VNfb89c9cMppkZaQLGP74Nx3ald8yS5XD1f0x4WW1tLQ8++CDz58/nAx/4\nwAjr3B/+8Id84Qtf4Ic//CGgXByffvpprrvuuvTOV6MZi45aMDtUVcxQ8uZmrrD7lWfSphZJdamL\nS6uLOPqqgzW+BjJ4L+20oSP2E5g9ezZr164dZp17xhln8OCDD3L48GEAXnrpJc455xyWL1/Oxo0b\n2bNHd3vRnEQ6alXtuuGEt28mC3uwD2kwsbW5n1UVuRS5LXRKN1JH7CkxMyP2BCLrqSJuzzuWdW4g\nEOCOO+5g69atVFRU8KMf/YhAIDAdU9WcrnQfhsLqkcfz5kKgW0W/9pE+/zOaYB9RsxOfP8qK8mxy\n7VlskW4M4X4Y8EGWY7pnmFHoiH0MxrLOjYt4QUEBXq9XV8FoTj69LZBdPvJ43hz16Kk/ufNJBwNe\nQibV/L0yz64idtzqnI7ak2ZmRuwzgKHWufEOSXfeeScLFy7k05/+NMuWLaOkpIQ1a9ZM80w1pxWB\nXhjoA1fpyHPuWM69rxk466ROa9IE+wgYlItjWY4Ns9FAp4wLezvkzp7GyWUeWtiHcKIJ2KWXXsqW\nLVtGXHfnnXdy5513jjj+wAMPTOX0NJrj7ePcZSPPxcW+79jJm0+6CPbiw44QUJJtRQDduNQ53dQ6\nabSwazSZRN84wu4oVLXs3taTO6d0EOyjV1opdFowG2MZYlsuRNDCngI6x67RZBJDIva+QIhvP7aT\n3U096pjBqMQ9IyP2ProjVspyjjfVsDhjC8Ba2JNmRgm73uiTHvTP8RQmLuyuUp7a0cLDW45yy+82\ns7e5Vx13FmdoxO6lM2yhLMc6eMiRna/+o4U9aWaMsFutVjo7O7UoTRIpJZ2dnVit1okv1mQevc1g\nLwCThb9tb6Iiz4bRILhnQ8xmwFUKfS3TO8cUkME+2oNmSrOPR+wFbgd92KG/expnlpnMmBx7eXk5\njY2NtLdrb4jJYrVaKS8fpRxOk/n0NoO7jObuft5u8PCVyxdS2+ZlW4PauYmrGJrfnd45Jks0ggj5\n6I5YKc0+HpAUuy10SQeOfs/MiUAzhBkj7GazmTlz5kz3NDSamU1vM2TP4vk9x5AS3reyjPX7Wnlq\nRzPtfUEKnSWqPDASBuOMeXuPT7APAC82qofk2AvdVnqkg+K+TizTNbcMRX8QajSZRJ+K2Hc39VLk\nslBV4GBFuWpKsbOxO9ZRSWaWK+KAMtfrw0bpEGEvclnolk7Cfp1jTxYt7BpNphAKKH9ydxm1bX0s\nLFZ13kvL3BgE7GzsOd4qz5tBlTGxiN0nbZQNScUUuiz04NSLpymghV0zOcID8O5Dys9DM7XEql2i\njmJqW70sKFZb8B0WE/OLnCpid8aEPZNKHoekYvIcWYOHc+1Z9EgHxmDPdM0sY9HCrkmdUAD+civ8\n7Q5494/TPZtTn1h6pZMc+kORwYgdYEV5DruaetXiKWSYsKtSzbDJgcl4XJJy7Wa6cWAe6MnsJt3T\ngBZ2Teq8879Q+zwYs+DYzumezalPTNjr+1UeemEsYo//v8MbpNuQqw5kUi17LGLH4hp22G0104MT\nowzrO8IkmbSwCyEqhBAvCSH2CiH2CCG+lI6JaTKAlh3gKILZ50Gr9qSfcryqy1CNV+WhFwyJ2OcV\nKpE/6BkAe36GCbtaPBXW4cJuMAhC5mz1hc6zJ0U6IvYw8DUp5RJgLfB5IcSSNIyrmem074OixVC8\nDNr2qRI7zdQRax+3qyuL0mwrbqt58NTcmLAfaveqD9vYh0BGEIvYjVb3iFMRixb2VJi0sEspW6SU\n78T+3wfsA2ZNdlzNDCcahbYaKFqihD0cAM/B6Z7VqY2vAyxuDnSGmF/kHHaqIteG2Sg42O4DZ2YK\nu9mePfKcLZZaCujdp8mQ1hy7EKIKWAVsHuXc7UKIrUKIrXp36SlAzxEI+VTEXrJMHWvdPf5zNJPD\n2waOQpp7AswaUu8NYDIamJ3vUBG7s2gwus8Igr30Y8FhG7kNyWCPCbuO2JMibcIuhHACjwFfllL2\nnnheSnmflHK1lHJ1YWFhul5WM1207VOPRUugYBEYTHBMC/uU4msn6iikwxukJHukF9C8QgcHB1Mx\nGRQ8DXjxYhuWWopj1g6PKZEWYRdCmFGi/pCU8vF0jKmZ4bTtVY+Fi8CUBfnzoePA9M7pVMfXTiAr\nDymhLNs24vTcQidHPH4ijkJ1NxVblJzpyGAfXmnFbRtpgZDlLFDXaCOwpEhHVYwA7gf2SSnvmvyU\nNBlB2z7IroT4gpezOLPyupmItw2vSUWwo0fsTkIRSSexXHWGpGOi/b30ydEjdpfLRVCaCfs6p2Fm\nmUs6IvZ1wEeBS4UQ22P/3puGcTUzmY4DULDg+NeOwszyJ8k0ImHo9+ARSrRLRxH2OQV2AFoiMWHP\nkA/aSH8vXmnDNYqw5zqy6MFBsE8LezJM2v5NSvk6INIwF02mICV4GqDinOPHHIW6m/xU4lc/2/ao\nukMqzRmZiinPVcJ+dMDJSsgYYZfBXrzYR03F5Nqz6JYOLD7PNMwsc9E7TzXJ4/dAsAdyh9gsOwth\noA9C/dM3r1OZmEg3h1y4LCaclpEiWOi0kGU0UN/viD0nQzYpBcdePM11ZNGNE+nXOfZk0MKuSZ6u\nevWYN0TYHbFKJ52OmRpiP9fDQceo+XVQOzXLcqzUei2AyJjfhRjwxlIxo0XsZnqkAwK6KiYZtLBr\nksdzCIAmQym/WH+ASFRqYZ9qYj/XQ/22UdMwccpz7RzpjtsKZEAqRkpMoT4VsdtGidjtWfTgxKQd\nHpNCC7smeTz1gODXO0L8Yn0tL+5tHSLsOs8+JcR9YvpslLrH7mc7K8dGY1d/5lQphYMYZBjvGFUx\n2TYz3dKBOTRia4xmHLSwa5Knqx7pLuPpver2+LevHQKHqjfWEfsU4WtHmqwc9hnGTMUAlOfa6PAG\niTgKMqPcMdY9yYt11FSMyWggaHJjifggEjrZs8tYtLBrksdziB5bOV3+EBcsKGDb4S62e2LRlhb2\nqcHXTsSWj5RifGHPU2kavzlDHB5jXuwBgwOr2TjqJaGsuBGYXkBNFC3smuTx1HMgVIQjy8jPb1wJ\nwKbGAJgdmbWVPZPwtRO0qLuiItfYrZ1n5aiSx25DrvpdzPQGFTEDsIjZOeYlEavq6aptBRJHC7sm\nOQK94Gtjpy+XtXPzKXJbKXBaqG/3qXSMjtinBm8bfrMyxCpyjZ+KAWiXbgj3D6Y6ZixjNNkYiogL\nu3Z4TBgt7JrkiPnBbPYWsqRMbZaZW+DgUIdX7z6dSnzt9MS6IxW5x47Yi91WTAZBczhm9TDTF1AT\nEHaDQxuBJYsWdk1yxFwd90fLWVIaE/ZCB4fafXr36VQhJfja8YhshID8IQ2fT8RoEBS5LDSGYkI5\n44Vd3VEYrGMLu1kLe9JoYdckR3sNYYOFRlnI4iHC3ukbYMCaryP2qaC/C6Jh2iJu8h1Zwxo+j0aR\n20pDIEN2n8YWT02jNdmIYXHnAxDStgIJo4VdkxztNbRbKrFlmanMUwt1cwrUwpcHtxL2mb5gl2nE\nPiybw04KnGOnYeKUuK3U+e3DnjtjGa97UgxHTNiDvdoILFG0sGuSo62GOllOdakbg0F5v80tVNFh\na9gBMnI8b6pJDzFxPhJ0UjTO5qQ4JdlWavssIAwZELH3EZECm23sqpgch5UeadcOj0mghV2TOIFe\n6G3knf5iFpcez4lW5tkxGQRNgVg02a9vmdNKLE9e328bt9QxTpHbQk8wStReMONz7OFALz5suO1j\nrxvk2LPolk6iOhWTMFrYNYkTq4jZHSobzK8DmI0GKvLsHO6PC7te5EorsQXpOr+dwgSEvSQW1Ycy\nYM0j7O+lDxvuUXadxsmLebLrLkqJo4VdkzjN7wJQIyuGCTuoqL3eF4u6tLCnF18bUhhoizgSitjj\nwu7PKpjxqZjxmmzEybWb6ZZOhHZ4TBgt7JrEqX+VXksJjRRRXTK8PK0iz0Ztb+zN6de3zGnF20bE\nmo/EMO7mpDjxPHyfMXfG7wSOBnpjzo5jR+w5dhWxmwZ0xJ4oWtg1iRGNQsNr7M5ayZx8J/as4W/E\nilw7RwMxO1kdsacXXwdBi6rlTigVE/OS8YhsFbHP4ColGezDJ62jOjvGyTIZ8BtcZGmHx4TRwq5J\njNbd0N/FxmD1iDQMQEWenR5itdM6F5pe+j34TKocMBFhd8Y6LLXJbIgEB2vFZyJiwEsf46diAIJm\nN9Zw34z+kJpJaGHXJEbDawA83Tt/0EpgKBW5dkKYCJvsuiom3fg78RqUsBc4x64eGUqx20JjKFYb\n3ndsqmY2aYyhPrxy9H6nQwln5WBEl9ImihZ2TWLse4r+7PkcI39YqWOciphdbL8pW6di0o3fQzcu\nsoyGUXudjkax20pdMGae1XN0Cic3OUwh35j9TocS1UZgSaGFXTMxrXvhyFvsLXkfAItKRkbs2TYz\nLquJPuHSi6fpJBqFfg+eqJM8RxZCiISeVpZjY7cv9gHcPUOFPRolK+LDJ2zYs0b3Yh/Epq17k0EL\nu2Zitv4ejBY2WK/AnmUctTWbEIKKXDtd0qHffOkk2AMySnvEQd445l8nMjvPzp4+B1IYoadxCic4\nCWKWwmGTY8IPLKNdG4ElgxZ2zfiEArDzL7D0enZ5jMwtdAxaCZxIRZ6N9rAW9rQSu/s5FnaQn2B+\nHWB2gYMIRsKOkhkv7OM12YhjjDk8Rvz6bysRtLBrxqf2BVVVsfJmDrX7mF849puwItdOy4AVqRdP\n00dM2JsHbElH7ABea+nMzbHHFkJl1sTCbnEpYQ9oI7CE0MKuGZ/dj4KjEF/ZeTR19zO/aOw3YVmO\njY6oM2YzGz2JkzyF8SshOxpITtir8lXpaYexKAOEfeSazYlYswtiT9F+/4mghV0zNoFeOPA8LL2B\nek8QgHnjROxlOTa6pQMhozCgy9LSQuzup2nANm6DjRPJtpvJtplpIh96myEamaoZpk6svt5gnThi\nd7vcBKSZkFffDSaCFnbN2Bx+E8IBWPw+DrarfOj4EbuVHmLndWVMeohF7F3SRZ5j4s1JQ5mdb+fQ\nQC5EwzOzlj3WPcloG9uLPU6OzUwPDiI+nWNPBC3smrFpfkd5es86k7o2L0aDYHbsFn80SrNtdMmY\nsOsF1PTg9yCFCS/JpWIAZuc72OePieZMTMck0GQjTty6V6/fJIYWds3YNL0DhYshS/U0rcyzk2Ua\n+08m35GFzxDLl+o3YHrwdzJgyQVEUlUxoBZQd/bFfh8zsDImElCpGLN94hx7js1MN04MeoNSQqRF\n2IUQvxdCtAkhdqdjPM0MQEoVsZetAqCh00dVvn3cpxgMApNLLXKhy9LSQ7+HoFlFtMlG7FUFDo5E\nVVs5uurTPbNJM+BTIm115Ex4rdtmplc6MAV7pnpapwTpitgfAK5K01iamUD3EZXfnbUKKSWHO/3j\npmHiWLML1X/8unohLfg9+IxK2JNZPAWoLnHRj5WAtRA8M0/YQ/5egtKM0zF+wABgNAh8Ru3wmChp\nEXYp5auAvvc+lYg11aDsTDp9A3iD4QkjdoDs3AIiGAYX/TSTxO+hz+DCaBAT+qmcyMJiF2ajoM1c\nDp0Hp2iCqRPq7405OybmfxM0ubGGdcSeCCctxy6EuF0IsVUIsbW9fWab/2uAlh1gMEHxUg53+gC1\nm3EiSnOcdEsHUZ8W9rTg76QLN7n2rDF3/I5FlsnA/CIX9dFi8ByaogmmTjTWPSnRD6xQVjYWGYDw\nwBTPLPM5acIupbxPSrlaSrm6sLDwZL2sJlW6GiCnEkwWGjr8wPHdjONRmmPFI90Ee2d2E+WMQEro\n99AZdSSdhomztMzNzv588LWpfQkzCBnsm7B70lAiFu3wmCi6KkYzOt1HlLADhzt9GASU504s7GU5\nNjy4COsdgpMn2AvRMG1hZ9ILp3GWlLrZE4gFUjMsahfBPnyM3z1pKDJu3avTfBOihV0zOkOEvaHT\nz6xc27iljnHKc2x0SRdSv/kmT9wALGQnL8lSxzhLy9w0yBL1hWdm5dlFyEtfEqkY6Yh9QPl00DAR\n6Sp3/DPwFrBICNEohPhkOsbVTBOhfnXrPiRir0qgIgZUVO+RToy6jn3yxIS9MZicncBQlpS5aRTF\n6osZFrGbQl682HAmuHhqcCphj3p1mm8iEvuJToCU8sPpGEczQ4g3ZsiZDaiI/doVpQk91ZZlJJiV\nizXUrXLECTaG0IxC3CcmaGN+isLusppZObeMjqY8CjpnlrCbwz6CBgfGBBeFzW71ARXsbsU2lRM7\nBdCpGM1Iuo+ox5xKvMEwPf2hhPLrcYQ9X/WnDOjStEkRS2d5cKUcsQNctbSEukgx/a0H0jWztJAV\n8REyJXYnCMrhMSIFwZ7WKZzVqYEWds1IuhvUY04lLd39gDL4ShTz4O5TnWefFLFUTJd0Jm0ANpQr\nl5bQEC1GzqSIPTyAWQ4k1GQjTp7Thgc3oV4t7BOhhV0zku4jYMwCZwlNMWGflZP4za8tR90yh3Rl\nzOTo9yCFkT7sKVfFgGpsHcqZgz3kIdo/Q+6iYt2TokkIe4HTQod06xx7Amhh14yk+whkV4DBQHN3\nAFBljInizlfC7mlvmZLpnTb4OxkwZyMxJG0AdiILF58BwLbt29Ixs8kT82KXWa6En6KEPRuDtquY\nEC3smpEMKXVs7u7HaBAUuRJPBRQUlgHQ06mFfVL4PfSbVe32ZHLsAGeecSYAm7dumfS00kLMsldY\nExf2fGcWnbgxB7SwT8QpIeyBUIQH3qintTcw3VM5NThB2EvcVkzGxP9UiktnAeDt0rnQSeHvxGt0\nI4TyI58M5sL5AASO1XKsZwa8T2LCbkhC2M1GA15jLrYBXUo7ERkv7N3+AW66bxM/emov331813RP\nJ/MZ8IOvfVDYm7r7k1o4BSjKz2dAmhjQtgKTo7+LXuEi156VcEngmGTZCTlKmGM4xisHpv/3ImP2\nBqYEmmwMJWDJxxLtV3+nmjHJeGF/dFsjO452c/WyEjbUtPHqAW0wNil6htewt/QEKM1OrmrYaDTQ\nZcgBr/5dTAp/Z6wl3uSi9TimgnksMLXxygx4jwT9iTfZGErIGvOX903/9zCTyXhh3360m1k5Nn5x\n8xlU5tm585m9hCPR6Z5W5jKkhj0albT09Ce1cBqnz1yANaBTMSkjJfg9tEdS94k5EZE/j7mGVl6r\n7Zj290igV5XCZjnzk3uithVIiIwX9p2NPawoz8ZiMvLd91ZzoNXLw1tmYH/HTKH7sHrMqaTDGyQU\nkcxKMhUDELQV4w7pN1/KDPggEqQtbJ/0wukgefNwRroh0Mu7RyfpkCglbPwJPHAtPPtNCAeTenrI\nq4Td6kpO2I2uIvUf3/Snk2YyGS3sXb4Bjnj8rKxQlQPvWVrCOXPyuOvFAwRCkWmeXYYyWMNePFjD\nnkrELl2lFEoPPf2hdM/w9CBmJ9AykHwT6zHJmwvAbHGMHZMV9v3Pwqv/qTahvf0beOhGCCW+KBvx\ne/BJC44EuicNxZId2yOhNymNS0YL+45G9ce5olwtwAgh+OzF8/D4BnijTkeLKTHJGvY45pxZuEQ/\nTcd0ZJUSsV27jQNpjNjz5wGwwt7Jvpa+1MeJhODFf4GChfCZ1+D9v4L6V+CF7yc8RNTXRTfOpLtC\n2XKVZ1G/pzmp551uZK6w9zaz9/AxhIDls46vrK+bV4DLauIfu49N4+QymBNKHSE1YbcXVADQ2dKQ\nrpmdXsQFzf6rAAAgAElEQVTsBDxRJwVJ7CEYl9w5AJzp6KTm2CSabtSth85auPQHYDTBqlvg3C/A\nlt/C/ucSGkIEuuiRzoTb4sXJzXbTId2EunS6dTwyU9iDXrj3HG7ddB2fyd6Ma8infpbJwOWLi1m/\nr5WQXkRNnq7Dw0odnRYT7iTffAB5paqqpqftcFqnd9oQ94nBRf4kfGKGkWUH9ywWmTuobfWmvoB6\ncCOY7bDwPcePXfYvULAIXvieiugnQAS66ZYOcpOszy9wZtEs85E9jcnO+rQiM4X94AYI9tIdtfL1\nwL2qjdsQrlpWQrc/xOZDeiNDUgz4wN8xLGIvy7EiUrDedeSrMQIe/QZMif7jBmAFk7QTGEbeXMqi\nzQxEotR3+FIb49DLMPs8MA35wDFlwRX/Cp118M6DEw5hCnbTgxO3LblUTIHTQovMx9ynUzHjkZnC\nXvMsUWsuNwe+qxoub7xz2OkLFxRiNRtYv+/0WWDpH4jw+9frqWvzpj5I3Ic9twqA5hRLHQFwq1yo\n7NG2Ainh70Qi6CGNqRiAvLlk96uS1n3HUsiz9zRBxwGYe8nIcwuvgopz4I17IDr+3YAl1Ivf6Ep6\n41Why0KzzMfWPzP/ruo7fNy9vpZfbqgdTGVOB5kn7JEQHHiOluILaaaAjuWfgl2PQEfd4CW2LCPn\nzy/gxb2tSCmncbInh7q2Pq66+1V+/PRerr/3jdQ3oAypYQdo7g6kLuxZDvwGBya/XutICb+HoMlN\nFAMFzjQKe/48TAEPeUY/NS0p5NnrX1GPcy8eeU4IWP0JVTJ75K2xx5ASa6SXoDm5XacAVrORLnMR\nWRHfjPP739Lg4T3/9Sq/2HCAu9Yf4PK7XuFI5/TskM08YT/6NgS6edtyLmajIOfCzwIC9jw+7LLL\nF6tyvZpUopIMwuMb4OMPbMEXjHDvR86kPNfGlx9+N7UywyE17P0DETy+Acqyk69hj+O3FOEItum1\njlTwd+IzZZNlNKS0xjEmsZLHc3N6Uru7O/IW2HKhaMmIU4FQhF+2LCZkdMD2h8YeI+THLEOEspIX\ndoB+W6yb1wzKsx/1+PnMH7ZRnmvjzW9fyotfuYiolPz8xf3TMp/ME/bGtwF4rm8e1SVurPkVKt+3\n61G1aSLGpYvVRoYNp3g65tuP7aS1N8hvP3YW16wo5Wc3rqTLH+LXr6TQuLj7CBgt4CiiuSf1ipg4\nEUcpRXg44tG+HknT76FPuMh3ZqW0xjEmebGSR1snR7tSSBW01UDRUjAMl47eQIjrfvk6P3+5kScG\nzia6+4mx69r7uwCIWnOTf30g6lYmc/Q0pfT8dNMXCPHJB7cQiUruv20Npdk25hc5+cS6OfxtezN7\nmk/+nUXmCXvTO8jcKt5skYP16yz7AHTsh7a9g5cVuaycUZHDi/tO3Trqtw528sLeVr502QJWVao3\nybJZ2dywaha/f72e3kCSUXv3EchRNewtk6hhj2PMLWeW6ORQe4qLdKcz/k66cKU3DQOQp0oeF5jb\nafT4k0tVSgntNVBUPeLUT/9Rw8F2L/9100peNZ6NIexHHt08+jgxYceWmrCbclUp7aCv0TTzL3/b\nw6F2H//vljOZU3C81d9nLpqH02Lit6+e/M5VmSfsze8SLFpJXyDMwuKY5efi9wMC9v592KVXLClm\nx9Fu2k5BO18pJT95di9l2VY+ef6cYeduXF1OMBxlS32SVUGj1LAn0znpRBxl1RSKHhqbZ+ZC14zG\n30Vn1DnpBhsjMNvAPYsK2UxfMEy3P4kP/74W1SCjcLiwb2nw8NDmI9x23hxuWFXOmouuISIF7bs3\njD5OTNiN9ryUvgVH3ixC0ki4e/pTMTuOdvP4u0185qK5nDe/YNi5bJuZG1eX8/TOlpNuKZ5Zwu5t\nh56jtLmWAlAV/3R0FkL5Gqh7cdjll8XTMTWnXtT+wt5Wdjf18pUrFmI1G4edO7MylyyTgTcPJtlz\ndIiwN3b3I4Rqq5YqtjKVh/U370t5jNMWfyetYUf6I3aAvLkUDqg0xtGuJNJkbbHf4xBhD4YjfOfx\nXczKsfG1KxcC8L6zF7NbziVw4JVRh4n7xJiT9ImJU5LjoJVcgh3Tu0dCSslPntlHgTOLz108f9Rr\nbjuvioiU/O9bDSd1bpkl7M3vAFBnVn9AVflDfCYWXAlN7wyzil1U7KI818b6vadWnl1Kyd3ra6nK\nt3PDqlkjzlvNRlbPzk1O2E+oYa/v8DErx0aWaRJ/IgXq90THgdTHOB0Z8EO4n5YB+9QIe/48nH5V\nAXXUk0Sevb1GPRYtBuAPmw5z6+82U9fm5c4bluGwqEXeXEcWLbmrKfXuJhwYuUDb36PsPrJSFPbi\nbCtNsoBo1/QK++PvNPF2g4evXbkIp2X0Be7ZjgjvXVrC719vOKlRe4YJ+7uAYEd4NiaDGJ4mWHA5\nINXmpRhCCK5cUsJrtR10+QZO+nSnipcPtLO3pZcvXLpgzM5G583LZ19LL55Ev+/u4T7sB9u8zCtM\nvNHwqOTMJizMOPpSWMg9nYltTmqPpnlzUpy8uZgCHtz4klvYbq8BewE4Cnh5fxs/eHI37X1BvnrF\nQi5ZVDTs0vxll2MmzL63R6Zjgn0q4LBnF6Y0/dJsK3XRWVi6DgwrmDiZdPkG+Mmz+zizMoebVleM\nvKBxK9yzCv6jgp8HfsDsaCM/fa7mpM0vs4Td4oJFV1PXDRV59uGiVrISHEVwYLhXxYfOKmcgEuWJ\nd2fGCno6eGjTEQqcFt63smzMa86dp6Kht+sTjNpP8GE/1OFlftEkhd1ootdeyaxwIz3J5HJPd2J2\nAt3SOUWpmONmYMmlYmqgsJpgOMK/PrWXOQUOnv/KhXzxsgUjLl269nKiUtBT+8aIcyFvJwFpxu1K\nvC3eUEqyreyTlWSFeqF3enag/vS5Gnr6Q/zkhuUYTtxkJSU8+w1157Xuy1g79/KQ65c8+c7Rybtq\nJkhmCfu5n4cP/5n6Dh+z80+w+zQYYNHVUPsihI7fXi4pc7OyIoc/v31kcpuVWvfAG3dD+/SmFZq7\n+9lY08pNa8rHTZMsLcvGaBDsbkpwE0rcliGnkqbufgKh6OQjdiCcO5+5opm69lN7P0FaiTk7euQU\nVMXAoMvjGY5OjiYasQ+piHlsWxP1HT5+eN0SLCbjqJfbXXk0mWZhbds+4lzEr5wdc+zJ2QnEcVlM\nNBir1Bete1IaYzJsbfDw8JajfOr8OSwuHaUD1IHnVdr40u8pm4Xr7iE/0MBH7Zv48dN7T8qmycwS\ndlR++XCnj6p8x8iTS6+HAa8yKRrCh9dUUNvm5Z0jXam96Bt3w6/Phxd/CPeuga3/k9o4aeDhLUeR\nwM1rKse9zmo2Mr/Qyd5Edxe27wNLNjiLqWtXedFJR+yApXQxs0Urtc0p/uxPR+I+MTgpcE1BKiZm\nGVGd1Z64sPc2Q7AXWVjN/7xRz5JSNxcvHD+V0pm9nNmBGkLh4b0RDL42PNKdtAFYHCEEPe7YYmXr\n7pTGSBVVjbaPEreVL10+8k4FgE33qpTmyg+rrxdfB6Vn8E3L4+w43M5zJ8F5NuOEvd0bxDcQGb5w\nGqfqAlUbu+fJYYevW1mGI8vIn99Ooe718Fuw/kdQfQ18fgvMuQie/97x1MVJJByJ8pctR7hoYSEV\neRM3KFhS5mZvc4LC3roHipeCEBxsS5+wu8qXYBJROg6f/MgqY4k7O8o0OjsOxWwDdzmzRSvN3YHE\nIsjYwumugVJq27x84vw5E26cMlWcRaHooa5u+O5Lq6+JJlmQsrADZOcU0mYoPOkR+0v723j3SDdf\nvGwB9qxRFkwDvXD4TVh6AxhjdyRCwMXfwdHfzIPnNHNJddHI56WZjBP2hg4VYcwuGCViN5qh+lrY\n/w9V5RHDYTHxvjNm8fTO5uQ27YQH4MnPqkqR6/8fFC6E9/+3OpdEU4F0saGmjdbeILecMzuh65eU\nujnWG5h4AVVKaN0Lxao88WC7l1y7OS2dewyxCorwsb0TXKkZJCbsvSJ9/U5HkFNBQbiNgUg0MfuJ\nmLA/ftRFts3MdStLJ3xKyZLzAGjeMyTPLiXO/mZaRCG2rNHTOIlQkWejJlp50oX97vW1VObZuXF1\n+egX1L8K0TAsuGL48QVXQsFC1rX+CetkKs0SJOOE/UCrytXOHyv/u+pWGOiD7X8advjDZ1cQCEX5\n2/YkFlt2PaJyz1f/f2rhFpTIr/441DwDviTrxCfJHzcdpjTbyiWLEqsmiOf/9k2Ujuk+on5mxWp/\nQF1bGhZO4xQsJIIRR/eB08KQLS34O+k3Osl22JJ2P0yY7AqyB1RKoK0vgX6lbfvAXsDrLXDW7Nwx\nc+tDKZi3mhAmIo3bjh8MdGOJ+ukyl6Q6c0AVT+wKz0J21ibVkm8y7G7qYUdjD59YV4V5jGo06l6E\nLJdyuRyKwQDn/TMc26nEf4pJi7ALIa4SQuwXQtQJIb6djjHHouZYLy6LifLcMXZEVpwDs86CTf9v\nmHXo8lnZLCp28fftCVbHRKPwxi+gePnIT9+VN6tP5ROMx6aSXY09vFbbwa1rZ49Z4ngii0vVh9GE\n6Zi4FUPRFAi72Uqfo5LZkQbaExEQTcwnxj01aZg42eVY+1sxEE2svrq9hnDBIuravKyK9RieEJOF\nJss8CnqG5MFjKUy/feyKrkSozLPzbnQBIhqGpq2TGitR/rr1KFkmAzesGiNalxLqNsDci46nYYay\n/P/ABV+HgjFy82lk0sIuhDAC9wJXA0uADwshRlq/pYmalj6qS11j5/eEgLV3gOcg1Dw1dJ5cu6KU\nLQ1dtPQksClj/7NqY835X1ZjDqVkuRLBnX+ZxHeSHHdvqCXbZuZj546RhhnwqUXdt36l0ipAvtNC\nids68QJqfAGqaDEe3wBd/lBaKmLihAsWs1A0sr9VV8YkhN9DN66pWTiNk12OQYYpoou23gk+cKWE\n9v20WZV1RdyXKBH68lewIFJHjy/2GrH9Esa8xNKJY1GZZ+ftaDUSAxwafYdrOgmEIjzxbhNXLysh\ne6xqnq565V8zbxSvegCzFS77Abgn96GWCOmI2M8G6qSUh6SUA8DDwPvTMO4IpJTUHOujumSUEqOh\nLLletela/6/D2nRds0LlBZ/ZOYF3iZTw+l2qemDJ9aNfs/xD0LjlpDjMbT7Uyfp9rXxi3ZxhbQAH\n2fUo3L0Snv4yPP8duP/KwdzjkjL3xKmY1j0qxWR1D1q5zktXxA7Yy5dTKdo42HTqWTtMCf5OOqNT\nVMMeJ7bDuEx00to3QcQeq4jZHylHCFhRkbjdblblalyin4M17wIQie0WdRTOGe9pE1KZZ6cXB+3u\nJScltfHc7mP0BcLctGaUzUhxDsc86CvPm/L5TEQ6hH0WMLTcpDF2bBhCiNuFEFuFEFvb21NrBNHY\n1Y83GKa6dIKNDUYTXPlvKmofUpo4t9DJklL3xI2uG16Dpm1w3hfVWKOx4Er1eOjlxL+BFPAPhPnG\nozupzLPzqQtOeDOEg/DkHfDYJ1V51SdegH9+B7Ic8KebYcDH4lIXdW1eAqHI6C8Q6FW1/7PPBxgU\n9jHXMFLAPmsZBiEJNGf4AuqOv6ifa8PrU/s6/R7aIlPkExMnW6UT5mUlELG3K4+Yzd4CFhQ5cY8W\nXIxByeJ1AHTXbgLA21qPX1ooKp548XU8sm1mXFYTNbZVKhUTnETnsAR4eMsRKvPsrJ0zjg3CkbfA\nmjPCJG06OGmLp1LK+6SUq6WUqwsLU9tKHI88R90UcCILroQ5F8LL/w79x3d7XbCggF2NPQyEx2n+\n8Mp/ql2sZ9wy9jXFS9U1J9TMp5sfP7WXIx4///mhFYNeHIAS9T98QDU0uPCb8InnofIctfnkQ/dD\nzxHY9gBLSrMJR+XYTRV2/kXV/q/5FKAqYqxmw6RcHUcQW5Q1d2awGVg0qlowHvgHPHAtHNs1ZS8l\n/R7aI470OzsOJSbsCyxdE699tKtyxRc78lhRnmB+Pf4yFUvwYcPYonyeBjobaJQFzC6YXOAghKAi\n185muUytdx1+c1LjjUdDh49NhzzctKZi5C7ToRx5CyrXjvCqnw7SMYMmYOj9SXnsWNqJd0NaVJzA\nVmQh4Mo7lUXo63cNHl5ens1AJDpYXTOC+ldVxH7BV1VObLzx512iIvYJ+jumyuPvNPLwlqPccfE8\n1s49IVJ47jtw+HW44Tdqh9vQO4uq81VN/xv3sLRIicNgnt3brurw//pPsOV38NZ/Q9kqKD8LUBH7\n3ALn+H/AyZJbRQgzjr769I15sjm0EXqOIK/+T0BC7QtT8zrhIGLAO3W7TuNYXGDNocrUNfHiads+\novYCDvqsLEkkqBqKwUijbRGFfSo1aOg5SpMsGH0fSpJU5tnZ6J8DJtswj6h08/cdzQgBHzxzjEVT\nUO+rzjqoPHfK5pEM6RD2LcACIcQcIUQWcDPw9wmekxJRKVlZkTM8ch2P0pVq99emX0Mst7diloo4\ndjaO0tUkGoUNPwZXKZz18YnHn3cp+DtY//IGXqppIxpNXznfmwc7+PZjuzhnTh5fvWLh8JOHXoat\n96tU0cqbRx/gom+C9xiVhx/DnmVUlTF+D/x6naoYOvwGPPM1VbJ5yfcGn3aw3ZvW/DoABiO9llJy\nAo0ZW/Iotz2I15jNuc9X0OFYgJyqBbu4TwwuCqdS2AGyKygTHROXO7bX0OtSOz0nTIOOQrBkDQsj\nhzh0cD8OfyOtoojCNDTorsy3c7A7iqy6QKUTp4iX9rexYlY2JZEWiIRHv+hI7I7hVBF2KWUY+ALw\nPLAP+KuUckp2DXz58oX87fPrknvSpd9X0fXGfwPUxoZsm5mdjaOY8Wz5nVoQvfQH40frMd6IqhTD\nWxue4OMPbOGm+94inIb+noc7fXzmf7dRVWDnNx89a2R545u/BGex+t7GouoCqFiL4Y27WVYcq4x5\n/nvKh+RTL8JXa1Q+/lsNg+Wc/QMRmrr705pfj9PvqqSctswseQwPEK55jkeD51CU5+bJnvlED781\nzJMobcTsBDzSNbWpGICcCgqjbbT2jrP7NFYR02RSVSwTFi6MQvlFt2ESUWxPfBxrxMte19q0tPur\nyncwEI7SPesitZ7WmX4X0S7fANuPdnN73na45wwVGDWOUl5ZtwEsbph1ZtrnkAppSQZJKZ+VUi6U\nUs6TUv4kHWOmjexZcO4X1GajhtcRQrCiPHtkxH5st7IOmHcZnPGRCYd9aX8bH/3rEZoMZfzz3GN8\n/5rFbGno4tFtk+vqEopE+eLD2xECfn/bGnJO3Hbdtg/q1sPZnwbTOFGPEHDhN6C3kY+bX2Bh899h\nx59g3ZdVnb/RpPLxQ1I4tW19SAkLitMv7OTOplK0ctSTeW3yPHVvY5YDWOZfxJN3rKPetRpjdAB5\nZIzWb5MhZgDWzRRXxQBkl5MTaiUYjtIbGCMSjVXE7IuUUey2pLQTNq9qGTWWZZR699AgymkrvnCS\nE1csKlF/p3sdsc1AdevTMu5QXq1tZxFHuPrgj6H0DLVI+9d/Gv6hHq9fn3Ph6PXr08D0Z/lPBud/\nRVmVPv4Z6O9iRXk2B1r7jleKtO6FP1wPthx43y9H1q2PwoNvNlCabaNo+WXktG/lk+dVsqoyh/9a\nf4D+gTEqUCbgqMfPzfdtYsfRbn76wRWU546Sh9zyOzBZYfUnJx5w/mUw50Kubr6XO8Wv8JdfqFI0\nY7AntpEp6TxqAlgK5+MW/RxrnVoDJCklx3oCab0zqN2qBGPtxddgMAhWXaBavzVun4K87qBPzBS0\nxTuR7HIsYS8u/LSPVfIYq4h521vMohSi9Ti9i1Uhwr0D72VhaXILsGMRb435rjcH8ubCwZfSMu5Q\nXtnfzh2WfyCMWXDLo/CB30BvI2z61fGLOg6oY/MvT/vrp8rpIewWJ3zwd+A9Bv9zDRdYDmKPemmo\neQde+zn89lJAwMf+piL8CejyDfB6bQfXrizFPPcCCPQg2vbyjfcsorU3yJOJ7m4dwjM7W3jv3a9x\n4Fgfd998BlcvH6UcLBKC3Y8rQ7JE+kUKAbc+Tvu53+cv4Yt5fvld40b5e5t7cVpMVCZgMJYs7jK1\n287XMjW2x6FIlN++eog1P9nA2n/fwJqfrOfyu17hud3HJp3Xl0feotlQypwqVW567ZqFNIsi2hum\nwFkwFrGHLIlt258U2armoUx00Ng1RlqpTXnEvNKVx+KS1PzTAVZdezuvrvkVN3z8G3zx0tHbyCWL\ny2qmPNemiioqz4XGt9PaeCMalWzef5T3iM2IpderFpxV58Oia+C1/zrerS1+pzD/srS99mQ5PYQd\nVO7rI38B7zHWvvwRdlo/TfVjl6vF0qp18NnXEt7q+/yeY4SjkmuXl6nnAjS8zrlz81lU7OKPmw4n\nJSa7m3r45z+/w4JiJ89+6QLef8YYHy4HX1I52OU3Jjw2RjN5V3ydfzPewbaW8asf9jT3sKTUnd6K\nmBiWQuUBHupIf2VMNCr52l938JNn97G41MW/Xb+M7713MUYh+Owft/GzF/ZPPMgYHO7wsjC4m76i\nNYPHrGYjPmcVlt56guHU7s7GJJZjNzlSaxuXFIPC3klDxxgpspYdhByltEacKS2cxjGbTFx4zS2c\nN78oYUuMRKgucbH/WB+Ur1Yfil3p+/va3dzD6sCbWGRgeJHCFT+GcD+8/H9VSubt+9Ru9JzxrbRP\nJqePsIO6Vfr828gP/p6fyVt5rOK78MXtcOtj4ErclOiZXS3MzrezbJZb1QPnVsHhNxBCcOvaSvY0\n97JjtKqbUQhHonz78Z3kOy38z8fPHt+Od9cjagPEvOQiA6NBrStsH6d7SyQq2dfSx5Ky9KdhAMhV\ni2+mnoa0D/2L9Qf4+45mvvGeRfzhk+fwUdNGPu3/Hc/cnMeHz67g3pcO8sdNqfXH3L1zK3nCS271\nBcOOO8oWMZsWXtuf2ma7MfF78As7Oa4pWOc4kVgt+1xTJw2dY/iyt+ygw6UcOlNZOJ1qFpW4ONTh\nY6B0tTpwdEvaxn55fzvvM75FxFU+fDdpwXyVCt32APz5ZmUUeOXMWlo8vYQdwFGAWP5B3i67lT8G\nz4e85LY2e4NhNh3q5MolxcdX9mefr8oHo1GuXzULm9nIo9sS837fUNPG7qZefnDtErJt4yy8DPiU\no+TS68GUfO71jIocalr6xtyBWt/hoz8UYelUCXuWgx5jHk5/Cp7441DX1sevXj7IB1bN4o6L58Hb\nv1XWCpvuxXTfBfykfAsXLSzkJ8/sS8wj6AQ8daoConDR2mHHS+csxSkCvPZumgvA/B56pqrBxok4\ni8FgptreS/1oEfuADzoOcNA0D5NBpNU/KF0sKnETiUrqZAVkOVU6Jk28WtPCeaYajIveM3LT0cXf\nVpsg619V5l5zL0rb66aD00/YYywtc1PT0kckydrz12s7CEXkcLP8qnVqI1T7PlxWM+cvKGDjvraE\n0jHr97bispq4etkEdwz7/wEhX3JpmCGsqswlHJVsOjS61fCeZnWHsbQscR+QZOmzl5MfaklLSWic\nH/19L/YsI9+9ZjGirwX+8S1YeDV87QAsuBLDs1/lvvD3uJEX+cVTKbzpW/cQwYgoXDTssKlQpe3q\nD+ygLxmP/4nwd6pSx6l0doxjMED2LOaYPaML+7FdgGTbQCXzi5zjtmKcLuJ5/z3HvCrd2pieiN0b\nDBNu2o5N9qu8+onY81Rq9xsH4fpfjTw/zcy839RJYkmpm/5QZPQ/6HF4qaYNl8XEmqohi5ezj+fZ\nAS6tLqK5JzChm2E0KnlpfxsXLyoa2985zq5HwT0rZYOhCxYUUJZt5Wcv7B91I9UzO1vIc2RNTalj\njKizlEK6aelJj3/25kOdvF7XwZcuX6hKA3f8GWQErvq/4CqGmx6CK/4Ny0APPzb+jm/XfoR33038\njd/Y5WfWwCF6nHNHLjrnqwXA0kgzTybj8T8BUb+Hjqn2iRlKdgWldNDY5R9ps9GyA4AN3aVUT2Lh\ndCqZV6h6p25p8MCs1apsOTz5iqi9zb2cLWLeRrPH2Ttjz5sxJY5DOW2FPR6ZJtwTFFVK99L+Ni5c\nWDhciHNnq4WomLBfskhF8y/VjJ9/3d7YTYd3gMsXT9Aqq69Vrbwv+2DKPhRWs5FvXlXN7qZefrGh\ndljU3Nzdz/p9rdy0pmLiD5hJYHKXUCi6E++zOQH//VIdBc4sbjmnUlVDvPtHlRbLm6suMJpg3Rfh\n85sJ3vYCCAMFT/0TYX9ineK3NHhYbDiCsWTZyJPZ5UijhTWuTh5KcrF8PKK+jqnrdToa2RXkhtqI\nSjhy4u+lZQdRRxE7e21UT0EJbDowGARnV+Wx6ZBHeRLJCHTUTnrcXU09nGOoIZy3QAUJGcZpK+zz\ni5yYjWIwBZEIe5p7aesLjt6zcPa6WJ49Qkm28tR4qWZ8m9oN+1oxGgQXLxwynpSqjGqoULz4A1W6\neNZtCc91NN63sowrlxRzz4Za3nvPazy0+TCf/9M7fPaP25DAR86e2lV9e24pbtFPc4dn0mO9e6SL\n12o7+PQFc7GajXBkE3gOwapRjNuEwFJ1DrUX/pKKaBPvPnF3Yq9Rc4hS4cFVtWrkSYMRkTeHtdld\n1Bzr462D6emmJfyddMrskxixl2MLtmEiPLIypnErPTlLADFjI3aAc+bmc8Tjp80W+0Bvm7zZ3J5G\nD+cY92Oae8HEF89ATlthzzIZWFjsSrzZM7Cxpk31pR2tNd2CK1S5VZNqA3ZpdRHbjnTR4x87/7ph\nXxurZ+ceN+6vfw1+cyH8bD78vBqe/abylN/5F1j3JbVTdBIYDILffPQsfvPRs+gPRfjeE7vZfMhD\nR1+Qm1ZXJNQgezI4C1UZp6d18h5x975UR47dzC1rYw0bap4GY5bqCD8Gay55P7VZi8mr/Qtd3vFv\n16WUtB9UjoSGkqWjX5Q3j7JIM0UuC/dsnHyUSCiAMeSlU7oomOrNSXFyKhAySonoGp6W9LZDx34O\n2c3t3D4AAB0lSURBVFcCCTqqThNr56q06Js9OWAwQdvkF7R9R3fhxD9jvF+S5bQVdlB59r3NvQnf\nRm+saWNFec7o0dT8y0AY1SIncEl1EZGo5JXa0dMxjV1+ao71cfni2G3erkfhDzdAsBcu+b6y4N32\nP/D6f6nV9wu+ltL3eCJCCN6ztIQXv3IRT9xxHm9951Le/M5l/McHV6Rl/PEwxW5pvZ7JCfue5h7W\n72vjE+vm4LSY1N3N/meVP45l7MhSCIHz3I8zjyYe/fsT477G/tY+Svrr1BfFy0e/KHc2hp5GPnPh\nXDYd8rC1YZJ3Iv4OADo5mRG7qmVfZvMMXxM6rBpQb44uJtdupigNpl1TxeISN9k2M2/Ve6Fg4aQj\ndv9AmMJutb5AxdlpmOHJ57QW9qVlbjp9Awk18+30BtnR2M2li8bIh9tyYfZ5g8J+RkUOeY6skemY\nmmfh59WU/LKKJ7J+yAf8f4VHP6GaZZSvgdtfgYu+Af/nf+HrB9Sq+y2PgDmN/uionPuqytwpzamP\nwKl+dsHuydkKPPhmA44sI/90XpU60FGr0jCLrp7wuaXnfYSgwYZt3yNjWzcDrx3ooFocJWLLH5z3\nCLIrIOTjI8uduK2mlGvlB/GpIGDKLXuHUqS6WJ6f3c7upiFpycNvgNnOxt4yFpWM04pyBmAwCNZU\n5bG5vhOKFg+2hkyVfS29rDIcIGgtVA1sMpDTWtiXxBZQE8mzv1rbjpQqxTImi96rvDU8hzAaBBct\nLOTl/W3HSyrf+V94+MPgKOQFx3XkGQPkb/p32PeUapbxsSeVX00cWy6cjB2IJwuH+tnJvtRb5AVC\nEf6x6xhXLy89Xvd/QH2YsvCqiQewuBBzLuAC425+8szYkd0rB9pZldWoFk7HErXYTkObr5H3nzGL\nf+w+Rk//JEoffSpP32fMwZ41xXYCcZxFYC9gpfkoB1r7jvscNbyBLD+bva39M3Jj0omsnZtHQ6ef\nPvcC1WQmkHiK9UR2NfZwlqhFlq9JyDdqJnJaC/vi2BbpRPLsbx3sJNtmHn8Dz5L3gTCoHWmoD4Eu\nf4hth7vgyGZ4+qsw7zKO3vAkn+/4AI+c8xh8+yh8t1k1yxjPrfFUwKHWJqzBzrFb9U3Ai3tb6QuG\n+cCqIbYLe/8GJSsgZ5x+lEPImn8JszlG7YF9HGof2Vmq0xvk7UNtzJFH1VbxsYhvIe85yv9ZXUEw\nHOXvOyZR+hiL2KP2gpMXIQsBxUupDNUTlbEqMV8ntO2hp/hs/AORwffJTCbeiGZvJNYMo70m5bHq\nDx+mytCKZU5m5tfhNBd2l9XM7Hz7oKvheGyu97CmKm98H5Xscqi+FrY9CAM+LqkuIstk4LVtO+Gv\nH1XnP3Q/D2xpxSgEt55bBVb3jKyDnRJMWQTNORSKbo6lWMv+5LtNlGZbj3eU6mpQC9bLPpj4ILFd\ngueb9vKXrSN3wj67q4UK2YJZBgfb+o1KXNi7j7BslpvqEhePjDJewsRy7MaxUj9TRfEy3L11GIiq\ndEydalqx167yy5kQsS8udeOymni9K1cdmIQ3u2hSG9lEhubX4TQXdoBlZaN4s5/AsZ4Ahzv9g6vv\n47L2Dgh0w9u/xWkxcdV8O1fu+QYy6IWb/0SPdPLXLUe5ZkUpJdkTN/M41QjbCygUPQmta4x4biTK\nW4c6uWJJ8fEP2N2Pq8elNyQ+UOFisBfwgZw6HtvWSOiEnbB/39HMJTmxdFHxKDXscWw5qrlC9xGE\nENy0poKdjT2DvXmTxtfOAGYcrqnb/TsqJcsQkQCrHB71XjjwHDiLeTtYgRDH7XFnMkaD4Jw5eTzf\nZFF3zSmagQVCEUp6dxERJuW/nqGc9sK+ojybpu5+Oscpf9tcr3Kf54zXoTxO5Vq1pX39j+CZr3Nn\n51epjh7k4Pk/QxYt5rtP7KI/FOEzF06udDFjcRZTIHpoG8v/exxqjvXhH4iwOr7rV0pVTVS+ZtBk\nLCEMBphzIasiO+nwBnni3eNVOnVtXrY0dPGegg5VOneClcAIciqhW0Xp158xiyyjgb+mGrX7OvDg\npsB1kj/wY3cll+W18/+3d+fBbd5lAse/j+RTPuX7ShwncQ4nTXMVKG2Ssj0psG25l3u4z1kWmFKW\nXWBYdoabWWCXpcxy7MDCsNBSoJRCWyB0oUfa3JfjK05iS74jWT5l/faP93ViJz5kW9ZrSc9nxiPr\n1ev0p7evH//0O57n+Lkeq2hE/W2c8oWoK84hO17j/Uu0s9ZLY+8YkbxqazJ9EU52BtghjQS9W6Oq\norZSaWC3q64fuTB7r/3p1j7yMtOiy3woAq/5vrVC49nvkMsQ75dP8oHna/jio6d5+GgnH7ltw/Jl\nUVzh0vPLKWUAf2DhPfZn7eWEu2vtj9utf7LWLO9408IbsnYfmcNdvLQ8wNcfP3NpO/3XHz9Ddrqb\na9MvWEvn5pv3KFwNA+0AeHMyuLWhnAcPXlhUOt9IqJvuSB7l+XEOKCUbwZXGjemnKO19BkYDROpv\n59m2PrbVxPnTwxJM7iYPeFZB3+J67CfO9XCtNJNW+8JYNi3uUj6wX1NTgAgcOTd7YD/YPsD21YW4\no81Tnp4Ff/dj+FQfro+e5C1vfAtN3YN864/NvHpXDe9N1d46kF5Qsege+4Gz/VQXZlNVaC/9fPJr\nkFthFSxfqDqrPNs/rPdxvn+Yj/7vYX7wlzZ+daSDt754DRndR+cehpk0GdjtvRCvvW4VA0PjPHZi\n4St/woEu+kx+/AN7ehZsez1bfb/gs2nfYyS7gmPZu+kNjXHTbMt7V6DJyl8+d+Wie+y9zc+RJePk\nrF9cTqaVIuUDe25mGutKc2cubo1V4LnRH2T7qkWU83JZH2H31JfyrTfu5Jtv2MGXXr1tWQpZJArJ\nLSNHRrk40L+gnzPG8FxbP7sme+vtT0HLH+H69y9uNZG3DgpWUx96jvfuW8ejx318+pfHqSvO4T07\ncyDYCVUzpBK4UsEqGAta2T2BG9dbydYWMxxjQj30kE9FgQOro27+Z8SdQZ3Lz69W38sTzUGrbO6G\nGXZZr1CleZmU5WVyZrzMKlgyHF1OoKkyO600zYk8cQqQNv8pyW9bdQH7z/RgjLlqmdnxjotMRMyl\nIZvFum1L9IU8kpqnBICRiwvr0foCI/gCI1Zgj0zAbz5mZbuMpvbrTERg7V7k5K+479563r13LReH\nx1lT7EHO/M46pyqKyTPvGuuxvw08Rbhdwqt31fCNPzTRMTB8+dNFFNzDvfSZbWyM9xg7QF4Fcvd/\n8P1H9vPwxc2M93Vf2mSXSBqq8jnUXcgrwJpAzY7ij7NtZHyCqsFjBLLLyc+vWrY2xkPK99gBdtR6\n6RkcnbGKzGQlpGsTaKxxRbNrtY4Hexb0Y6d81i7Rhqp8K9WC7yjc/q9WPdvFqtsHIxfBd4SinAzq\nSnKsP+wdBwGx1sbP51Jgvzyme8/OGoyx1txHbSxE2sQwvU4MxUzacjcdDe/iwNl+Dp0b4Oa5NuOt\nUA2V+Tx10f5dXeA4+2lfkGukhaHSa5ehZfGlgR3r4zPAkzPkdTl8boDKgizKnPplSzbZVmCPhBaW\nV6XRDuwbCoA/ft7Kptlw99LaYo+z0/Kn6cc7DlkTp9H80ZgM7FOCSF1JDrXFHv48S56gGYWsP3T9\nUkCxg73kO6+pZF1pLh++pZ537lnrWDsWa0tVAa0T9h+kBY6zn25tZ43LT1btdfOfvMJpYAfWFHuo\n8Waz/8zVvcgj5wcSamXAimf32NPHBha0+/S0P0hFfhYFh++3dmje+tmlb/fOq4DSTdbqmqk6DkY3\nvg5W8M8pu2rd9I3rS/hrc+/VxStmM2gNTU1kFTs6B7N9VSGPfWQfH75lg5UOOcE0VOUzRBbDmSUL\nXsseaLGKsBSsS+zxddDADlhZ//bUl/BUc++0zSq+iyO09Q5dnrBTS+ex9gJ4ZZDuBWxSavQH2ViW\nbVWE33inVZU+Fur2wdm/QnjMej7QDoO+6AM7WHVz+9qmHdpTX0pobIKD7VFOEgetVAQTeZXR/3fV\nVWqLPORkuOlOq1rwUEy6/xAAEs3cygqngd22p76U4GiYg+2XZ9L32x+l99QnzsqAFS/LmoT2SjDq\nJY8TEUNT1yC3Z5+2ct5vf0Ps2lO3F8LDl2tlnvy19Vh/a/T/hrfOmjyd4vp1xbhdwp9n+BQ4o0An\nAO6C6nlOVHNxuYTNlfm0TJQtaChmNDxBZegEfVmrpifiS1Aa2G176kvITnfzs+cuL1Pb39hNaV7m\niq4ek3DcaUxkFFDIYNSblM71DTEyHuFFI3+CjDxYv4CgO581N1p59E/ZAf3EQ1b+9YUUNSmqg8CF\nabU2C7LT2bXay2Mno5xADXYwRho5hYk3YbnSNFTlc2S42FqyOhZdGcZG3yBbpYXhJJg4BQ3sl+Rl\npXP3jmoeOtTBwNAYExHDk0097KmPY6a9VOHx4pXBOdM4THXaHySdMKv9j8Oml8V2q3d2oZVA7Lnv\nW4WQzz1tZelcCG8dYKB/ej72WxvKOeULRlXjNTxwAX/ES1lBbPPup6KGynyaxu1P2Vd8kprNmZZm\nqqQPz5rEnzgFDezTvOX6WkbDEX7y7DkOtPUxMDTOvgTaoJEoxFOMlyB9oehylzfay9DSxgKw6c7Y\nN2jvx2B8GL73UsBAw10L+/miOuvxism6WxusilHRLHscH+jAh5cKXX21ZFuqCmgzdmWyKCdQgy1P\nA1C4PvEnTkED+zSbK/PZU1/CN59o4rO/PkFJbiY3b068CuUrnctTRLE7RP/QWFTnN3YNclOulY+F\nmmX4xSvdCLvfblXLed0P50/8daUie1lgb9O0w2tKcthQnsvvTkRRMSrQgc8UUZmCGT9jrb48l/Ni\nbwiMcpw9w3+YCC6kUodiEJHXiMhxEYmISIyWKTjrc3dvJRyJcLwjwL13bLRqaqrY8hRRJIP0haIM\n7L4gL0pvgfwayF+mVSMv/yq878k5i2HPKqfEKiLSdXVJtju2VPBMax/+wBwTxcaQHvLhM0XUeJe3\noHgqyEp3U1pawaArL6qVMWPhCFWhk/Rk10FGThxauPyW2mM/BrwS2B+DtqwItcU5fOFV23jd7lW8\nemeN081JTtlFFBCMqsc+Fo7Q3D3IhonTULMrDo1bpLKGGWtt3rWjmoiBX81VWWlkgLTICF14UzJH\n/3LYUpVPu4luZUyjL8AWaWEkSSZOYYmB3Rhz0hhzOlaNWSnu2l7NF1I8Wdey8hThMcMEBkPzntrW\nG6IwMkDhaKeVd32lKt9ilWOLTN+QtK40l2trCnjg+Quz/CCXljqOZJWTkaajo7HQUJVPU7iMid75\nA/vJU8cpkQD5SbAxaVLc7iIRebeIHBCRA93dC9hqrZJPtrXhayKKtAKN/iDbXfbYdfUKHu0r2wzj\nQzNO1t2zo5oTnQGr7NxM7M1JJHjiqZWkoTKfs6YcV+A8TMw9ST/QlFwTpxBFYBeRx0Tk2AxfC1o6\nYIy53xiz2xizu7RUV5qkNDutgAxHEdh9Qba4zmIQqIwiKZdTyuzaqF0nr3rpnh015GWm8e9/aLrq\nNeBSjz3Tq0N/sdJQZQV2MROXCqHMxBhDuv8wYdKiy7+fIOYN7MaYW4wxW2f4eigeDVRJyE4E5gkH\nGB6bO1/MaX+Q7VmdiLd2ZU9slW0CZMYJ1AJPOm+7YQ2PHPNxynd1PdSJgfMA5JVqYI+VQk8GoRy7\n2PgcE6jN3SHqw2cI5EdRLSuB6ICeij+7x14oQfrmmUBt9A+ywdVhJetayTJyrEyPvqMzvvyOG+vI\nzUzjy49ePSU14m/kvCmhsjjxt7KvJJ7yeuubOdayP9PSwzWuVtJWreCJ+UVY6nLHe0TkPHA98LCI\nPBqbZqmkZvfYvTJI/xxLHkfGJzjfG6Bi/NzC15Y7oeY6aP/rpTJ5UxV6Mnj/S9bx2Mku/tI0PX9M\npKeJ1kgFNV7ddRpL1avWMGQyCXfPMgQGtDYeIV+GyEuiiVNY+qqYB40xNcaYTGNMuTHm9lg1TCUx\nu8fuZe617E1dg6zCj9uEV36PHWDtPiul8Azj7ABvv6GO6sJsPvfwSSYidvA3hsyLrbSaSl3DHmNb\nqgs4a8oI+c7M+LoxhrF2uxRe1c54Nm3Z6VCMir90DxF3JoUy91r2Rn+QerGXCSZCYJ8s3NE687aO\nrHQ3H3/pJk50Bvj589a4OqEeMsJB2qVS17DHmLUypmLWMfbz/cOsHmkk7MpKjPtrATSwq/gTgeyi\neXvsjf5BNrrtwF6yIU6NW4LC1VZCsCsLd0zxim2V7FhdyJcfPU1oNIzptXqT2RUbdQ17jNV4s/G5\nK/AMnb9qfwHAM619bHM1M1Z2DbiTa4e53knKEZJThHeetAKN/iA7snxQsHpptU3jae0+aHvycuGO\nK4gI//SyBrqCo3x7fwtdrccBWLc58Ys7rDQiwnjBGtLNmJVW+QoHWrrY6jpLdm1yTZyCBnblEMku\notQdmjOwn/YFWev2Q8n6OLZsiTa9AkYDcPo3s56yq9bLy7dVcv/+Zo4ffZ4x4+ZFOzSwL4e0Cmt/\nwYTv2LTjxhjOnzlMNqNItQZ2pWLDU4TXNXuPPTQa5sLAMOXhTjvfeYJY9xIrWdnz/z3naR+/YxMZ\nbhdjXWfwp1VS4U2QTyQJxrt2JxEj9Dc9M+348+39VITsPQcLKYOYIDSwK2dkF1FIcNa6p229IfIZ\nJCscsNaHJwqX2yrd1/wEDJyb9bRVRR6evO9v2Fvgp6j2mjg2MLVcu66GFlPJSPvz044/dKiDHe5W\nTGYeFC2gWlaC0MCunOEpIjcSpGuWdLZtPUOsli7rSVEC9dgBdr7ZCvBPfm3O0/LD/XgG28lZd32c\nGpZ61hR7aHSvI6/v8lBMeCLCw0c6uSH7LFK5HVzJFwaT7x2pxJBdhJsIQ8E+zAwbetp6Q9ROBvZE\nGooBa3XMrrdZ5fZ6m2c/r/0p63G1BvblIiKEirZSEO6BoFXJ6peHO4iEelg9egbW7HG4hctDA7ty\nhr1JyTMRIDASvurl1p4Qm7N6rSfe2ni2LDb23mvlHnniX2Y/59zT4M6EJKnas1JNrnrpb36G8ESE\nbzzRxOuLmxAMrL/F4dYtDw3syhmTaQWYeTimrSfE5sxeqzJRZl68W7d0eeVw/Qfh+IPQcXDmc9r/\nCtW7kir51EpUu+V6xo2bvmOP8+DBC7T2hHhTcSN4ipNy4hQ0sCuneC7ni/EHrp5AbesNUevqSrxh\nmKle/CErePz+U1fnjxkdhM7DsPqFzrQthWxaU8Vf3LvwNj/Alx85zo6afKp6/gLrbk7K8XXQwK6c\nMrXHHpzeYw+OjNMzOEZZuDOxVsRcKSsf9t1npRg4/sD01w7/GCJh2HinM21LIeluF2V730WRucj2\nkaf4+jXNyFAPbEje1FYa2JUz5uixt/UMkU6YvFF/4q2IudJ174DK7fDbT8CQXVgkEoGnvw1VO1d2\nub8ksnnPKxnKLOOLBT9n1dOftapxbbnH6WYtGw3syhlZBYBQlha6qsfe3D1ItXQjRBK7xw7WssdX\n/BsM98NP3gDjI3Doh9B7Bl70Pitvjlp+7jQ8r/kWBZluGA1a/09cbqdbtWySK/ONShwuN2QXUjk+\nzNEreuwnOwOsc9t1cRN5jH1S1Xa45z/hZ2+Hr2yEkQGovREa7na6Zall/S3wwQPWH9nc5C7PqYFd\nOcdTTFno6h77ic4A1+cPwBCJPxQzaeurrInUQz+GnBK4+VOQluF0q1KPOy3pgzpoYFdOyimlZCgw\nbYzdGMOJjgDvLOyDsWzILXewgTG29ibrS6llpmPsyjm5ZXhNP/7AyKWKQt3BUXpDY6xxdVnj6zoG\nrdSCaWBXzsktJ3+in9FwhObuQcAahgEoHe9InmEYpeJMA7tyTm4ZGeMBMhnjUPsAMBnYDdmh84m/\nIkYph2hgV86xx89rs0IcPGcF9oPtA1zrHUXGh5JjRYxSDtDArpxjB/YXl4U5dG6AkfEJ/q+phztr\n7MlUHYpRalE0sCvn5JYBsL1ojNO+AH883cXQ2AR7ioLW69pjV2pRNLAr59g99k05w0QMfP6RU2Sl\nu9iQ5gdxJ2a6XqVWAA3syjk5pYBQnxPi1oZy2nqHuGFdCWkDLVZQd6c73UKlEpJuUFLOcaeDpxh3\nqItvv2kXvzh0gW01hfBAExSvd7p1SiUsDezKWbnlMNiFyyW8cmeNlbe8t8XKpaKUWhQdilHOyi2D\nQf/l50EfjIegOPkqxysVLxrYlbPsHvslvU3WowZ2pRZNA7tyVm4ZDPogMmE972u2HnWMXalFW1Jg\nF5EvicgpETkiIg+KSGGsGqZSRMkGmBiD/jbreW8TuDMhv8bRZimVyJbaY/89sNUYsw1oBD6x9Cap\nlFKx1Xr0HbUeO49A6YakLTKsVDws6bfHGPM7Y0zYfvoUoN0stTClm0Fc4D9mDcdceA5qXuB0q5RK\naLHsFr0deGS2F0Xk3SJyQEQOdHd3x/A/qxJaehYU14P/OHSdhLFBWKWBXamlmDewi8hjInJshq+7\nppzzSSAM/Gi2f8cYc78xZrcxZndpafKXplILULEVfMfg/DPW85rrnG2PUglu3g1Kxphb5npdRN4G\nvBy42RhjYtQulUrKt8Kxn0PT41Zd0KK1TrdIqYS21FUxdwD3An9rjBmKTZNUyqm4xno89bA1vq7l\n8JRakqWmFPgmkAn8XqxfxqeMMe9dcqtUaqnbC/vug4GzsOPNTrdGqYS3pMBujNFdJGrp0jLhJbpS\nVqlY0cXCSimVZDSwK6VUktHArpRSSUYDu1JKJRkN7EoplWQ0sCulVJLRwK6UUklGA7tSSiUZcSK9\ni4h0A2cX+eMlQE8Mm5OI9BroNQC9BpB616DWGDNvFkVHAvtSiMgBY8xup9vhJL0Geg1ArwHoNZiN\nDsUopVSS0cCulFJJJhED+/1ON2AF0Gug1wD0GoBegxkl3Bi7UkqpuSVij10ppdQcNLArpVSSSajA\nLiJ3iMhpEWkSkfucbk+8iEibiBwVkUMicsA+ViQivxeRM/aj1+l2xpKIfFdEukTk2JRjs75nEfmE\nfV+cFpHbnWl1bM1yDT4jIhfse+GQiNw55bWkugYiskpE/iAiJ0TkuIj8vX08pe6DRTHGJMQX4Aaa\ngbVABnAYaHC6XXF6721AyRXHvgjcZ39/H/AFp9sZ4/e8F9gJHJvvPQMN9v2QCdTZ94nb6fewTNfg\nM8DHZjg36a4BUAnstL/PAxrt95lS98FivhKpx/4CoMkY02KMGQN+AtzlcJucdBfwA/v7HwB3O9iW\nmDPG7Af6rjg823u+C/iJMWbUGNMKNGHdLwltlmswm6S7BsaYTmPM8/b3QeAkUE2K3QeLkUiBvRo4\nN+X5eftYKjDAYyLynIi82z5WbozptL/3AeXONC2uZnvPqXZvfEhEjthDNZPDEEl9DURkDbADeBq9\nD+aVSIE9ld1ojNkOvBT4gIjsnfqisT6HptS61VR8z7ZvYQ1Hbgc6ga8425zlJyK5wM+BDxtjAlNf\nS+H7YE6JFNgvAKumPK+xjyU9Y8wF+7ELeBDr46VfRCoB7Mcu51oYN7O955S5N4wxfmPMhDEmAnyH\ny0MNSXkNRCQdK6j/yBjzgH045e+D+SRSYH8WqBeROhHJAF4P/NLhNi07EckRkbzJ74HbgGNY7/2t\n9mlvBR5ypoVxNdt7/iXwehHJFJE6oB54xoH2LbvJgGa7B+tegCS8BiIiwH8BJ40xX53yUsrfB/NJ\nc7oB0TLGhEXkg8CjWCtkvmuMOe5ws+KhHHjQusdJA/7HGPNbEXkW+KmIvAMrBfJrHWxjzInIj4Gb\ngBIROQ98Gvg8M7xnY8xxEfkpcAIIAx8wxkw40vAYmuUa3CQi27GGH9qA90DSXoMbgDcDR0XkkH3s\nH0mx+2AxNKWAUkolmUQailFKKRUFDexKKZVkNLArpVSS0cCulFJJRgO7UkolGQ3sSimVZDSwK6VU\nkvl/sskeMfGLxo8AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pY=sess.run(output,feed_dict={inputs:test[10][0],drop_keep_rate:1.0})\n", + "plt.plot(pY[:,8])\n", + "plt.plot(test[10][1][:,8])\n", + "plt.title('test')\n", + "plt.legend(['predicted','real'])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pY=sess.run(output,feed_dict={inputs:train[1][0],drop_keep_rate:1.0})\n", + "plt.plot(pY[:,6])\n", + "plt.plot(train[1][1][:,6])\n", + "plt.title('train')\n", + "plt.legend(['predicted','real'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#close session avoiding memory overflow\n", + "sess.close()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/RNN/.ipynb_checkpoints/LSTM_scan_LV1-checkpoint.ipynb b/RNN/.ipynb_checkpoints/LSTM_scan_LV1-checkpoint.ipynb new file mode 100644 index 0000000..7171e3f --- /dev/null +++ b/RNN/.ipynb_checkpoints/LSTM_scan_LV1-checkpoint.ipynb @@ -0,0 +1,365 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import numpy as np\n", + "import time\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class LSTMcell(object):\n", + " def __init__(self, incoming, D_input, D_cell, initializer, f_bias=1.0):\n", + " \n", + " # var\n", + " # the shape of incoming is [n_samples, n_steps, D_cell]\n", + " self.incoming = incoming\n", + " self.D_input = D_input\n", + " self.D_cell = D_cell\n", + " # parameters\n", + " # igate = W_xi.* x + W_hi.* h + b_i\n", + " self.W_xi = initializer([self.D_input, self.D_cell])\n", + " self.W_hi = initializer([self.D_cell, self.D_cell])\n", + " self.b_i = tf.Variable(tf.zeros([self.D_cell])) \n", + " # fgate = W_xf.* x + W_hf.* h + b_f\n", + " self.W_xf = initializer([self.D_input, self.D_cell])\n", + " self.W_hf = initializer([self.D_cell, self.D_cell])\n", + " self.b_f = tf.Variable(tf.constant(f_bias, shape=[self.D_cell])) \n", + " # ogate = W_xo.* x + W_ho.* h + b_o\n", + " self.W_xo = initializer([self.D_input, self.D_cell])\n", + " self.W_ho = initializer([self.D_cell, self.D_cell])\n", + " self.b_o = tf.Variable(tf.zeros([self.D_cell])) \n", + " # cell = W_xc.* x + W_hc.* h + b_c\n", + " self.W_xc = initializer([self.D_input, self.D_cell])\n", + " self.W_hc = initializer([self.D_cell, self.D_cell])\n", + " self.b_c = tf.Variable(tf.zeros([self.D_cell])) \n", + " \n", + " # init cell and hidden state whose shapes are [n_samples, D_cell]\n", + " init_for_both = tf.matmul(self.incoming[:,0,:], tf.zeros([self.D_input, self.D_cell]))\n", + " self.hid_init = init_for_both\n", + " self.cell_init = init_for_both\n", + " # because tf.scan only takes two arguments, the hidden state and cell are needed to merge\n", + " self.previous_h_c_tuple = tf.stack([self.hid_init, self.cell_init])\n", + " # transpose the tensor so that the first dim is time_step\n", + " self.incoming = tf.transpose(self.incoming, perm=[1,0,2])\n", + " \n", + " def one_step(self, previous_h_c_tuple, current_x):\n", + " \n", + " # to split hidden state and cell\n", + " prev_h, prev_c = tf.unstack(previous_h_c_tuple)\n", + " \n", + " # computing\n", + " # input gate\n", + " i = tf.sigmoid(\n", + " tf.matmul(current_x, self.W_xi) + \n", + " tf.matmul(prev_h, self.W_hi) + \n", + " self.b_i)\n", + " # forget Gate\n", + " f = tf.sigmoid(\n", + " tf.matmul(current_x, self.W_xf) + \n", + " tf.matmul(prev_h, self.W_hf) + \n", + " self.b_f)\n", + " # output Gate\n", + " o = tf.sigmoid(\n", + " tf.matmul(current_x, self.W_xo) + \n", + " tf.matmul(prev_h, self.W_ho) + \n", + " self.b_o)\n", + " # new cell info\n", + " c = tf.tanh(\n", + " tf.matmul(current_x, self.W_xc) + \n", + " tf.matmul(prev_h, self.W_hc) + \n", + " self.b_c)\n", + " # current cell \n", + " current_c = f*prev_c + i*c\n", + " # current hidden state\n", + " current_h = o*tf.tanh(current_c)\n", + " \n", + " return tf.stack([current_h, current_c])\n", + " \n", + " def all_steps(self):\n", + " # inputs shape : [n_sample, n_steps, D_input]\n", + " # outputs shape : [n_steps, n_sample, D_output]\n", + " hstates = tf.scan(fn = self.one_step,\n", + " elems = self.incoming,\n", + " initializer = self.previous_h_c_tuple,\n", + " name = 'hstates')[:,0,:,:]\n", + " return hstates" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "num of train sequences:83\n", + "num of test sequences:20\n", + "('shape of inputs:', (1, 886, 39))\n", + "('shape of labels:', (886, 24))\n" + ] + } + ], + "source": [ + "def weight_init(shape):\n", + " initial = tf.random_uniform(shape,minval=-np.sqrt(5)*np.sqrt(1.0/shape[0]), maxval=np.sqrt(5)*np.sqrt(1.0/shape[0]))\n", + " return tf.Variable(initial,trainable=True)\n", + "def zero_init(shape):\n", + " initial = tf.Variable(tf.zeros(shape))\n", + " return tf.Variable(initial,trainable=True)\n", + "def orthogonal_initializer(shape,scale = 1.0):\n", + " #https://github.com/Lasagne/Lasagne/blob/master/lasagne/init.py\n", + " scale = 1.0\n", + " flat_shape = (shape[0], np.prod(shape[1:]))\n", + " a = np.random.normal(0.0, 1.0, flat_shape)\n", + " u, _, v = np.linalg.svd(a, full_matrices=False)\n", + " q = u if u.shape == flat_shape else v\n", + " q = q.reshape(shape) #this needs to be corrected to float32\n", + " return tf.Variable(scale * q[:shape[0], :shape[1]],trainable=True, dtype=tf.float32)\n", + "def bias_init(shape):\n", + " initial = tf.constant(0.01, shape=shape)\n", + " return tf.Variable(initial)\n", + "def shufflelists(data):\n", + " ri=np.random.permutation(len(data))\n", + " data=[data[i] for i in ri]\n", + " return data\n", + "def Standardize(seq):\n", + " #subtract mean\n", + " centerized=seq-np.mean(seq, axis = 0)\n", + " #divide standard deviation\n", + " normalized=centerized/np.std(centerized, axis = 0)\n", + " return normalized\n", + "mfc=np.load('X.npy')\n", + "art=np.load('Y.npy')\n", + "totalsamples=len(mfc)\n", + "vali_size=0.2\n", + "def data_prer(X, Y):\n", + " D_input=X[0].shape[1]\n", + " D_output=24\n", + " data=[]\n", + " for x,y in zip(X,Y):\n", + " data.append([Standardize(x).reshape((1,-1,D_input)).astype(\"float32\"),\n", + " Standardize(y).astype(\"float32\")])\n", + " return data\n", + "data=data_prer(mfc, art)\n", + "train=data[int(totalsamples*vali_size):]\n", + "test=data[:int(totalsamples*vali_size)]\n", + "print('num of train sequences:%s' %len(train))\n", + "print('num of test sequences:%s' %len(test))\n", + "print('shape of inputs:' ,test[0][0].shape)\n", + "print('shape of labels:' ,test[0][1].shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "D_input = 39\n", + "D_label = 24\n", + "learning_rate = 7e-5\n", + "num_units=1024\n", + "\n", + "inputs = tf.placeholder(tf.float32, [None, None, D_input], name=\"inputs\")\n", + "labels = tf.placeholder(tf.float32, [None, D_label], name=\"labels\")\n", + "\n", + "rnn_cell = LSTMcell(inputs, D_input, num_units, orthogonal_initializer)\n", + "rnn0 = rnn_cell.all_steps()\n", + "# reshape for output layer\n", + "rnn = tf.reshape(rnn0, [-1, num_units])\n", + "# output layer\n", + "W = weight_init([num_units, D_label])\n", + "b = bias_init([D_label])\n", + "output = tf.matmul(rnn, W) + b\n", + "\n", + "loss=tf.reduce_mean((output-labels)**2)\n", + "\n", + "train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sess = tf.InteractiveSession()\n", + "sess.run(tf.global_variables_initializer())" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# 训练并记录\n", + "def train_epoch(EPOCH):\n", + " for k in range(EPOCH):\n", + " train0=shufflelists(train)\n", + " for i in range(len(train)):\n", + " sess.run(train_step,feed_dict={inputs:train0[i][0],labels:train0[i][1]})\n", + " tl=0\n", + " dl=0\n", + " for i in range(len(test)):\n", + " dl+=sess.run(loss,feed_dict={inputs:test[i][0],labels:test[i][1]})\n", + " for i in range(len(train)):\n", + " tl+=sess.run(loss,feed_dict={inputs:train[i][0],labels:train[i][1]})\n", + " print(k,'train:',round(tl/83,3),'test:',round(dl/20,3))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0, 'train:', 0.662, 'test:', 0.691)\n", + "(1, 'train:', 0.558, 'test:', 0.614)\n", + "(2, 'train:', 0.473, 'test:', 0.557)\n", + "(3, 'train:', 0.417, 'test:', 0.53)\n", + "(4, 'train:', 0.361, 'test:', 0.504)\n", + "(5, 'train:', 0.327, 'test:', 0.494)\n", + "(6, 'train:', 0.294, 'test:', 0.476)\n", + "(7, 'train:', 0.269, 'test:', 0.468)\n", + "(8, 'train:', 0.244, 'test:', 0.452)\n", + "(9, 'train:', 0.226, 'test:', 0.453)\n", + " 563.110000 seconds\n" + ] + } + ], + "source": [ + "t0 = time.time()\n", + "train_epoch(10)\n", + "t1 = time.time()\n", + "print(\" %f seconds\" % round((t1 - t0),2))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nlVIqyvw/RhD5mmvmQ/UAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pY=sess.run(output,feed_dict={inputs:test[10][0]})\n", + "plt.plot(pY[:,8])\n", + "plt.plot(test[10][1][:,8])\n", + "plt.title('test')\n", + "plt.legend(['predicted','real'])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pY=sess.run(output,feed_dict={inputs:train[1][0]})\n", + "plt.plot(pY[:,6])\n", + "plt.plot(train[1][1][:,6])\n", + "plt.title('train')\n", + "plt.legend(['predicted','real'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#用完关闭session\n", + "sess.close()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/RNN/BGRU_BLSTM_scan_LV2.ipynb b/RNN/BGRU_BLSTM_scan_LV2.ipynb index 45af0a1..fe0b715 100644 --- a/RNN/BGRU_BLSTM_scan_LV2.ipynb +++ b/RNN/BGRU_BLSTM_scan_LV2.ipynb @@ -20,9 +20,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "class LSTMcell(object):\n", @@ -168,9 +166,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def RNN(cell, cell_b=None, merge='sum'):\n", @@ -212,9 +208,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -279,9 +273,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "D_input = 39\n", @@ -355,9 +347,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "sess = tf.InteractiveSession()\n", @@ -391,7 +381,6 @@ "cell_type": "code", "execution_count": 10, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -514,7 +503,6 @@ "cell_type": "code", "execution_count": 11, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -636,9 +624,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -672,9 +658,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -704,6 +688,16 @@ "plt.title('train')\n", "plt.legend(['predicted','real'])" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#close session avoiding memory overflow\n", + "sess.close()" + ] } ], "metadata": { @@ -722,7 +716,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.13" + "version": "2.7.14" } }, "nbformat": 4, diff --git a/RNN/LSTM_scan_LV1.ipynb b/RNN/LSTM_scan_LV1.ipynb index 70e4a7e..7171e3f 100644 --- a/RNN/LSTM_scan_LV1.ipynb +++ b/RNN/LSTM_scan_LV1.ipynb @@ -104,9 +104,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -172,9 +170,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "D_input = 39\n", @@ -208,7 +204,7 @@ "outputs": [], "source": [ "sess = tf.InteractiveSession()\n", - "tf.global_variables_initializer().run()" + "sess.run(tf.global_variables_initializer())" ] }, { @@ -238,7 +234,6 @@ "cell_type": "code", "execution_count": 8, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -270,9 +265,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -306,9 +299,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -338,6 +329,16 @@ "plt.title('train')\n", "plt.legend(['predicted','real'])" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#用完关闭session\n", + "sess.close()" + ] } ], "metadata": { @@ -356,7 +357,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.13" + "version": "2.7.14" } }, "nbformat": 4, diff --git a/RNN/X.npy b/RNN/X.npy new file mode 100644 index 0000000..e7a331c Binary files /dev/null and b/RNN/X.npy differ diff --git a/RNN/Y.npy b/RNN/Y.npy new file mode 100644 index 0000000..93847e8 Binary files /dev/null and b/RNN/Y.npy differ diff --git a/XOR_gate.ipynb b/XOR_gate.ipynb index bb983f9..892581f 100644 --- a/XOR_gate.ipynb +++ b/XOR_gate.ipynb @@ -3,9 +3,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", @@ -13,15 +11,14 @@ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "tf.set_random_seed(55)\n", + "tf.reset_default_graph()\n", "np.random.seed(55)" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "class FNN(object):\n", @@ -85,14 +82,14 @@ " def variable_summaries(self, var, name):\n", " with tf.name_scope(name+'_summaries'):\n", " mean = tf.reduce_mean(var)\n", - " tf.scalar_summary('mean/' + name, mean)\n", + " tf.summary.scalar('mean/' + name, mean)\n", " with tf.name_scope(name+'_stddev'):\n", " stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))\n", " # 记录每次训练后变量的数值变化\n", - " tf.scalar_summary('_stddev/' + name, stddev)\n", - " tf.scalar_summary('_max/' + name, tf.reduce_max(var))\n", - " tf.scalar_summary('_min/' + name, tf.reduce_min(var))\n", - " tf.histogram_summary(name, var)\n", + " tf.summary.scalar('_stddev/' + name, stddev)\n", + " tf.summary.scalar('_max/' + name, tf.reduce_max(var))\n", + " tf.summary.scalar('_min/' + name, tf.reduce_min(var))\n", + " tf.summary.histogram(name, var)\n", "\n", " def layer(self,in_tensor, in_dim, out_dim, layer_name, act=tf.nn.relu):\n", " with tf.name_scope(layer_name):\n", @@ -112,10 +109,10 @@ " # 计算Wx+b\n", " pre_activate = tf.matmul(in_tensor, weights) + biases\n", " # 记录直方图\n", - " tf.histogram_summary(layer_name + '/pre_activations', pre_activate)\n", + " tf.summary.histogram(layer_name + '/pre_activations', pre_activate)\n", " # 计算a(Wx+b)\n", " activations = act(pre_activate, name='activation')\n", - " tf.histogram_summary(layer_name + '/activations', activations)\n", + " tf.summary.histogram(layer_name + '/activations', activations)\n", " # 最终返回该层的输出,以及权重W的L2\n", " return activations, tf.nn.l2_loss(weights)\n", "\n", @@ -172,29 +169,29 @@ " with tf.name_scope('total_l2'):\n", " for l2 in self.total_l2:\n", " self.l2_penalty+=l2\n", - " tf.scalar_summary('l2_penalty', self.l2_penalty)\n", + " tf.summary.scalar('l2_penalty', self.l2_penalty)\n", " \n", " # 不同任务的loss\n", " # 若为回归,则loss是用于判断所有预测值和实际值差别的函数。\n", " if self.Task_type=='regression':\n", " with tf.name_scope('SSE'):\n", " self.loss=tf.reduce_mean((self.output-self.labels)**2)\n", - " tf.scalar_summary('loss', self.loss)\n", + " tf.summary.scalar('loss', self.loss)\n", " else:\n", " # 若为分类,cross entropy的loss function\n", " entropy = tf.nn.softmax_cross_entropy_with_logits(logits=self.output, labels=self.labels)\n", " with tf.name_scope('cross_entropy'):\n", " self.loss = tf.reduce_mean(entropy)\n", - " tf.scalar_summary('loss', self.loss)\n", + " tf.summary.scalar('loss', self.loss)\n", " with tf.name_scope('accuracy'):\n", " correct_prediction = tf.equal(tf.argmax(self.output, 1), tf.argmax(self.labels, 1))\n", " self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", - " tf.scalar_summary('accuracy', self.accuracy)\n", + " tf.summary.scalar('accuracy', self.accuracy)\n", " \n", " # 整合所有loss,形成最终loss\n", " with tf.name_scope('total_loss'):\n", " self.total_loss=self.loss + self.l2_penalty*self.L2_lambda\n", - " tf.scalar_summary('total_loss', self.total_loss)\n", + " tf.summary.scalar('total_loss', self.total_loss)\n", " \n", " # 训练操作\n", " with tf.name_scope('train'):\n", @@ -212,9 +209,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# 准备训练数据\n", @@ -227,9 +222,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -250,41 +243,37 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# 加载\n", "sess = tf.InteractiveSession()\n", - "tf.initialize_all_variables().run()\n", - "merged = tf.merge_all_summaries()\n", - "train_writer = tf.train.SummaryWriter('log' + '/train',sess.graph)" + "sess.run(tf.global_variables_initializer())\n", + "merged = tf.summary.merge_all()\n", + "train_writer = tf.summary.FileWriter('log' + '/train',sess.graph)" ] }, { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "W_0:\n", - "[[-0.11052012 0.33037376]\n", - " [ 0.35867608 1.47092748]]\n", + "[[ 0.50515938 1.1875577 ]\n", + " [-0.36632717 -0.7873252 ]]\n", "W_1:\n", - "[[ 0.38909066]\n", - " [-0.59890509]]\n" + "[[ 0.3926791 ]\n", + " [ 1.36484265]]\n" ] }, { "data": { "text/plain": [ - "" + "Text(4,2.5,u'1.36')" ] }, "execution_count": 6, @@ -293,9 +282,9 @@ }, { "data": { - "image/png": "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\nCySB6OpeCWDA34D3G1lvGHAFMADvlMNrwG6gawPb6CqDGPHQQ84tWfLd89mzZ7uUlBT3wgsvuOLi\nYnfttde6Dh06uO3btzvnnPvxj3/sbrvttpr17733Xjdv3jy3bt06V1xc7P7rv/7LJScnu+eff945\n59y+ffvc7bff7j799FO3YcMGV1hY6KZOnepSU1PdV199FdLX2tw2bXLu3nvDPQppCn+uRJg5c6br\n0KGDe+2119znn3/uJk6c6E4++WRXUVFRs86oUaPc448/XvN80aJFLjk52d1zzz1uzZo17uWXX3bp\n6emuoKAgoP1KbAr2KoOmFARPAuuALgFulwisBu5qYB0VBDGistK5m25yrqzsu2WPP/6469Gjh0tJ\nSXHDhg1zixYtqvnaueee66ZOnVrzfMaMGe7UU091bdq0cVlZWW748OHuT3/6U83XDx486C655BLX\nrVs3l5KS4rp27eouuuiiqD92Dh927he/cO7QoXCPRJqqvNy5f/935845x7k1a+pf584773RdunRx\nqampbty4cW716tV1vt6zZ09311131Vn2xhtvuO9973suNTXV9evXzz333HMB71diU7AFgTkX+CT0\nZvYYcAEw0jm3MYjt/w847Jy73MfX84DCs846i8zMzDpfmzx5MpMnTw54zBI+O3bAfffB/feD8kz+\nuf9+mDRJpwpiyfvve4HbadO8TEiCLvqWZlBQUEBBQUGdZWVlZUeD1/nOuSX1bliPgAuC6mJgInC2\nc25dQBt72ycAy4G/O+d+7mOdPKCwsLCQvLy8QL+FRKCPPoIVK+Caa8I9ksj31lvelQW6xDD27NsH\nv/oVLF8Ozz4LvXqFe0QSi5YsWUJ+fj4EWBAEOg/BE8DlwI+AfWaWXf1IqbXOC2Z2T63nvzazsWbW\n08wGAy/jXXb47LH7l9gV6P0O4pXmG4htuoOiRLJAm1bXAW2B94AttR6Taq1zIt5cA0e1B54BvgLe\nANKBM5xzK4IbskSrQOcniDeabyB+6A6KEokSA1nZOddoAeGcG3XM85uBmwMcl8Sg2vMTKE9wPM03\nEF+Odgvef9/rFihbIOGmQ09CqrH7HcQrzTcQv9QtkEihgkBCTnmCupQbEGULJBKoIJCwUJ7Ao9yA\n1KZugYSTCgIJC1/3O4g3yg3IsdQtkHBRQSBhE+95AuUGpCHqFkioqSCQsIrXPIFyA+IPdQsklFQQ\n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\n", + "image/png": "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nT3efuzYMb1p0yb91FNP6b/97W+l/75jxw7duXNnnZeXp8+fP68HDx6s9+7da3X5Aetvf9M6Jkbr3bvtriQ0ffKJ1ldeqXW9elo/95zW5855d7/qft5zc3N1SUmJ1lrr7du364SEhNLbBgwYoD///PPS4/Ly8mr3JBwO2KK96LEycr9EsbFmWVlVEQX9+/enSZMmVd6/efPm9OzZk8jIyHL/vmvXLvr06UODBg2IiIhgwIABLF682MrSA9ann16IFkhIsLua0DRsmDnBOnmy2e3atat3MQbV/bxHRUWhXBsU8vLySj///vvvKSoq4pe//GXpcQ0aNKj9ExHS3GvDFxEFXbp0Ye3atZw4cYKzZ8+ybNky0tPTrXuAALVnD4wcKdECgcAdY/DttxAXZ12MweLFi+nQoQM333wzb731FgB79+6lUaNG3HHHHXTr1o3JkydTLJGslqi2uSul2iilvlBK7VJKfaeU+r2HYwYqpU4rpdJcH8/4ptzAM3QofPONdREFHTt25PHHH+eXv/wlQ4cOpWvXrkRERFjzzQOURAsEpoQEWLHCnPv44osLMQaX2ntvv/12du/ezZIlS/jTn/4EQFFREevWrWPKlCls3ryZH374gblz51r3JEKYNyP3IuBRrXVHoA8wUSnVycNx67TWSa6Pv1haZYAbPdrkilsVUXD//fezbds21q5dS5MmTbj66qut+cYBSKIFAptS5h3V7t0XYgx69qxdjEH//v05cOAAx48fJy4ujm7dutGuXTsiIiIYPnw42yStzxLVNnetdabWepvr81xgF9Da14UFE/fmEKsiCrKysgCzimDRokXcfffdtf+mAUqiBYJDbWMM9u/fj3b9cmzbto3CwkKaNm1Kz549OXnyJNnZ2QCsWrWKTp08jR1FjXlz1tX9AcQDPwLRFf59IHAC2A4sBzpX972CfbWMJwcPav3+++bzkSNH6hYtWuiIiAjdunVrPWfOHD1jxgw9Y8YMrbXWmZmZunXr1rphw4Y6JiZGt27dWp8+fVprrXW/fv10x44ddWJiol65cqVNz8b35s3Tum5drTdutLsSURPFxVrPmqV148Zax8ZqPXdu9T/vL774ou7UqZPu2rWr7tOnj163bl3p9/v888/1tddeq7t06aLvu+8+XVBQYNdTCwp4uVpGaS+HmkqpKGAN8Fet9aIKt0UDJVrr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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -336,24 +325,22 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[[ 0.07901856]\n", - " [-0.66236991]\n", - " [-0.15775305]\n", - " [-0.90323484]]\n" + "[[ 0.27575219]\n", + " [ 0.1 ]\n", + " [ 2.0949471 ]\n", + " [ 0.87652308]]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 7, @@ -362,9 +349,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -381,24 +368,22 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.1 0.1 ]\n", - " [ 0.45867607 1.5709275 ]\n", - " [ 0. 0.43037376]\n", - " [ 0.34815595 1.90130126]]\n" + " [ 0. 0. ]\n", + " [ 0.6051594 1.28755772]\n", + " [ 0.23883221 0.50023252]]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 8, @@ -407,9 +392,9 @@ }, { "data": { - "image/png": "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\nKsZgIUmSivn/X+uiU1GZLakAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -426,9 +411,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# 训练并记录\n", @@ -442,26 +425,24 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "W_0:\n", - "[[ 0.34622031 0.66672254]\n", - " [ 0.346185 0.66691518]]\n", + "[[ 0.03714262 0.29223838]\n", + " [-0.03218493 -0.29465774]]\n", "W_1:\n", - "[[ 2.82525826]\n", - " [-2.94111133]]\n" + "[[ 0.4100056]\n", + " [ 2.2319622]]\n" ] }, { "data": { "text/plain": [ - "" + "Text(4,2.5,u'2.23')" ] }, "execution_count": 10, @@ -470,9 +451,9 @@ }, { "data": { - "image/png": "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\n14EAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -512,24 +493,22 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[[ 0.01215777]\n", - " [ 0.99000674]\n", - " [ 0.99031949]\n", - " [ 0.00726338]]\n" + "[[ 0.33375549]\n", + " [ 0.33375549]\n", + " [ 0.99873507]\n", + " [ 0.33375549]]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -538,9 +517,9 @@ }, { "data": { - "image/png": "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\nSUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -557,24 +536,22 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[[ 2.77472078e-04 0.00000000e+00]\n", - " [ 3.46462458e-01 7.24196434e-05]\n", - " [ 3.46497774e-01 0.00000000e+00]\n", - " [ 6.92682803e-01 6.66794956e-01]]\n" + "[[ 0. 0. ]\n", + " [ 0. 0. ]\n", + " [ 0.03147838 0.29215246]\n", + " [ 0. 0. ]]\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 12, @@ -583,9 +560,9 @@ }, { "data": { - "image/png": "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\nQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -603,9 +580,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -636,25 +611,35 @@ "# 执行ops\n", "sess.run([reload1,reload2,reload3,reload4])" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#用完关闭session\n", + "sess.close()" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2" + "pygments_lexer": "ipython2", + "version": "2.7.14" } }, "nbformat": 4, diff --git a/core_code.ipynb b/core_code.ipynb index d5bd06a..8e27453 100644 --- a/core_code.ipynb +++ b/core_code.ipynb @@ -2,22 +2,19 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, + "execution_count": 17, + "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", - "import numpy as np" + "import numpy as np\n", + "tf.set_random_seed(55)" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [], "source": [ "#构建网络\n", @@ -46,10 +43,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [], "source": [ "#生成数据\n", @@ -61,23 +56,19 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, + "execution_count": 20, + "metadata": {}, "outputs": [], "source": [ "#加载\n", "sess = tf.InteractiveSession()\n", - "tf.initialize_all_variables().run()" + "sess.run(tf.global_variables_initializer())" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 21, + "metadata": {}, "outputs": [], "source": [ "#训练\n", @@ -87,21 +78,19 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[ 0.],\n", - " [ 1.],\n", - " [ 1.],\n", - " [ 0.]], dtype=float32)" + "array([[ 0.01419991],\n", + " [ 0.97204113],\n", + " [ 0.97204131],\n", + " [ 0.04118853]], dtype=float32)" ] }, - "execution_count": 7, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -113,21 +102,19 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[ 1.10531139, 1.00508392],\n", - " [ 0.55236477, 0. ],\n", - " [ 0.55236477, 0. ],\n", + "array([[ 0.96414495, 1.01730847],\n", + " [ 0. , 0.50864619],\n", + " [ 0. , 0.50864631],\n", " [ 0. , 0. ]], dtype=float32)" ] }, - "execution_count": 11, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -136,6 +123,16 @@ "#查看隐藏层的输出\n", "sess.run(act_h1,feed_dict={x:X})" ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "#用完关闭session\n", + "sess.close()" + ] } ], "metadata": { @@ -154,7 +151,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.12" + "version": "2.7.14" } }, "nbformat": 4,