Diff of /backwardPropagation.py [000000] .. [16d75d]

Switch to side-by-side view

--- a
+++ b/backwardPropagation.py
@@ -0,0 +1,135 @@
+import pandas
+# from pattern.en import sentiment
+# import HTMLParser
+import re
+import pandas as pd
+import tensorflow as tf
+from collections import Counter
+from nltk.corpus import stopwords
+import string
+from collections import OrderedDict
+from nltk import bigrams
+from nltk.tokenize import word_tokenize
+import matplotlib.pyplot as plt
+import numpy as np
+# import plotly.plotly as py
+
+# import pandas as pd
+# import matplotlib.pyplot as plt
+import numpy as np
+from sklearn.metrics import recall_score, precision_score, accuracy_score
+import math
+from sklearn.feature_extraction.text import CountVectorizer
+from sklearn.model_selection import train_test_split
+from sklearn.feature_extraction.text import TfidfVectorizer
+from sklearn.naive_bayes import MultinomialNB
+from sklearn.metrics import confusion_matrix
+from sklearn.feature_selection import RFE
+from tensorflow.python.framework import ops
+import requests
+from bs4 import BeautifulSoup
+# import numpy as np
+# import matplotlib.pyplot as plt
+# from matplotlib import style
+# style.use("ggplot")
+import os
+
+from tf_utils import load_dataset, convert_to_one_hot,create_placeholders,initialize_parameters,forward_propagation,compute_cost,random_mini_batches
+
+
+def model(X_train, Y_train, X_test, Y_test, learning_rate=0.0001,
+          num_epochs=2000, minibatch_size=32, print_cost=True):
+    ops.reset_default_graph()  # to be able to rerun the model without overwriting tf variables
+    tf.set_random_seed(1)  # to keep consistent results
+    seed = 3  # to keep consistent results
+    (n_x, m) = X_train.shape  # (n_x: input size, m : number of examples in the train set)
+    n_y = Y_train.shape[0]  # n_y : output size
+    costs = []  # To keep track of the cost
+
+    # Create Placeholders of shape (n_x, n_y)
+
+    X, Y = create_placeholders(n_x, n_y)
+
+
+    # Initialize parameters
+
+    parameters = initialize_parameters()
+
+
+    # Forward propagation: Build the forward propagation in the tensorflow graph
+
+    Z3 = forward_propagation(X, parameters)
+
+
+    # Cost function: Add cost function to tensorflow graph
+
+    cost = compute_cost(Z3, Y)
+
+
+    # Backpropagation: Define the tensorflow optimizer. Use an AdamOptimizer.
+
+    optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
+
+
+    # Initialize all the variables
+    init = tf.global_variables_initializer()
+
+    # Start the session to compute the tensorflow graph
+    with tf.Session() as sess:
+
+        # Run the initialization
+        sess.run(init)
+
+        # Do the training loop
+        for epoch in range(num_epochs):
+
+            epoch_cost = 0  # Defines a cost related to an epoch
+            num_minibatches = int(m / minibatch_size)
+            # number of minibatches of size minibatch_size in the train set
+
+            #print("Number of minibatch = " + str(num_minibatches))
+
+            minibatches = random_mini_batches(X_train, Y_train, minibatch_size)
+
+            for minibatch in minibatches:
+                # Select a minibatch
+                (minibatch_X, minibatch_Y) = minibatch
+
+                # IMPORTANT: The line that runs the graph on a minibatch.
+                # Run the session to execute the "optimizer" and the "cost", the feedict should contain a minibatch for (X,Y).
+                ### START CODE HERE ### (1 line)
+                _, minibatch_cost = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})
+                #print("MinibatchCOst is " +str(minibatch_cost))
+                ### END CODE HERE ###
+
+                epoch_cost += minibatch_cost / num_minibatches
+
+            # Print the cost every epoch
+            if print_cost == True and epoch % 100 == 0:
+                print("Cost after epoch %i: %f" % (epoch, epoch_cost))
+            if print_cost == True and epoch % 5 == 0:
+                costs.append(epoch_cost)
+
+        # plot the cost
+        plt.plot(np.squeeze(costs))
+        plt.ylabel('cost')
+        plt.xlabel('iterations (per tens)')
+        plt.title("Learning rate =" + str(learning_rate))
+        plt.show()
+
+        # lets save the parameters in a variable
+        parameters = sess.run(parameters)
+        print("Parameters have been trained!")
+
+        # Calculate the correct predictions
+        correct_prediction = tf.equal(tf.argmax(Z3), tf.argmax(Y))
+
+        # Calculate accuracy on the test set
+        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
+
+        print("Train Accuracy:", accuracy.eval({X: X_train, Y: Y_train}))
+        print("Test Accuracy:", accuracy.eval({X: X_test, Y: Y_test}))
+
+        return parameters
+
+