├── images └── shiny_tensor.jpg ├── global.R ├── ui.R ├── README.md ├── server.R ├── RNN_demo.ipynb ├── .ipynb_checkpoints └── RNN_demo-checkpoint.ipynb └── Sine_RNN_Keras.ipynb /images/shiny_tensor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rajshah4/tensorflow_shiny/HEAD/images/shiny_tensor.jpg -------------------------------------------------------------------------------- /global.R: -------------------------------------------------------------------------------- 1 | ##Global 2 | 3 | library(shiny) 4 | library(plotly) 5 | library(rPython) 6 | library(Metrics) 7 | 8 | python.exec(" 9 | import sys 10 | sys.argv = [''] 11 | from numpy import array, sin, cos, pi 12 | import numpy as np 13 | from random import random 14 | import tensorflow as tf 15 | from tensorflow.models.rnn import rnn_cell 16 | from tensorflow.models.rnn import seq2seq 17 | frequency1 = 311 18 | frequency2 = 201 19 | ") 20 | 21 | 22 | -------------------------------------------------------------------------------- /ui.R: -------------------------------------------------------------------------------- 1 | 2 | # This is the user-interface definition of a Shiny web application. 3 | # You can find out more about building applications with Shiny here: 4 | # 5 | # http://shiny.rstudio.com 6 | # 7 | 8 | shinyUI(fluidPage( 9 | 10 | # Application title 11 | titlePanel("RNN using Tensorflow"), 12 | sidebarLayout( 13 | sidebarPanel( 14 | selectInput("input_wave", "Input:", 15 | c("Sine" = 1, 16 | "Sine+Cosine" = 2, 17 | "Sine+Cosine**2" = 3),selected = 2), 18 | numericInput("prlag", label = "Steps for prediction window:", value = 20), 19 | selectInput("cell_type", "Cell Type:", 20 | c("Basic RNN Cell" = 1, 21 | "GRU Cell" = 2, 22 | "Basic LSTM Cell" = 3, 23 | "2 layer LSTM" = 4),selected = 3), 24 | helpText("After selecting model options, use initialize button:"), 25 | actionButton("reset", "Initialize Model"), 26 | helpText("Set the # of iterations. Pressing train button again adds more interations for the same model. Takes about 2 seconds for 1000 iterations."), 27 | numericInput("iter", label = "Iterations:", value = 5000,max = 10000), 28 | actionButton("train", "Train"), 29 | p(), 30 | h4(" ",a(" About & Code",href="https://github.com/rajshah4/tensorflow_shiny")) 31 | ), 32 | 33 | # Show a plot of the generated distribution 34 | mainPanel( 35 | p(" ",a("Tensorboard Visualization",href="http://projects.rajivshah.com:6006")), 36 | plotlyOutput('out1'), 37 | plotlyOutput('out2'), 38 | DT::dataTableOutput('df')) 39 | ) 40 | )) 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### **Shiny front end for Tensorflow demo** 2 | 3 | This repo shows how shiny can be a GUI front end for tensorflow. The shiny app allows trying different inputs, RNN cell types, and even optimizers. The results are shown with plots as well as a link to tensorboard. The app allows anyone to try out these models with a variety of modelling options. More background can be found at [my blog](http://projects.rajivshah.com/blog/2016/04/01/tensorflow_shiny/). 4 | 5 | The code for the shiny web app was based around work by [Sachin Jogleka](https://codesachin.wordpress.com/2016/01/23/predicting-trigonometric-waves-few-steps-ahead-with-lstms-in-tensorflow/). Sachin focused on RNNs that had two numeric inputs. (This is slightly different than most RNN examples which focus on language models.) 6 | 7 | Sachin’s code was modified to allow different cell types and reworked so it could be called from rPython. The shiny web app relies on rPython to run the tensorflow models. There is also an iPython notebook in the repository if you would like to test this outside of shiny. 8 | 9 | ![shiny_tensor](images/shiny_tensor.jpg) 10 | 11 | #### Live Demo: 12 | 13 | I have a [live demo of this app](http://projects.rajivshah.com/shiny/tensorflow/), but it's flaky. Building RNN models is computationally intensive and the shiny front end is intended to be used on development boxes with tensorflow. My live demo app is limited in several ways. First, the server lacks the horsepower to build models quickly. Second, if the instructions below are not carefully followed the app will crash. Third, its not designed for multiple people building different types of models at the same time. Finally, tensorboard application sometimes stops running, so the link to tensorboard within the live demo app may not work. Again, to really use this app, please install it locally. 14 | 15 | The requirements for the app include tensorflow and numpy on the Python side. Shiny, Metrics, plotly, and rPython on the R side. rPython can be difficult to install/configure, so please verify that rPython is working correctly if you are having problems running the code. 16 | 17 | #### Using the App: 18 | 19 | To use the app, select your model options. For the inputs, there are three options of increasing complexity. Steps for prediction window refers to how far ahead is the model suppose to predict. For this data, 20s seemed a reasonable window. For Cell Type, select one of the cell types and press Initialize Model. Then select iterations (max of 10,000) and press Train. After a few seconds, you will see the output. 20 | 21 | Take advantage of the plots to zoom in and out and see the shape of the actual and predicted outputs. To further improve the model, you can add iterations by pressing the train button. The plots show how the RNN model is learning and getting better at predicting the output. 22 | 23 | To try a new model, select a new cell type and press initialize model. Then select the number of iterations and press train. 24 | 25 | If the app crashes, no worries, it happens. I have not accounted for everything that could go wrong. 26 | 27 | #### Update October 2015 28 | 29 | With the release Tensorflow for R, I don't plan on further updating this project. Ideally, I should be able to recreate this in Tensorflow for R. 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /server.R: -------------------------------------------------------------------------------- 1 | 2 | # This is the server logic for a Shiny web application. 3 | # You can find out more about building applications with Shiny here: 4 | # 5 | # http://shiny.rstudio.com 6 | # 7 | 8 | 9 | shinyServer(function(input, output) { 10 | 11 | 12 | python.exec(" 13 | #Random initial angles 14 | angle1 = random() 15 | angle2 = random() 16 | 17 | def get_pair(): 18 | global sliding_window 19 | sliding_window.append(get_sample()) 20 | input_value = sliding_window[0] 21 | output_value = sliding_window[-1] 22 | sliding_window = sliding_window[1:] 23 | return input_value, output_value 24 | input_dim = 2 25 | 26 | #To maintain state 27 | last_value = array([0 for i in range(input_dim)]) 28 | last_derivative = array([0 for i in range(input_dim)]) 29 | 30 | def get_total_input_output(): 31 | global last_value, last_derivative 32 | raw_i, raw_o = get_pair() 33 | raw_i = raw_i[0] 34 | l1 = list(raw_i) 35 | derivative = raw_i - last_value 36 | l2 = list(derivative) 37 | last_value = raw_i 38 | l3 = list(derivative - last_derivative) 39 | last_derivative = derivative 40 | return array([l1 + l2 + l3]), raw_o 41 | 42 | #TF Setup 43 | #Input 44 | input_layer = tf.placeholder(tf.float32, [1, input_dim*3]) 45 | 46 | #The Weights and Biases matrices first 47 | output_W1 = tf.Variable(tf.truncated_normal([input_dim*3, input_dim])) 48 | output_b1 = tf.Variable(tf.zeros([input_dim])) 49 | ") 50 | 51 | 52 | observeEvent(input$reset, { 53 | iw <- as.numeric(input$input_wave)-1 54 | python.assign( "input_wave", iw ) 55 | python.assign( "prlag", input$prlag ) 56 | python.exec(" 57 | lag = prlag 58 | def get_sample(): 59 | global angle1, angle2 60 | angle1 += 2*pi/float(frequency1) 61 | angle2 += 2*pi/float(frequency2) 62 | angle1 %= 2*pi 63 | angle2 %= 2*pi 64 | return array([array([ 65 | 5 + 5*sin(angle1) + 10*cos(angle2)**input_wave, 66 | 7 + 7*sin(angle2)**input_wave + 14*cos(angle1)])]) 67 | 68 | sliding_window = [] 69 | for i in range(lag - 1): 70 | sliding_window.append(get_sample()) 71 | ") 72 | 73 | ct <- as.numeric(input$cell_type) 74 | python.assign('cell_type', ct) 75 | 76 | python.exec(" 77 | #The Cell initialization 78 | if cell_type == 1: 79 | lstm_layer1 = rnn_cell.BasicRNNCell(input_dim*3) 80 | lstm_state1 = tf.Variable(tf.zeros([1, lstm_layer1.state_size])) 81 | lstm_output1, lstm_state_output1 = lstm_layer1(input_layer, lstm_state1, scope='BasicRNN') 82 | lstm_update_op1 = lstm_state1.assign(lstm_state_output1) 83 | final_output = tf.matmul(lstm_output1, output_W1) + output_b1 84 | if cell_type == 2: 85 | lstm_layer2 = rnn_cell.GRUCell(input_dim*3) 86 | lstm_state2 = tf.Variable(tf.zeros([1, lstm_layer2.state_size])) 87 | lstm_output2, lstm_state_output2 = lstm_layer2(input_layer, lstm_state2, scope='GRUCell') 88 | lstm_update_op2 = lstm_state2.assign(lstm_state_output2) 89 | final_output = tf.matmul(lstm_output2, output_W1) + output_b1 90 | if cell_type == 3: 91 | lstm_layer3 = rnn_cell.BasicLSTMCell(input_dim*3) 92 | lstm_state3 = tf.Variable(tf.zeros([1, lstm_layer3.state_size])) 93 | lstm_output3, lstm_state_output3 = lstm_layer3(input_layer, lstm_state3, scope='BasicLSTM') 94 | lstm_update_op3 = lstm_state3.assign(lstm_state_output3) 95 | final_output = tf.matmul(lstm_output3, output_W1) + output_b1 96 | if cell_type == 4: 97 | lstm_layer4 = rnn_cell.BasicLSTMCell(input_dim*3) 98 | lstm_layer4 = rnn_cell.MultiRNNCell([lstm_layer4]*2) 99 | lstm_layer4 = rnn_cell.DropoutWrapper(lstm_layer4,output_keep_prob=0.8) 100 | lstm_state4 = tf.Variable(tf.zeros([1, lstm_layer4.state_size])) 101 | lstm_output4, lstm_state_output4 = lstm_layer4(input_layer, lstm_state4, scope='LSTM-2') 102 | lstm_update_op4 = lstm_state4.assign(lstm_state_output4) 103 | final_output = tf.matmul(lstm_output4, output_W1) + output_b1 104 | 105 | ##Input for correct output (for training) 106 | correct_output = tf.placeholder(tf.float32, [1, input_dim]) 107 | 108 | ##Calculate the Sum-of-Squares Error 109 | error = tf.pow(tf.sub(final_output, correct_output), 2) 110 | 111 | ##The Optimizer 112 | #Adam works best 113 | train_step = tf.train.AdamOptimizer(0.0006).minimize(error) 114 | 115 | w_hist = tf.histogram_summary('weights', output_W1) 116 | b_hist = tf.histogram_summary('biases', output_b1) 117 | y_hist = tf.histogram_summary('y', final_output) 118 | ") 119 | 120 | python.exec(" 121 | ##Session 122 | sess = tf.Session() 123 | merged = tf.merge_summary([w_hist,b_hist,y_hist]) 124 | tf.train.write_graph(sess.graph_def,'/tmp/tensor','graph.txt') 125 | writer = tf.train.SummaryWriter('/tmp/tensor/',sess.graph_def) 126 | init = tf.initialize_all_variables() 127 | sess.run(init) 128 | ##Training 129 | actual_output1 = [] 130 | actual_output2 = [] 131 | network_output1 = [] 132 | network_output2 = [] 133 | x_axis = [] 134 | ") 135 | 136 | }) 137 | 138 | df_results <- eventReactive(input$train, { 139 | python.assign( "iter", input$iter) 140 | python.exec(" 141 | i_end = iter + len(x_axis) 142 | for i in range(i_end): 143 | input_v, output_v = get_total_input_output() 144 | if cell_type == 1: 145 | _, _, network_output, merge = sess.run([lstm_update_op1, 146 | train_step, 147 | final_output,merged], 148 | feed_dict = { 149 | input_layer: input_v, 150 | correct_output: output_v}) 151 | if cell_type == 2: 152 | _, _, network_output, merge = sess.run([lstm_update_op2, 153 | train_step, 154 | final_output,merged], 155 | feed_dict = { 156 | input_layer: input_v, 157 | correct_output: output_v}) 158 | if cell_type == 3: 159 | _, _, network_output, merge = sess.run([lstm_update_op3, 160 | train_step, 161 | final_output,merged], 162 | feed_dict = { 163 | input_layer: input_v, 164 | correct_output: output_v}) 165 | if cell_type == 4: 166 | _, _, network_output, merge = sess.run([lstm_update_op4, 167 | train_step, 168 | final_output,merged], 169 | feed_dict = { 170 | input_layer: input_v, 171 | correct_output: output_v}) 172 | actual_output1.append(output_v[0][0]) 173 | actual_output2.append(output_v[0][1]) 174 | network_output1.append(network_output[0][0]) 175 | network_output2.append(network_output[0][1]) 176 | x_axis.append(i) 177 | writer.add_summary(merge, i) 178 | out2 = np.array(network_output2).tolist() 179 | out1 = np.array(network_output1).tolist() 180 | ") 181 | x_axis <- python.get("x_axis") 182 | actual_output1 <- python.get("actual_output1") 183 | actual_output2 <- python.get("actual_output2") 184 | pred_output1 <- python.get("out1") 185 | pred_output2 <- python.get("out2") 186 | df<- as.data.frame(cbind(x_axis,actual_output1,pred_output1,actual_output2,pred_output2)) 187 | df 188 | }) 189 | 190 | output$out1 <- renderPlotly({ 191 | df <- df_results() 192 | mse1 <- Metrics::mse(df$pred_output1, df$actual_output1) 193 | title1 <- paste("Series X, MSE:",mse1,sep = " ") 194 | p<- plot_ly(x = x_axis, y = actual_output1, data = df, name = "Actual") %>% 195 | add_trace(x = x_axis, y = pred_output1, data = df, name = "Predicted") %>% 196 | layout(title = title1) 197 | p 198 | }) 199 | 200 | output$out2 <- renderPlotly({ 201 | df <- df_results() 202 | mse2 <- mse(df$pred_output2, df$actual_output2) 203 | title2 <- paste("Series Y, MSE:",mse2,sep = " ") 204 | p<- plot_ly(x = x_axis, y = actual_output2, data = df,name = "Actual") %>% 205 | add_trace(x = x_axis, y = pred_output2, data = df,name = "Predicted") %>% 206 | layout(title = title2) 207 | p 208 | }) 209 | 210 | output$df <- DT::renderDataTable( 211 | DT::datatable(df_results()) 212 | ) 213 | 214 | }) 215 | -------------------------------------------------------------------------------- /RNN_demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "**RNN Demo using waves**\n", 8 | "Inspired by https://codesachin.wordpress.com/2016/01/23/predicting-trigonometric-waves-few-steps-ahead-with-lstms-in-tensorflow/" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": null, 14 | "metadata": { 15 | "collapsed": true 16 | }, 17 | "outputs": [], 18 | "source": [ 19 | "import matplotlib.pyplot as plt\n", 20 | "%matplotlib inline \n", 21 | "from numpy import array, sin, cos, pi\n", 22 | "from random import random\n", 23 | "import tensorflow as tf\n", 24 | "from tensorflow.models.rnn.rnn import *" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "**Creates the training data \n", 32 | "**Changes: \n", 33 | " I changed the frequencies so they don't overlap \n", 34 | " I added more nonlinearities by adding the square and cube \n", 35 | " I changed the lag to 40" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": null, 41 | "metadata": { 42 | "collapsed": true 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "##Producing Training/Testing inputs+output\n", 47 | "\n", 48 | "#Random initial angles\n", 49 | "angle1 = random()\n", 50 | "angle2 = random()\n", 51 | " \n", 52 | "#The total 2*pi cycle would be divided into 'frequency'\n", 53 | "#number of steps\n", 54 | "frequency1 = 333\n", 55 | "frequency2 = 211\n", 56 | "#This defines how many steps ahead we are trying to predict\n", 57 | "lag = 40\n", 58 | " \n", 59 | "def get_sample():\n", 60 | " \"\"\"\n", 61 | " Returns a [[sin value, cos value]] input.\n", 62 | " \"\"\"\n", 63 | " global angle1, angle2\n", 64 | " angle1 += 2*pi/float(frequency1)\n", 65 | " angle2 += 2*pi/float(frequency2)\n", 66 | " angle1 %= 2*pi\n", 67 | " angle2 %= 2*pi\n", 68 | " return array([array([\n", 69 | " 5 + 5*sin(angle1) + 10*cos(angle2)**2,\n", 70 | " 7 + 7*sin(angle2)**3 + 14*cos(angle1)])])\n", 71 | " \n", 72 | " \n", 73 | "sliding_window = []\n", 74 | " \n", 75 | "for i in range(lag - 1):\n", 76 | " sliding_window.append(get_sample())\n", 77 | " \n", 78 | " \n", 79 | "def get_pair():\n", 80 | " \"\"\"\n", 81 | " Returns an (current, later) pair, where 'later' is 'lag'\n", 82 | " steps ahead of the 'current' on the wave(s) as defined by the\n", 83 | " frequency.\n", 84 | " \"\"\"\n", 85 | " \n", 86 | " global sliding_window\n", 87 | " sliding_window.append(get_sample())\n", 88 | " input_value = sliding_window[0]\n", 89 | " output_value = sliding_window[-1]\n", 90 | " sliding_window = sliding_window[1:]\n", 91 | " return input_value, output_value\n", 92 | " " 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "**Lets take a look at the input data that is created**" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": null, 105 | "metadata": { 106 | "collapsed": true 107 | }, 108 | "outputs": [], 109 | "source": [ 110 | "actual_input1 = []\n", 111 | "actual_input2 = []\n", 112 | "actual_output1 = []\n", 113 | "actual_output2 = []\n", 114 | "x_axis = []\n", 115 | "\n", 116 | "for i in range(2000):\n", 117 | " input_v, output_v = get_pair()\n", 118 | " actual_input1.append(input_v[0][0])\n", 119 | " actual_input2.append(input_v[0][1])\n", 120 | " actual_output1.append(output_v[0][0])\n", 121 | " actual_output2.append(output_v[0][1])\n", 122 | " x_axis.append(i)\n", 123 | " " 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "metadata": { 130 | "collapsed": false 131 | }, 132 | "outputs": [], 133 | "source": [ 134 | "plt.plot(x_axis, actual_input1, 'r-', x_axis, actual_output1, 'b-')\n", 135 | "plt.show()\n", 136 | "plt.plot(x_axis, actual_input2, 'r-', x_axis, actual_output2, 'b-')\n", 137 | "plt.show()" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": null, 143 | "metadata": { 144 | "collapsed": false 145 | }, 146 | "outputs": [], 147 | "source": [ 148 | "#Plot X against Y\n", 149 | "plt.plot(actual_input1, actual_input2, 'r-')\n", 150 | "plt.show()" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "This input data is much more nonlinear and periodic than the original example" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": null, 163 | "metadata": { 164 | "collapsed": false 165 | }, 166 | "outputs": [], 167 | "source": [ 168 | "##############################\n", 169 | "#Input Params\n", 170 | "input_dim = 2\n", 171 | " \n", 172 | "#To maintain state\n", 173 | "last_value = array([0 for i in range(input_dim)])\n", 174 | "last_derivative = array([0 for i in range(input_dim)])\n", 175 | " \n", 176 | " \n", 177 | "def get_total_input_output():\n", 178 | " \"\"\"\n", 179 | " Returns the overall Input and Output as required by the model.\n", 180 | " The input is a concatenation of the wave values, their first and\n", 181 | " second derivatives.\n", 182 | " \"\"\"\n", 183 | " global last_value, last_derivative\n", 184 | " raw_i, raw_o = get_pair()\n", 185 | " raw_i = raw_i[0]\n", 186 | " l1 = list(raw_i)\n", 187 | " derivative = raw_i - last_value\n", 188 | " l2 = list(derivative)\n", 189 | " last_value = raw_i\n", 190 | " l3 = list(derivative - last_derivative)\n", 191 | " last_derivative = derivative\n", 192 | " return array([l1 + l2 + l3]), raw_o" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "**Tensorflow model** \n", 200 | "- 2 layer is tougher to use \n", 201 | "- Get errors about shared variable" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": null, 207 | "metadata": { 208 | "collapsed": false 209 | }, 210 | "outputs": [], 211 | "source": [ 212 | "#Input Params\n", 213 | "input_dim = 2\n", 214 | " \n", 215 | "##The Input Layer as a Placeholder\n", 216 | "#Since we will provide data sequentially, the 'batch size'\n", 217 | "#is 1.\n", 218 | "input_layer = tf.placeholder(tf.float32, [1, input_dim*3])\n" 219 | ] 220 | }, 221 | { 222 | "cell_type": "markdown", 223 | "metadata": {}, 224 | "source": [ 225 | "**Choose Layer**" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": null, 231 | "metadata": { 232 | "collapsed": true 233 | }, 234 | "outputs": [], 235 | "source": [ 236 | "cell_type = 4" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": null, 242 | "metadata": { 243 | "collapsed": true 244 | }, 245 | "outputs": [], 246 | "source": [ 247 | "##Create outputs\n", 248 | "output_W1 = tf.Variable(tf.truncated_normal([input_dim*3, input_dim]))\n", 249 | "output_b1 = tf.Variable(tf.zeros([input_dim]))" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": null, 255 | "metadata": { 256 | "collapsed": false 257 | }, 258 | "outputs": [], 259 | "source": [ 260 | "if cell_type == 1:\n", 261 | " lstm_layer1 = rnn_cell.BasicRNNCell(input_dim*3)\n", 262 | " lstm_state1 = tf.Variable(tf.zeros([1, lstm_layer1.state_size]))\n", 263 | " lstm_output1, lstm_state_output1 = lstm_layer1(input_layer, lstm_state1, scope=\"BasicRNN\")\n", 264 | " lstm_update_op1 = lstm_state1.assign(lstm_state_output1)\n", 265 | " final_output = tf.matmul(lstm_output1, output_W1) + output_b1\n", 266 | "if cell_type == 2:\n", 267 | " lstm_layer2 = rnn_cell.GRUCell(input_dim*3)\n", 268 | " lstm_state2 = tf.Variable(tf.zeros([1, lstm_layer2.state_size]))\n", 269 | " lstm_output2, lstm_state_output2 = lstm_layer2(input_layer, lstm_state2, scope=\"GRUCell\")\n", 270 | " lstm_update_op2 = lstm_state2.assign(lstm_state_output2)\n", 271 | " final_output = tf.matmul(lstm_output2, output_W1) + output_b1\n", 272 | "if cell_type == 3:\n", 273 | " lstm_layer3 = rnn_cell.BasicLSTMCell(input_dim*3)\n", 274 | " lstm_state3 = tf.Variable(tf.zeros([1, lstm_layer3.state_size]))\n", 275 | " lstm_output3, lstm_state_output3 = lstm_layer3(input_layer, lstm_state3, scope=\"BasicLSTM\")\n", 276 | " lstm_update_op3 = lstm_state3.assign(lstm_state_output3)\n", 277 | " final_output = tf.matmul(lstm_output3, output_W1) + output_b1\n", 278 | "if cell_type == 4:\n", 279 | " lstm_layer4 = rnn_cell.BasicLSTMCell(input_dim*3)\n", 280 | " lstm_layer4 = rnn_cell.MultiRNNCell([lstm_layer4]*2)\n", 281 | " lstm_layer4 = rnn_cell.DropoutWrapper(lstm_layer4,output_keep_prob=0.8)\n", 282 | " lstm_state4 = tf.Variable(tf.zeros([1, lstm_layer4.state_size]))\n", 283 | " lstm_output4, lstm_state_output4 = lstm_layer4(input_layer, lstm_state4, scope=\"LSTM-2\")\n", 284 | " lstm_update_op4 = lstm_state4.assign(lstm_state_output4)\n", 285 | " final_output = tf.matmul(lstm_output4, output_W1) + output_b1" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "metadata": { 292 | "collapsed": false 293 | }, 294 | "outputs": [], 295 | "source": [ 296 | "##Input for correct output (for training)\n", 297 | "correct_output = tf.placeholder(tf.float32, [1, input_dim])\n", 298 | "\n", 299 | "##Calculate the Sum-of-Squares Error\n", 300 | "error = tf.pow(tf.sub(final_output, correct_output), 2)\n", 301 | "\n", 302 | "##The Optimizer\n", 303 | "#Adam works best\n", 304 | "train_step = tf.train.AdamOptimizer(0.0006).minimize(error)\n", 305 | "w_hist = tf.histogram_summary('weights', output_W1)\n", 306 | "b_hist = tf.histogram_summary('biases', output_b1)\n", 307 | "y_hist = tf.histogram_summary('y', final_output)\n", 308 | "\n", 309 | "##Session\n", 310 | "sess = tf.Session()\n", 311 | "#Initialize all Variables\n", 312 | "merged = tf.merge_summary([w_hist,b_hist,y_hist])\n", 313 | "tf.train.write_graph(sess.graph_def,'/tmp/tensor','graph.txt')\n", 314 | "writer = tf.train.SummaryWriter('/tmp/tensor/',sess.graph_def)\n", 315 | "sess.run(tf.initialize_all_variables())\n" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": null, 321 | "metadata": { 322 | "collapsed": false 323 | }, 324 | "outputs": [], 325 | "source": [ 326 | "##Training\n", 327 | " \n", 328 | "actual_output1 = []\n", 329 | "actual_output2 = []\n", 330 | "network_output1 = []\n", 331 | "network_output2 = []\n", 332 | "x_axis = []\n", 333 | " \n", 334 | " \n", 335 | "for i in range(3000):\n", 336 | " input_v, output_v = get_total_input_output()\n", 337 | " if cell_type == 1:\n", 338 | " _, _, network_output, merge = sess.run([lstm_update_op1,\n", 339 | " train_step,\n", 340 | " final_output,merged],\n", 341 | " feed_dict = {\n", 342 | " input_layer: input_v,\n", 343 | " correct_output: output_v})\n", 344 | " if cell_type == 2:\n", 345 | " _, _, network_output, merge = sess.run([lstm_update_op2,\n", 346 | " train_step,\n", 347 | " final_output,merged],\n", 348 | " feed_dict = {\n", 349 | " input_layer: input_v,\n", 350 | " correct_output: output_v})\n", 351 | " if cell_type == 3:\n", 352 | " _, _, network_output, merge = sess.run([lstm_update_op3,\n", 353 | " train_step,\n", 354 | " final_output,merged],\n", 355 | " feed_dict = {\n", 356 | " input_layer: input_v,\n", 357 | " correct_output: output_v})\n", 358 | " if cell_type == 4:\n", 359 | " _, _, network_output, merge = sess.run([lstm_update_op4,\n", 360 | " train_step,\n", 361 | " final_output,merged],\n", 362 | " feed_dict = {\n", 363 | " input_layer: input_v,\n", 364 | " correct_output: output_v})\n", 365 | " actual_output1.append(output_v[0][0])\n", 366 | " actual_output2.append(output_v[0][1])\n", 367 | " network_output1.append(network_output[0][0])\n", 368 | " network_output2.append(network_output[0][1])\n", 369 | " x_axis.append(i)\n", 370 | " writer.add_summary(merge, i)\n", 371 | " " 372 | ] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "execution_count": null, 377 | "metadata": { 378 | "collapsed": false 379 | }, 380 | "outputs": [], 381 | "source": [ 382 | "plt.plot(x_axis, network_output1, 'r-', x_axis, actual_output1, 'b-')\n", 383 | "plt.show()" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": null, 389 | "metadata": { 390 | "collapsed": false 391 | }, 392 | "outputs": [], 393 | "source": [ 394 | "plt.plot(x_axis, network_output2, 'r-', x_axis, actual_output2, 'b-')\n", 395 | "plt.show()" 396 | ] 397 | }, 398 | { 399 | "cell_type": "code", 400 | "execution_count": null, 401 | "metadata": { 402 | "collapsed": false 403 | }, 404 | "outputs": [], 405 | "source": [ 406 | "plt.plot(x_axis[18500:19999], network_output2[18500:19999], 'r-', x_axis[18500:19999], actual_output2[18500:19999], 'b-')\n", 407 | "plt.show()" 408 | ] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "execution_count": null, 413 | "metadata": { 414 | "collapsed": false 415 | }, 416 | "outputs": [], 417 | "source": [ 418 | "plt.plot(x_axis[0:15000], network_output2[0:15000], 'r-', x_axis[0:15000], actual_output2[0:15000], 'b-')\n", 419 | "plt.show()" 420 | ] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "execution_count": null, 425 | "metadata": { 426 | "collapsed": false 427 | }, 428 | "outputs": [], 429 | "source": [ 430 | "plt.plot(x_axis[150:999], network_output2[150:999], 'r-', x_axis[150:999], actual_output2[150:999], 'b-')\n", 431 | "plt.show()" 432 | ] 433 | }, 434 | { 435 | "cell_type": "code", 436 | "execution_count": null, 437 | "metadata": { 438 | "collapsed": false 439 | }, 440 | "outputs": [], 441 | "source": [ 442 | "plt.plot(x_axis[0:250], network_output2[0:250], 'r-', x_axis[0:250], actual_output2[0:250], 'b-')\n", 443 | "plt.show()" 444 | ] 445 | }, 446 | { 447 | "cell_type": "code", 448 | "execution_count": null, 449 | "metadata": { 450 | "collapsed": false 451 | }, 452 | "outputs": [], 453 | "source": [ 454 | "plt.plot(x_axis[78500:79999], network_output2[78500:79999], 'r-', x_axis[78500:79999], actual_output2[78500:79999], 'b-')\n", 455 | "plt.show()" 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "execution_count": null, 461 | "metadata": { 462 | "collapsed": false 463 | }, 464 | "outputs": [], 465 | "source": [ 466 | "##Testing\n", 467 | " \n", 468 | "for i in range(200):\n", 469 | " get_total_input_output()\n", 470 | "#Flush LSTM state\n", 471 | "###NEED TO FIX THIS TO RUN MODEL CHOSEN ABOVE###\n", 472 | "sess.run(lstm_state4.assign(tf.zeros([1, lstm_layer4.state_size])))" 473 | ] 474 | }, 475 | { 476 | "cell_type": "code", 477 | "execution_count": null, 478 | "metadata": { 479 | "collapsed": false 480 | }, 481 | "outputs": [], 482 | "source": [ 483 | "test_actual_output1 = []\n", 484 | "test_actual_output2 = []\n", 485 | "test_network_output1 = []\n", 486 | "test_network_output2 = []\n", 487 | "test_x_axis = []\n", 488 | " \n", 489 | " \n", 490 | "for i in range(1000):\n", 491 | " input_v, output_v = get_total_input_output()\n", 492 | " _, network_output = sess.run([lstm_update_op4,\n", 493 | " final_output],\n", 494 | " feed_dict = {\n", 495 | " input_layer: input_v,\n", 496 | " correct_output: output_v})\n", 497 | " \n", 498 | " test_actual_output1.append(output_v[0][0])\n", 499 | " test_actual_output2.append(output_v[0][1])\n", 500 | " test_network_output1.append(network_output[0][0])\n", 501 | " test_network_output2.append(network_output[0][1])\n", 502 | " test_x_axis.append(i)\n", 503 | " \n", 504 | "import matplotlib.pyplot as plt\n", 505 | "plt.plot(test_x_axis, test_network_output1, 'r-', test_x_axis, test_actual_output1, 'b-')\n", 506 | "plt.show()\n", 507 | "plt.plot(test_x_axis, test_network_output2, 'r-', test_x_axis, test_actual_output2, 'b-')\n", 508 | "plt.show()" 509 | ] 510 | } 511 | ], 512 | "metadata": { 513 | "kernelspec": { 514 | "display_name": "Python 2", 515 | "language": "python", 516 | "name": "python2" 517 | }, 518 | "language_info": { 519 | "codemirror_mode": { 520 | "name": "ipython", 521 | "version": 2 522 | }, 523 | "file_extension": ".py", 524 | "mimetype": "text/x-python", 525 | "name": "python", 526 | "nbconvert_exporter": "python", 527 | "pygments_lexer": "ipython2", 528 | "version": "2.7.11" 529 | } 530 | }, 531 | "nbformat": 4, 532 | "nbformat_minor": 0 533 | } 534 | -------------------------------------------------------------------------------- /.ipynb_checkpoints/RNN_demo-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "**RNN Demo using waves**\n", 8 | "Inspired by https://codesachin.wordpress.com/2016/01/23/predicting-trigonometric-waves-few-steps-ahead-with-lstms-in-tensorflow/" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": null, 14 | "metadata": { 15 | "collapsed": true 16 | }, 17 | "outputs": [], 18 | "source": [ 19 | "import matplotlib.pyplot as plt\n", 20 | "%matplotlib inline \n", 21 | "from numpy import array, sin, cos, pi\n", 22 | "from random import random\n", 23 | "import tensorflow as tf\n", 24 | "from tensorflow.models.rnn.rnn import *" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "**Creates the training data \n", 32 | "**Changes: \n", 33 | " I changed the frequencies so they don't overlap \n", 34 | " I added more nonlinearities by adding the square and cube \n", 35 | " I changed the lag to 40" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": null, 41 | "metadata": { 42 | "collapsed": true 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "##Producing Training/Testing inputs+output\n", 47 | "\n", 48 | "#Random initial angles\n", 49 | "angle1 = random()\n", 50 | "angle2 = random()\n", 51 | " \n", 52 | "#The total 2*pi cycle would be divided into 'frequency'\n", 53 | "#number of steps\n", 54 | "frequency1 = 333\n", 55 | "frequency2 = 211\n", 56 | "#This defines how many steps ahead we are trying to predict\n", 57 | "lag = 40\n", 58 | " \n", 59 | "def get_sample():\n", 60 | " \"\"\"\n", 61 | " Returns a [[sin value, cos value]] input.\n", 62 | " \"\"\"\n", 63 | " global angle1, angle2\n", 64 | " angle1 += 2*pi/float(frequency1)\n", 65 | " angle2 += 2*pi/float(frequency2)\n", 66 | " angle1 %= 2*pi\n", 67 | " angle2 %= 2*pi\n", 68 | " return array([array([\n", 69 | " 5 + 5*sin(angle1) + 10*cos(angle2)**2,\n", 70 | " 7 + 7*sin(angle2)**3 + 14*cos(angle1)])])\n", 71 | " \n", 72 | " \n", 73 | "sliding_window = []\n", 74 | " \n", 75 | "for i in range(lag - 1):\n", 76 | " sliding_window.append(get_sample())\n", 77 | " \n", 78 | " \n", 79 | "def get_pair():\n", 80 | " \"\"\"\n", 81 | " Returns an (current, later) pair, where 'later' is 'lag'\n", 82 | " steps ahead of the 'current' on the wave(s) as defined by the\n", 83 | " frequency.\n", 84 | " \"\"\"\n", 85 | " \n", 86 | " global sliding_window\n", 87 | " sliding_window.append(get_sample())\n", 88 | " input_value = sliding_window[0]\n", 89 | " output_value = sliding_window[-1]\n", 90 | " sliding_window = sliding_window[1:]\n", 91 | " return input_value, output_value\n", 92 | " " 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "**Lets take a look at the input data that is created**" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": null, 105 | "metadata": { 106 | "collapsed": true 107 | }, 108 | "outputs": [], 109 | "source": [ 110 | "actual_input1 = []\n", 111 | "actual_input2 = []\n", 112 | "actual_output1 = []\n", 113 | "actual_output2 = []\n", 114 | "x_axis = []\n", 115 | "\n", 116 | "for i in range(2000):\n", 117 | " input_v, output_v = get_pair()\n", 118 | " actual_input1.append(input_v[0][0])\n", 119 | " actual_input2.append(input_v[0][1])\n", 120 | " actual_output1.append(output_v[0][0])\n", 121 | " actual_output2.append(output_v[0][1])\n", 122 | " x_axis.append(i)\n", 123 | " " 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "metadata": { 130 | "collapsed": false 131 | }, 132 | "outputs": [], 133 | "source": [ 134 | "plt.plot(x_axis, actual_input1, 'r-', x_axis, actual_output1, 'b-')\n", 135 | "plt.show()\n", 136 | "plt.plot(x_axis, actual_input2, 'r-', x_axis, actual_output2, 'b-')\n", 137 | "plt.show()" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": null, 143 | "metadata": { 144 | "collapsed": false 145 | }, 146 | "outputs": [], 147 | "source": [ 148 | "#Plot X against Y\n", 149 | "plt.plot(actual_input1, actual_input2, 'r-')\n", 150 | "plt.show()" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "This input data is much more nonlinear and periodic than the original example" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": null, 163 | "metadata": { 164 | "collapsed": false 165 | }, 166 | "outputs": [], 167 | "source": [ 168 | "##############################\n", 169 | "#Input Params\n", 170 | "input_dim = 2\n", 171 | " \n", 172 | "#To maintain state\n", 173 | "last_value = array([0 for i in range(input_dim)])\n", 174 | "last_derivative = array([0 for i in range(input_dim)])\n", 175 | " \n", 176 | " \n", 177 | "def get_total_input_output():\n", 178 | " \"\"\"\n", 179 | " Returns the overall Input and Output as required by the model.\n", 180 | " The input is a concatenation of the wave values, their first and\n", 181 | " second derivatives.\n", 182 | " \"\"\"\n", 183 | " global last_value, last_derivative\n", 184 | " raw_i, raw_o = get_pair()\n", 185 | " raw_i = raw_i[0]\n", 186 | " l1 = list(raw_i)\n", 187 | " derivative = raw_i - last_value\n", 188 | " l2 = list(derivative)\n", 189 | " last_value = raw_i\n", 190 | " l3 = list(derivative - last_derivative)\n", 191 | " last_derivative = derivative\n", 192 | " return array([l1 + l2 + l3]), raw_o" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "**Tensorflow model** \n", 200 | "- 2 layer is tougher to use \n", 201 | "- Get errors about shared variable" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": null, 207 | "metadata": { 208 | "collapsed": false 209 | }, 210 | "outputs": [], 211 | "source": [ 212 | "#Input Params\n", 213 | "input_dim = 2\n", 214 | " \n", 215 | "##The Input Layer as a Placeholder\n", 216 | "#Since we will provide data sequentially, the 'batch size'\n", 217 | "#is 1.\n", 218 | "input_layer = tf.placeholder(tf.float32, [1, input_dim*3])\n" 219 | ] 220 | }, 221 | { 222 | "cell_type": "markdown", 223 | "metadata": {}, 224 | "source": [ 225 | "**Choose Layer**" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": null, 231 | "metadata": { 232 | "collapsed": true 233 | }, 234 | "outputs": [], 235 | "source": [ 236 | "cell_type = 4" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": null, 242 | "metadata": { 243 | "collapsed": true 244 | }, 245 | "outputs": [], 246 | "source": [ 247 | "##Create outputs\n", 248 | "output_W1 = tf.Variable(tf.truncated_normal([input_dim*3, input_dim]))\n", 249 | "output_b1 = tf.Variable(tf.zeros([input_dim]))" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": null, 255 | "metadata": { 256 | "collapsed": false 257 | }, 258 | "outputs": [], 259 | "source": [ 260 | "if cell_type == 1:\n", 261 | " lstm_layer1 = rnn_cell.BasicRNNCell(input_dim*3)\n", 262 | " lstm_state1 = tf.Variable(tf.zeros([1, lstm_layer1.state_size]))\n", 263 | " lstm_output1, lstm_state_output1 = lstm_layer1(input_layer, lstm_state1, scope=\"BasicRNN\")\n", 264 | " lstm_update_op1 = lstm_state1.assign(lstm_state_output1)\n", 265 | " final_output = tf.matmul(lstm_output1, output_W1) + output_b1\n", 266 | "if cell_type == 2:\n", 267 | " lstm_layer2 = rnn_cell.GRUCell(input_dim*3)\n", 268 | " lstm_state2 = tf.Variable(tf.zeros([1, lstm_layer2.state_size]))\n", 269 | " lstm_output2, lstm_state_output2 = lstm_layer2(input_layer, lstm_state2, scope=\"GRUCell\")\n", 270 | " lstm_update_op2 = lstm_state2.assign(lstm_state_output2)\n", 271 | " final_output = tf.matmul(lstm_output2, output_W1) + output_b1\n", 272 | "if cell_type == 3:\n", 273 | " lstm_layer3 = rnn_cell.BasicLSTMCell(input_dim*3)\n", 274 | " lstm_state3 = tf.Variable(tf.zeros([1, lstm_layer3.state_size]))\n", 275 | " lstm_output3, lstm_state_output3 = lstm_layer3(input_layer, lstm_state3, scope=\"BasicLSTM\")\n", 276 | " lstm_update_op3 = lstm_state3.assign(lstm_state_output3)\n", 277 | " final_output = tf.matmul(lstm_output3, output_W1) + output_b1\n", 278 | "if cell_type == 4:\n", 279 | " lstm_layer4 = rnn_cell.BasicLSTMCell(input_dim*3)\n", 280 | " lstm_layer4 = rnn_cell.MultiRNNCell([lstm_layer4]*2)\n", 281 | " lstm_layer4 = rnn_cell.DropoutWrapper(lstm_layer4,output_keep_prob=0.8)\n", 282 | " lstm_state4 = tf.Variable(tf.zeros([1, lstm_layer4.state_size]))\n", 283 | " lstm_output4, lstm_state_output4 = lstm_layer4(input_layer, lstm_state4, scope=\"LSTM-2\")\n", 284 | " lstm_update_op4 = lstm_state4.assign(lstm_state_output4)\n", 285 | " final_output = tf.matmul(lstm_output4, output_W1) + output_b1" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "metadata": { 292 | "collapsed": false 293 | }, 294 | "outputs": [], 295 | "source": [ 296 | "##Input for correct output (for training)\n", 297 | "correct_output = tf.placeholder(tf.float32, [1, input_dim])\n", 298 | "\n", 299 | "##Calculate the Sum-of-Squares Error\n", 300 | "error = tf.pow(tf.sub(final_output, correct_output), 2)\n", 301 | "\n", 302 | "##The Optimizer\n", 303 | "#Adam works best\n", 304 | "train_step = tf.train.AdamOptimizer(0.0006).minimize(error)\n", 305 | "w_hist = tf.histogram_summary('weights', output_W1)\n", 306 | "b_hist = tf.histogram_summary('biases', output_b1)\n", 307 | "y_hist = tf.histogram_summary('y', final_output)\n", 308 | "\n", 309 | "##Session\n", 310 | "sess = tf.Session()\n", 311 | "#Initialize all Variables\n", 312 | "merged = tf.merge_summary([w_hist,b_hist,y_hist])\n", 313 | "tf.train.write_graph(sess.graph_def,'/tmp/tensor','graph.txt')\n", 314 | "writer = tf.train.SummaryWriter('/tmp/tensor/',sess.graph_def)\n", 315 | "sess.run(tf.initialize_all_variables())\n" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": null, 321 | "metadata": { 322 | "collapsed": false 323 | }, 324 | "outputs": [], 325 | "source": [ 326 | "##Training\n", 327 | " \n", 328 | "actual_output1 = []\n", 329 | "actual_output2 = []\n", 330 | "network_output1 = []\n", 331 | "network_output2 = []\n", 332 | "x_axis = []\n", 333 | " \n", 334 | " \n", 335 | "for i in range(3000):\n", 336 | " input_v, output_v = get_total_input_output()\n", 337 | " if cell_type == 1:\n", 338 | " _, _, network_output, merge = sess.run([lstm_update_op1,\n", 339 | " train_step,\n", 340 | " final_output,merged],\n", 341 | " feed_dict = {\n", 342 | " input_layer: input_v,\n", 343 | " correct_output: output_v})\n", 344 | " if cell_type == 2:\n", 345 | " _, _, network_output, merge = sess.run([lstm_update_op2,\n", 346 | " train_step,\n", 347 | " final_output,merged],\n", 348 | " feed_dict = {\n", 349 | " input_layer: input_v,\n", 350 | " correct_output: output_v})\n", 351 | " if cell_type == 3:\n", 352 | " _, _, network_output, merge = sess.run([lstm_update_op3,\n", 353 | " train_step,\n", 354 | " final_output,merged],\n", 355 | " feed_dict = {\n", 356 | " input_layer: input_v,\n", 357 | " correct_output: output_v})\n", 358 | " if cell_type == 4:\n", 359 | " _, _, network_output, merge = sess.run([lstm_update_op4,\n", 360 | " train_step,\n", 361 | " final_output,merged],\n", 362 | " feed_dict = {\n", 363 | " input_layer: input_v,\n", 364 | " correct_output: output_v})\n", 365 | " actual_output1.append(output_v[0][0])\n", 366 | " actual_output2.append(output_v[0][1])\n", 367 | " network_output1.append(network_output[0][0])\n", 368 | " network_output2.append(network_output[0][1])\n", 369 | " x_axis.append(i)\n", 370 | " writer.add_summary(merge, i)\n", 371 | " " 372 | ] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "execution_count": null, 377 | "metadata": { 378 | "collapsed": false 379 | }, 380 | "outputs": [], 381 | "source": [ 382 | "plt.plot(x_axis, network_output1, 'r-', x_axis, actual_output1, 'b-')\n", 383 | "plt.show()" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": null, 389 | "metadata": { 390 | "collapsed": false 391 | }, 392 | "outputs": [], 393 | "source": [ 394 | "plt.plot(x_axis, network_output2, 'r-', x_axis, actual_output2, 'b-')\n", 395 | "plt.show()" 396 | ] 397 | }, 398 | { 399 | "cell_type": "code", 400 | "execution_count": null, 401 | "metadata": { 402 | "collapsed": false 403 | }, 404 | "outputs": [], 405 | "source": [ 406 | "plt.plot(x_axis[18500:19999], network_output2[18500:19999], 'r-', x_axis[18500:19999], actual_output2[18500:19999], 'b-')\n", 407 | "plt.show()" 408 | ] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "execution_count": null, 413 | "metadata": { 414 | "collapsed": false 415 | }, 416 | "outputs": [], 417 | "source": [ 418 | "plt.plot(x_axis[0:15000], network_output2[0:15000], 'r-', x_axis[0:15000], actual_output2[0:15000], 'b-')\n", 419 | "plt.show()" 420 | ] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "execution_count": null, 425 | "metadata": { 426 | "collapsed": false 427 | }, 428 | "outputs": [], 429 | "source": [ 430 | "plt.plot(x_axis[150:999], network_output2[150:999], 'r-', x_axis[150:999], actual_output2[150:999], 'b-')\n", 431 | "plt.show()" 432 | ] 433 | }, 434 | { 435 | "cell_type": "code", 436 | "execution_count": null, 437 | "metadata": { 438 | "collapsed": false 439 | }, 440 | "outputs": [], 441 | "source": [ 442 | "plt.plot(x_axis[0:250], network_output2[0:250], 'r-', x_axis[0:250], actual_output2[0:250], 'b-')\n", 443 | "plt.show()" 444 | ] 445 | }, 446 | { 447 | "cell_type": "code", 448 | "execution_count": null, 449 | "metadata": { 450 | "collapsed": false 451 | }, 452 | "outputs": [], 453 | "source": [ 454 | "plt.plot(x_axis[78500:79999], network_output2[78500:79999], 'r-', x_axis[78500:79999], actual_output2[78500:79999], 'b-')\n", 455 | "plt.show()" 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "execution_count": null, 461 | "metadata": { 462 | "collapsed": false 463 | }, 464 | "outputs": [], 465 | "source": [ 466 | "##Testing\n", 467 | " \n", 468 | "for i in range(200):\n", 469 | " get_total_input_output()\n", 470 | "#Flush LSTM state\n", 471 | "###NEED TO FIX THIS TO RUN MODEL CHOSEN ABOVE###\n", 472 | "sess.run(lstm_state4.assign(tf.zeros([1, lstm_layer4.state_size])))" 473 | ] 474 | }, 475 | { 476 | "cell_type": "code", 477 | "execution_count": null, 478 | "metadata": { 479 | "collapsed": false 480 | }, 481 | "outputs": [], 482 | "source": [ 483 | "test_actual_output1 = []\n", 484 | "test_actual_output2 = []\n", 485 | "test_network_output1 = []\n", 486 | "test_network_output2 = []\n", 487 | "test_x_axis = []\n", 488 | " \n", 489 | " \n", 490 | "for i in range(1000):\n", 491 | " input_v, output_v = get_total_input_output()\n", 492 | " _, network_output = sess.run([lstm_update_op4,\n", 493 | " final_output],\n", 494 | " feed_dict = {\n", 495 | " input_layer: input_v,\n", 496 | " correct_output: output_v})\n", 497 | " \n", 498 | " test_actual_output1.append(output_v[0][0])\n", 499 | " test_actual_output2.append(output_v[0][1])\n", 500 | " test_network_output1.append(network_output[0][0])\n", 501 | " test_network_output2.append(network_output[0][1])\n", 502 | " test_x_axis.append(i)\n", 503 | " \n", 504 | "import matplotlib.pyplot as plt\n", 505 | "plt.plot(test_x_axis, test_network_output1, 'r-', test_x_axis, test_actual_output1, 'b-')\n", 506 | "plt.show()\n", 507 | "plt.plot(test_x_axis, test_network_output2, 'r-', test_x_axis, test_actual_output2, 'b-')\n", 508 | "plt.show()" 509 | ] 510 | } 511 | ], 512 | "metadata": { 513 | "kernelspec": { 514 | "display_name": "Python 2", 515 | "language": "python", 516 | "name": "python2" 517 | }, 518 | "language_info": { 519 | "codemirror_mode": { 520 | "name": "ipython", 521 | "version": 2 522 | }, 523 | "file_extension": ".py", 524 | "mimetype": "text/x-python", 525 | "name": "python", 526 | "nbconvert_exporter": "python", 527 | "pygments_lexer": "ipython2", 528 | "version": "2.7.11" 529 | } 530 | }, 531 | "nbformat": 4, 532 | "nbformat_minor": 0 533 | } 534 | -------------------------------------------------------------------------------- /Sine_RNN_Keras.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stderr", 12 | "output_type": "stream", 13 | "text": [ 14 | "/root/miniconda2/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", 15 | " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n", 16 | "Using TensorFlow backend.\n" 17 | ] 18 | } 19 | ], 20 | "source": [ 21 | "from __future__ import print_function\n", 22 | "import numpy as np\n", 23 | "import matplotlib.pyplot as plt\n", 24 | "from keras.models import Sequential\n", 25 | "from keras.layers import Dense, LSTM\n", 26 | "# https://github.com/fchollet/keras/blob/master/examples/stateful_lstm.py" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 26, 32 | "metadata": { 33 | "collapsed": true 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "# since we are using stateful rnn tsteps can be set to 1\n", 38 | "tsteps = 1\n", 39 | "batch_size = 25\n", 40 | "epochs = 3\n", 41 | "# number of elements ahead that are used to make the prediction\n", 42 | "lahead = 1" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": 3, 48 | "metadata": { 49 | "collapsed": true 50 | }, 51 | "outputs": [], 52 | "source": [ 53 | "def gen_cosine_amp(amp=100, period=1000, x0=0, xn=50000, step=1, k=0.0001):\n", 54 | " \"\"\"Generates an absolute cosine time series with the amplitude\n", 55 | " exponentially decreasing\n", 56 | " Arguments:\n", 57 | " amp: amplitude of the cosine function\n", 58 | " period: period of the cosine function\n", 59 | " x0: initial x of the time series\n", 60 | " xn: final x of the time series\n", 61 | " step: step of the time series discretization\n", 62 | " k: exponential rate\n", 63 | " \"\"\"\n", 64 | " cos = np.zeros(((xn - x0) * step, 1, 1))\n", 65 | " for i in range(len(cos)):\n", 66 | " idx = x0 + i * step\n", 67 | " cos[i, 0, 0] = amp * np.cos(2 * np.pi * idx / period)\n", 68 | " cos[i, 0, 0] = cos[i, 0, 0] * np.exp(-k * idx)\n", 69 | " return cos" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 15, 75 | "metadata": { 76 | "collapsed": false 77 | }, 78 | "outputs": [ 79 | { 80 | "name": "stdout", 81 | "output_type": "stream", 82 | "text": [ 83 | "Generating Data\n", 84 | "Input shape: (50000, 1, 1)\n", 85 | "[[[ 99.98802678]]\n", 86 | "\n", 87 | " [[ 99.972108 ]]\n", 88 | "\n", 89 | " [[ 99.95224507]]\n", 90 | "\n", 91 | " [[ 99.92843956]]]\n" 92 | ] 93 | } 94 | ], 95 | "source": [ 96 | "print('Generating Data')\n", 97 | "cos = gen_cosine_amp()\n", 98 | "print('Input shape:', cos.shape)\n", 99 | "print (cos[1:5])" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 16, 105 | "metadata": { 106 | "collapsed": false 107 | }, 108 | "outputs": [ 109 | { 110 | "name": "stdout", 111 | "output_type": "stream", 112 | "text": [ 113 | "Output shape\n", 114 | "(50000, 1)\n", 115 | "[[ 99.972108 ]\n", 116 | " [ 99.95224507]\n", 117 | " [ 99.92843956]\n", 118 | " [ 99.9006932 ]]\n" 119 | ] 120 | } 121 | ], 122 | "source": [ 123 | "expected_output = np.zeros((len(cos), 1))\n", 124 | "for i in range(len(cos) - lahead):\n", 125 | " expected_output[i, 0] = np.mean(cos[i + 1:i + lahead + 1])\n", 126 | "\n", 127 | "print('Output shape')\n", 128 | "print(expected_output.shape)\n", 129 | "print (expected_output[1:5])" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 17, 135 | "metadata": { 136 | "collapsed": false 137 | }, 138 | "outputs": [ 139 | { 140 | "name": "stdout", 141 | "output_type": "stream", 142 | "text": [ 143 | "Creating Model\n" 144 | ] 145 | } 146 | ], 147 | "source": [ 148 | "print('Creating Model')\n", 149 | "model = Sequential()\n", 150 | "model.add(LSTM(20,\n", 151 | " batch_input_shape=(batch_size, tsteps, 1),\n", 152 | " return_sequences=True,\n", 153 | " stateful=True))\n", 154 | "model.add(LSTM(20,\n", 155 | " batch_input_shape=(batch_size, tsteps, 1),\n", 156 | " return_sequences=False,\n", 157 | " stateful=True))\n", 158 | "model.add(Dense(1))\n", 159 | "model.compile(loss='mse', optimizer='rmsprop')" 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "execution_count": 27, 165 | "metadata": { 166 | "collapsed": false 167 | }, 168 | "outputs": [ 169 | { 170 | "name": "stdout", 171 | "output_type": "stream", 172 | "text": [ 173 | "Training\n", 174 | "Epoch 0 / 3\n", 175 | "Epoch 1/1\n", 176 | "50000/50000 [==============================] - 28s - loss: 79.4604 \n", 177 | "Epoch 1 / 3\n", 178 | "Epoch 1/1\n", 179 | "50000/50000 [==============================] - 28s - loss: 63.2035 \n", 180 | "Epoch 2 / 3\n", 181 | "Epoch 1/1\n", 182 | "50000/50000 [==============================] - 28s - loss: 51.1864 \n" 183 | ] 184 | } 185 | ], 186 | "source": [ 187 | "print('Training')\n", 188 | "for i in range(epochs):\n", 189 | " print('Epoch', i, '/', epochs)\n", 190 | " model.fit(cos,\n", 191 | " expected_output,\n", 192 | " batch_size=batch_size,\n", 193 | " verbose=1,\n", 194 | " nb_epoch=1,\n", 195 | " shuffle=False)\n", 196 | " model.reset_states()" 197 | ] 198 | }, 199 | { 200 | "cell_type": "code", 201 | "execution_count": 28, 202 | "metadata": { 203 | "collapsed": false 204 | }, 205 | "outputs": [ 206 | { 207 | "name": "stdout", 208 | "output_type": "stream", 209 | "text": [ 210 | "Predicting\n", 211 | "[[ 99.972108 ]\n", 212 | " [ 99.95224507]\n", 213 | " [ 99.92843956]\n", 214 | " [ 99.9006932 ]]\n", 215 | "[[ 27.37412834]\n", 216 | " [ 27.37412643]\n", 217 | " [ 27.37412834]\n", 218 | " [ 27.37413025]]\n", 219 | "(50000, 1)\n" 220 | ] 221 | } 222 | ], 223 | "source": [ 224 | "print('Predicting')\n", 225 | "predicted_output = model.predict(cos, batch_size=batch_size)\n", 226 | "print (expected_output[1:5])\n", 227 | "print (predicted_output[1:5])\n", 228 | "print (predicted_output.shape)" 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "execution_count": 29, 234 | "metadata": { 235 | "collapsed": false 236 | }, 237 | "outputs": [ 238 | { 239 | "name": "stdout", 240 | "output_type": "stream", 241 | "text": [ 242 | "[[ 67.01330804]\n", 243 | " [ 66.99999351]\n", 244 | " [ 66.9840362 ]\n", 245 | " [ 66.96543727]]\n", 246 | "[[ 43.07381439]\n", 247 | " [ 43.04713821]\n", 248 | " [ 43.01917267]\n", 249 | " [ 42.99278259]]\n", 250 | "[[ 1.83105303]\n", 251 | " [ 1.83068923]\n", 252 | " [ 1.83025321]\n", 253 | " [ 1.82974502]]\n", 254 | "[[ 1.60969877]\n", 255 | " [ 1.61093676]\n", 256 | " [ 1.61212707]\n", 257 | " [ 1.6132586 ]]\n" 258 | ] 259 | } 260 | ], 261 | "source": [ 262 | "print (expected_output[4001:4005])\n", 263 | "print (predicted_output[4001:4005])\n", 264 | "print (expected_output[40001:40005])\n", 265 | "print (predicted_output[40001:40005])" 266 | ] 267 | }, 268 | { 269 | "cell_type": "code", 270 | "execution_count": 30, 271 | "metadata": { 272 | "collapsed": false 273 | }, 274 | "outputs": [ 275 | { 276 | "name": "stdout", 277 | "output_type": "stream", 278 | "text": [ 279 | "Plotting Results\n" 280 | ] 281 | }, 282 | { 283 | "data": { 284 | "image/png": "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\n0EN6o/zJT7KnUHj6abjySs37efdd7ceHH9bh6J4FCzSM16OH9tfbb+u1eOKJgRDYtEkF0mOP6bk+\n/ljF3JFH6o0w3Aff/CYcd5x+HkccoaLhmmuC62XCBL0eJ03SUN63vqVtP/74wPu5cKGGBS+/XEef\nnXmm2u61V5BzVF2t7/fAA7W9Bx+sfb3HHiowN2/Wc953n16bN92kvzv//a++5vzz9f06p9tOOknF\n1DPPaNu/8hX9jJ56St//5MkqFnfcUfvzn//Utg8cqDlRs2bpyLtrr9URbF/7ml4j3/62/h6de64K\n8ylT4I9/1D7Yay8VU+eeq78tRx6pSd/jx6ugOekk/R386le1D4YM0e/0z3+u7Xz0Ub0Ohg7V39gT\nTtDj9u6t573vPv3Mr75av+edO6swLSrOuSb9AFoBm4GvRrY/ADyR8JphgNthh8Ndx44nu5NPDh6d\nOz/srrvO/Y+XXnIOnJs9O9j2ve85N3y4y6JtW+duuy1Yf/JJfd3nnwfbzjrLuSOOCNa3bFGb++4L\ntj3yiG5buzbYdtxxzn3jG8H6hg1q89e/Bttuu03bEObYY507/fRgfeZMfd3LLwfbRo92rn377NcN\nHuzcZZelv27UKOd23z33dZdeGqz7vps5M9j2k58494UvBOu1tc61bu3cH/8YbPvvf/V1n34abLvg\nAuf23z/7fH36uKzP6qmn9HVLlgTbzj/fuQMPDNY3bcrt88cf123LlwfbjjvOudNOC9Y3blSbMWOC\nbbfcon1eWxtsO+kk504+OVj/5BN93euvB9vuuce5Fi30mJ5+/Zz72c+C9WXL9HWPPZbdB8OGZffB\nwQc7d/bZue9l6dJg229+41ynTkE7165Vm7/8JbB5/33d9sYbwbavfz37enXOuZ131s/Q8+c/O1dW\n5lxlZbBt1Ci188yapcd++ulg22uv6bZJk3S9tta5/v2du/jiwKamxrkePZy76qpg24UXOrfbbtlt\n+s53nBs0KHh/Dz+c+519+mnd9uGHur5okX4G99wT2Kxd61y7ds7dcEOw7fDDnfviF7PPd8opzu25\nZ3C+a67R71D4+nnooez39+KLuv7MM4HNkiX6up/+NFjv2NG5Sy4JbGpr9VocONC59eu1Tw44wLm9\n93Zu8+bA7o9/1OO/+qqu//jHzrVp49yMGYHN4sXO9erl3NFH62/PY4/pa+6+O7DZskWv4YoK56ZN\nc27yZG3T176m5/bcdpu+9ne/c27uXOf22EM/8wULApt339Xr7tBD9fr/8pf1u/7vfwc2K1bo97pD\nB/0t+u539bg//WnQv7W1zv32t86J6G/axRc716qVc4cc4tzChcGxXnrJud699Zo5+2znOnd2bocd\nsn+3Zs7Uaxr0c+3d27nycuduuinozzVr9DNo0cK5nj3VBpw755zgfFu26LXfo4fu69RJl0OGOPe3\nvwXHevll5w47TPf5R+/eeo35e8Onn+p13aZNYNOhg95nPvgguDZuvNG5XXYJbFq21GvxiSf0nrB6\ntX6nv/Qlbbu3O+QQvT5mz3Zu5Urnnn1W30u3boFN//7OnXeevn7GDOfGjXPuyiud22cf5+BhBye7\n8vKTXZ8+J7shQ052Xbse7gAHDHPFuO8X46R1biRMAG4LrQswH7giwX4Y4M45572sm6RzznXvrj/k\nntdfz71JnneefthhOnd27uabg/U4gXHBBdk3ycpKtXn44WCbv7mGbyyHHaYXkqe2Vi+8//u/YNuN\nN+qFFuaUU/RHxjN5sh57woRg27336rbwj06/fvpj6/n8c7V54ons93LAAdnnO+ggFQKeuBv+DTfo\nl91TXa02Dz4YbPvwQ902fnyw7dRTnTvxxOzz7bVX9o3snnv0xyv8g33VVc4NGBCsz5+vxw7/OL7x\nhm6bMiXYtueezv3oR9nn69kz+6Y1alTuTfL733du6NBg/dln9djz5gXbvGDzN43167XdYbFUW6vX\n1I03BtsOO8y5M8/MPt/Ikc7tt1+wfsMNudfBv/6l55szR9ffeiv7pumciqRWrZy7/fZgW9+++uMU\n5hvf0HZ4zjorVzD+8596/Llzdf3ee/V6Xb06sNmwQUWA/85Mm6av+de/so917rl6E3ZOr9FevZy7\n/PJsm+eeyxYdp52W26aNG53r2jV4P6NH601y5cpsuwsucG7HHfXGM3Firjh0LhBVzz/v3KpV+jmN\nGpVts3mziomvf13bvd9++t0Pi1jn9HvWpo3eMM87z7kuXbK/L86puG3ZUm+W11zjcoSu75vDDtPP\n7KqrAtEQ5dVX9bM4/HC9IZ9xRm6bVq/WPx2dOqnw3nff7N8xzxVXBDe2fv2yfyM9b72lnxlo/z/3\nXK5NZaVeRyLal3femdsm5/S7tOeeeq5f/CJb2HuWLAn+xFx2mQr8KDU1+l07/XS1mT4918Y5/b38\n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\n", 285 | "text/plain": [ 286 | "" 287 | ] 288 | }, 289 | "metadata": {}, 290 | "output_type": "display_data" 291 | } 292 | ], 293 | "source": [ 294 | "print('Plotting Results')\n", 295 | "plt.subplot(2, 1, 1)\n", 296 | "plt.plot(expected_output)\n", 297 | "plt.title('Expected')\n", 298 | "plt.subplot(2, 1, 2)\n", 299 | "plt.plot(predicted_output)\n", 300 | "plt.title('Predicted')\n", 301 | "plt.show()" 302 | ] 303 | }, 304 | { 305 | "cell_type": "code", 306 | "execution_count": 31, 307 | "metadata": { 308 | "collapsed": false 309 | }, 310 | "outputs": [ 311 | { 312 | "data": { 313 | "image/png": "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\n", 314 | "text/plain": [ 315 | "" 316 | ] 317 | }, 318 | "metadata": {}, 319 | "output_type": "display_data" 320 | } 321 | ], 322 | "source": [ 323 | "plt.plot(predicted_output, 'r-', expected_output, 'b-')\n", 324 | "plt.show()" 325 | ] 326 | } 327 | ], 328 | "metadata": { 329 | "kernelspec": { 330 | "display_name": "Python 2", 331 | "language": "python", 332 | "name": "python2" 333 | }, 334 | "language_info": { 335 | "codemirror_mode": { 336 | "name": "ipython", 337 | "version": 2 338 | }, 339 | "file_extension": ".py", 340 | "mimetype": "text/x-python", 341 | "name": "python", 342 | "nbconvert_exporter": "python", 343 | "pygments_lexer": "ipython2", 344 | "version": "2.7.12" 345 | } 346 | }, 347 | "nbformat": 4, 348 | "nbformat_minor": 1 349 | } 350 | --------------------------------------------------------------------------------