diff --git a/CNN_with_image/.ipynb_checkpoints/Testing-checkpoint.ipynb b/CNN_with_image/.ipynb_checkpoints/Testing-checkpoint.ipynb new file mode 100644 index 0000000..d3957cf --- /dev/null +++ b/CNN_with_image/.ipynb_checkpoints/Testing-checkpoint.ipynb @@ -0,0 +1,291 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", + " from ._conv import register_converters as _register_converters\n" + ] + } + ], + "source": [ + "import tensorflow as tf\n", + "import csv\n", + "from PIL import Image\n", + "import numpy as np\n", + "import PIL.ImageOps \n", + "import cv2\n", + "from selenium import webdriver\n", + "from selenium.webdriver.common.keys import Keys\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "files = []\n", + "action = []\n", + "\n", + "\n", + "with open(\"1/out.csv\" , \"r\") as f :\n", + " data = csv.reader(f, delimiter=',')\n", + " for i in data:\n", + " if(i[0] == 1):\n", + " action.append(0)\n", + " else:\n", + " action.append(1)\n", + " files.append(i[1])\n", + " \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def parse_function(filename,basewidth):\n", + " img = Image.open(filename).convert('L')\n", + " img = PIL.ImageOps.invert(img)\n", + " wpercent = (basewidth/float(img.size[0]))\n", + " hsize = int((float(img.size[1])*float(wpercent)))\n", + " img = img.resize((basewidth,hsize), Image.ANTIALIAS) \n", + " return img\n", + "\n", + "\n", + "x_v = [np.array(parse_function(i,270)).flatten() for i in files ] \n", + "y_v = action \n", + "\n", + "tf.set_random_seed(777) " + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "\n", + "x_inp = tf.placeholder(tf.float32, [None, 20250]) \n", + "y = tf.placeholder(tf.float32, [None])\n", + "\n", + "x = tf.reshape(x_inp, [-1, 75, 270, 1])" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "weight_conv1 = tf.Variable(tf.random_normal([5,5,1,32])) \n", + "weight_conv2 = tf.Variable(tf.random_normal([5,5,32,70]))\n", + "weight_fc = tf.Variable(tf.random_normal([5 * 18 * 64 ,20250]))\n", + "weight_out = tf.Variable(tf.random_normal([20250,1]))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bias_conv1 = tf.Variable(tf.random_normal([32])) \n", + "bias_conv2 = tf.Variable(tf.random_normal([70]))\n", + "bias_fc = tf.Variable(tf.random_normal([20250]))\n", + "bias_out = tf.Variable(tf.random_normal([1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "conv1 = tf.add(tf.nn.conv2d(x , weight_conv1 , strides=[1,1,1,1] , padding=\"SAME\") , bias_conv1) \n", + "max_pool1 = tf.nn.avg_pool(conv1 , ksize=[1,1,1,1] , strides=[1,1,1,1] , padding=\"SAME\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "conv2 = tf.add(tf.nn.conv2d(max_pool1 , weight_conv2 , strides=[1,1,1,1] , padding=\"SAME\") , bias_conv2)\n", + "max_pool2 = tf.nn.avg_pool(conv2 , ksize=[1,10,10,1] , strides=[1,10,10,1] , padding=\"SAME\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "fc = tf.reshape(max_pool1 , [-1 , 5 * 18 * 64 ])\n", + "fc = tf.nn.relu( tf.add(tf.matmul(fc , weight_fc) , bias_fc) )\n", + "out = tf.matmul(fc , weight_out) + bias_out\n" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits_v2(logits=out, labels=y) )\n", + "optimizer = tf.train.GradientDescentOptimizer(learning_rate=.0000000000000001).minimize(cost)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "correct_prediction = tf.equal(tf.cast(tf.argmax(out, 1),\"float64\"),tf.cast(y , \"float64\") )\n", + "accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float32\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sess = tf.Session()\n", + "sess.run(tf.global_variables_initializer())" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fig, ((ax1, ax2) , (ax3,ax4)) = plt.subplots(nrows=2, ncols=2,figsize=(10,5))\n", + "\n", + "fig = sess.run(max_pool2 , feed_dict={x_inp : [x_v[51]] })\n", + "ax1.imshow(fig.reshape([ 10 * 6, 7 * 36])).figure\n", + "fig = sess.run(x , feed_dict={x_inp : [x_v[51]] })\n", + "ax2.imshow(fig.reshape([75,270])).figure\n", + "fig = sess.run(max_pool2 , feed_dict={x_inp : [x_v[52]] })\n", + "ax3.imshow(fig.reshape([ 10 * 6, 7 * 36])).figure\n", + "fig = sess.run(x , feed_dict={x_inp : [x_v[52]] })\n", + "ax4.imshow(fig.reshape([75,270])).figure\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "sess = tf.Session()\n", + "sess.run(tf.global_variables_initializer())\n", + "\n", + "hm_epochs = 2\n", + "batch_size = 100\n", + "\n", + "\n", + "\n", + "for epoch in range(hm_epochs):\n", + " epoch_loss = 0\n", + " for i in range(int(len(files)//batch_size)):\n", + " epoch_x, epoch_y = x_v[ (i * batch_size) : (i +1 ) * batch_size ] , y_v[ (i * batch_size) : (i +1 ) * batch_size ] \n", + " #print sess.run(max_pool1, feed_dict={x_inp: epoch_x, y: epoch_y}).shape\n", + " _, c = sess.run([optimizer, cost], feed_dict={x_inp: epoch_x, y: epoch_y})\n", + " epoch_loss += c\n", + " print (i * batch_size) , (i +1 ) * batch_size , i , c\n", + " #print map(sum , sess.run([weight_conv1 , weight_conv2 , weight_fc , weight_out ], feed_dict={x_inp: epoch_x, y: epoch_y}) )\n", + " print 'Completed Epoch# : ', epoch, ' : Epochs Left : ',hm_epochs-epoch - 1,' : loss : ',epoch_loss\n", + "\n", + "sess.close()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/CNN_with_image/Testing.ipynb b/CNN_with_image/Testing.ipynb new file mode 100644 index 0000000..d3957cf --- /dev/null +++ b/CNN_with_image/Testing.ipynb @@ -0,0 +1,291 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", + " from ._conv import register_converters as _register_converters\n" + ] + } + ], + "source": [ + "import tensorflow as tf\n", + "import csv\n", + "from PIL import Image\n", + "import numpy as np\n", + "import PIL.ImageOps \n", + "import cv2\n", + "from selenium import webdriver\n", + "from selenium.webdriver.common.keys import Keys\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "files = []\n", + "action = []\n", + "\n", + "\n", + "with open(\"1/out.csv\" , \"r\") as f :\n", + " data = csv.reader(f, delimiter=',')\n", + " for i in data:\n", + " if(i[0] == 1):\n", + " action.append(0)\n", + " else:\n", + " action.append(1)\n", + " files.append(i[1])\n", + " \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def parse_function(filename,basewidth):\n", + " img = Image.open(filename).convert('L')\n", + " img = PIL.ImageOps.invert(img)\n", + " wpercent = (basewidth/float(img.size[0]))\n", + " hsize = int((float(img.size[1])*float(wpercent)))\n", + " img = img.resize((basewidth,hsize), Image.ANTIALIAS) \n", + " return img\n", + "\n", + "\n", + "x_v = [np.array(parse_function(i,270)).flatten() for i in files ] \n", + "y_v = action \n", + "\n", + "tf.set_random_seed(777) " + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "\n", + "x_inp = tf.placeholder(tf.float32, [None, 20250]) \n", + "y = tf.placeholder(tf.float32, [None])\n", + "\n", + "x = tf.reshape(x_inp, [-1, 75, 270, 1])" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "weight_conv1 = tf.Variable(tf.random_normal([5,5,1,32])) \n", + "weight_conv2 = tf.Variable(tf.random_normal([5,5,32,70]))\n", + "weight_fc = tf.Variable(tf.random_normal([5 * 18 * 64 ,20250]))\n", + "weight_out = tf.Variable(tf.random_normal([20250,1]))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bias_conv1 = tf.Variable(tf.random_normal([32])) \n", + "bias_conv2 = tf.Variable(tf.random_normal([70]))\n", + "bias_fc = tf.Variable(tf.random_normal([20250]))\n", + "bias_out = tf.Variable(tf.random_normal([1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "conv1 = tf.add(tf.nn.conv2d(x , weight_conv1 , strides=[1,1,1,1] , padding=\"SAME\") , bias_conv1) \n", + "max_pool1 = tf.nn.avg_pool(conv1 , ksize=[1,1,1,1] , strides=[1,1,1,1] , padding=\"SAME\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "conv2 = tf.add(tf.nn.conv2d(max_pool1 , weight_conv2 , strides=[1,1,1,1] , padding=\"SAME\") , bias_conv2)\n", + "max_pool2 = tf.nn.avg_pool(conv2 , ksize=[1,10,10,1] , strides=[1,10,10,1] , padding=\"SAME\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "fc = tf.reshape(max_pool1 , [-1 , 5 * 18 * 64 ])\n", + "fc = tf.nn.relu( tf.add(tf.matmul(fc , weight_fc) , bias_fc) )\n", + "out = tf.matmul(fc , weight_out) + bias_out\n" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits_v2(logits=out, labels=y) )\n", + "optimizer = tf.train.GradientDescentOptimizer(learning_rate=.0000000000000001).minimize(cost)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "correct_prediction = tf.equal(tf.cast(tf.argmax(out, 1),\"float64\"),tf.cast(y , \"float64\") )\n", + "accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float32\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sess = tf.Session()\n", + "sess.run(tf.global_variables_initializer())" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fig, ((ax1, ax2) , (ax3,ax4)) = plt.subplots(nrows=2, ncols=2,figsize=(10,5))\n", + "\n", + "fig = sess.run(max_pool2 , feed_dict={x_inp : [x_v[51]] })\n", + "ax1.imshow(fig.reshape([ 10 * 6, 7 * 36])).figure\n", + "fig = sess.run(x , feed_dict={x_inp : [x_v[51]] })\n", + "ax2.imshow(fig.reshape([75,270])).figure\n", + "fig = sess.run(max_pool2 , feed_dict={x_inp : [x_v[52]] })\n", + "ax3.imshow(fig.reshape([ 10 * 6, 7 * 36])).figure\n", + "fig = sess.run(x , feed_dict={x_inp : [x_v[52]] })\n", + "ax4.imshow(fig.reshape([75,270])).figure\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "sess = tf.Session()\n", + "sess.run(tf.global_variables_initializer())\n", + "\n", + "hm_epochs = 2\n", + "batch_size = 100\n", + "\n", + "\n", + "\n", + "for epoch in range(hm_epochs):\n", + " epoch_loss = 0\n", + " for i in range(int(len(files)//batch_size)):\n", + " epoch_x, epoch_y = x_v[ (i * batch_size) : (i +1 ) * batch_size ] , y_v[ (i * batch_size) : (i +1 ) * batch_size ] \n", + " #print sess.run(max_pool1, feed_dict={x_inp: epoch_x, y: epoch_y}).shape\n", + " _, c = sess.run([optimizer, cost], feed_dict={x_inp: epoch_x, y: epoch_y})\n", + " epoch_loss += c\n", + " print (i * batch_size) , (i +1 ) * batch_size , i , c\n", + " #print map(sum , sess.run([weight_conv1 , weight_conv2 , weight_fc , weight_out ], feed_dict={x_inp: epoch_x, y: epoch_y}) )\n", + " print 'Completed Epoch# : ', epoch, ' : Epochs Left : ',hm_epochs-epoch - 1,' : loss : ',epoch_loss\n", + "\n", + "sess.close()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/CNN_with_image/model.py b/CNN_with_image/model.py new file mode 100644 index 0000000..3419071 --- /dev/null +++ b/CNN_with_image/model.py @@ -0,0 +1,130 @@ +import tensorflow as tf +import csv +from PIL import Image +import numpy as np +import PIL.ImageOps +import cv2 +from selenium import webdriver +from selenium.webdriver.common.keys import Keys + + + +files = [] +action = [] + + +with open("1/out.csv" , "r") as f : + data = csv.reader(f, delimiter=',') + for i in data: + if(i[0] == 1): + action.append(0) + else: + action.append(1) + files.append(i[1]) + + +def parse_function(filename,basewidth): + img = Image.open(filename).convert('L') + #img = PIL.ImageOps.invert(img) + wpercent = (basewidth/float(img.size[0])) + hsize = int((float(img.size[1])*float(wpercent))) + img = img.resize((basewidth,hsize), Image.ANTIALIAS) + return img + + +x_v = [np.array(parse_function(i,270)).flatten() for i in files ] +y_v = action + + +print "Loaded all Images" + +print '''Starting Training CNN ( Tensorflow ) ''' + +tf.set_random_seed(777) + + + +x_inp = tf.placeholder(tf.float32, [None, 20250]) +y = tf.placeholder(tf.float32, [None]) + +x = tf.reshape(x_inp, [-1, 75, 270, 1]) + +weight_conv1 = tf.Variable(tf.zeros([5,5,1,32])) +weight_conv2 = tf.Variable(tf.zeros([5,5,32,64])) +weight_fc = tf.Variable(tf.zeros([5 * 18 * 64 ,800])) +weight_out = tf.Variable(tf.zeros([800,1])) + +bias_conv1 = tf.Variable(tf.random_normal([32])) +bias_conv2 = tf.Variable(tf.random_normal([64])) +bias_fc = tf.Variable(tf.random_normal([800])) +bias_out = tf.Variable(tf.random_normal([1])) + +conv1 = tf.add(tf.nn.conv2d(x , weight_conv1 , strides=[1,1,1,1] , padding="SAME") , bias_conv1) +max_pool1 = tf.nn.max_pool(conv1 , ksize=[1,5,5,1] , strides=[1,5,5,1] , padding="SAME") + +conv2 = tf.add(tf.nn.conv2d(max_pool1 , weight_conv2 , strides=[1,1,1,1] , padding="SAME") , bias_conv2) +max_pool2 = tf.nn.max_pool(conv2 , ksize=[1,3,3,1] , strides=[1,3,3,1] , padding="SAME") + +fc = tf.reshape(max_pool2 , [-1 , 5 * 18 * 64 ]) +fc = tf.nn.relu( tf.add(tf.matmul(fc , weight_fc) , bias_fc) ) + +out = tf.matmul(fc , weight_out) + bias_out + +cost = tf.reduce_mean(-1 * (tf.reduce_sum(y*tf.log(out + 1e-30 )) ) ) +optimizer = tf.train.AdamOptimizer(learning_rate=.000000001).minimize(cost) + +correct_prediction = tf.equal(tf.cast(tf.argmax(out, 1),"float64"),tf.cast(y , "float64") ) +accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float32")) + +sess = tf.Session() +sess.run(tf.global_variables_initializer()) + +hm_epochs = 2 +batch_size = 50 + + + +for epoch in range(hm_epochs): + epoch_loss = 0 + for i in range(int(len(files)//batch_size)): + epoch_x, epoch_y = x_v[ (i * batch_size) : (i +1 ) * batch_size ] , y_v[ (i * batch_size) : (i +1 ) * batch_size ] + #print sess.run(max_pool1, feed_dict={x_inp: epoch_x, y: epoch_y}).shape + _, c = sess.run([optimizer, cost], feed_dict={x_inp: epoch_x, y: epoch_y}) + epoch_loss += c + print c + print 'Completed Epoch# : ', epoch, ' : Epochs Left : ',hm_epochs-epoch - 1,' : loss : ',epoch_loss + + +#print 'Accuracy For Training is ' ,sess.run(accuracy , feed_dict={x_inp:np.array(x_v[0:500]), y:y_v[0:500]}) , "%" +exit() + +import math + +driver = webdriver.Chrome() + +driver.get("chrome://dino") +elem = driver.find_element_by_id("t") + +variable = 1 +while True: + if( elem.get_attribute("class") == "offline" ):continue + if(driver.execute_script("return Runner.instance_.playing;") == False ): + elem.send_keys(Keys.SPACE) + continue + + driver.save_screenshot("temp/screenshot-{}.png".format(variable)) + img = cv2.imread("temp/screenshot-{}.png".format( variable)) + + img = img[ 168 : 400 , 105: ] + + ret,thresh_img = cv2.threshold(img,127,255,cv2.THRESH_BINARY) + cv2.imwrite("temp/train-1.png", thresh_img) + + value = parse_function("temp/train-1.png",200) + + value = sess.run(out , feed_dict={x_inp : [np.array(value).flatten()]}) + + print value + + if(round(value) == 0) : + elem.send_keys(Keys.SPACE) diff --git a/CNN_with_image/temp/screenshot-1.png b/CNN_with_image/temp/screenshot-1.png new file mode 100644 index 0000000..cd68de0 Binary files /dev/null and b/CNN_with_image/temp/screenshot-1.png differ diff --git a/CNN_with_image/temp/train-1.png b/CNN_with_image/temp/train-1.png new file mode 100644 index 0000000..1020c7f Binary files /dev/null and b/CNN_with_image/temp/train-1.png differ diff --git a/Logistic_Regression/.gitignore b/Logistic_Regression_with_image/.gitignore similarity index 51% rename from Logistic_Regression/.gitignore rename to Logistic_Regression_with_image/.gitignore index b78ade2..6bdb402 100644 --- a/Logistic_Regression/.gitignore +++ b/Logistic_Regression_with_image/.gitignore @@ -1,4 +1,5 @@ # Don't track content of these folders screens/ -1/ +Logistic_Regression_with_image/1/ +CNN_with_image/1/ temp/ \ No newline at end of file diff --git a/Logistic_Regression/helper.py b/Logistic_Regression_with_image/helper.py similarity index 100% rename from Logistic_Regression/helper.py rename to Logistic_Regression_with_image/helper.py diff --git a/Logistic_Regression/image_opt.py b/Logistic_Regression_with_image/image_opt.py similarity index 100% rename from Logistic_Regression/image_opt.py rename to Logistic_Regression_with_image/image_opt.py diff --git a/Logistic_Regression/main.py b/Logistic_Regression_with_image/main.py similarity index 100% rename from Logistic_Regression/main.py rename to Logistic_Regression_with_image/main.py diff --git a/Logistic_Regression/model.py b/Logistic_Regression_with_image/model.py similarity index 77% rename from Logistic_Regression/model.py rename to Logistic_Regression_with_image/model.py index 3bdac32..b902b5e 100644 --- a/Logistic_Regression/model.py +++ b/Logistic_Regression_with_image/model.py @@ -35,7 +35,7 @@ def parse_function(filename,basewidth): print "Loaded all Images" -print "Starting Training on NN ( Tensorflow ) " +print "Starting Training NN ( Tensorflow ) " ''' Using a Neural Network with No Hidden Layers with 55*200 input layers. total of 55 * 200 Values. @@ -50,9 +50,10 @@ def parse_function(filename,basewidth): # Parameters #learning_rate = .00000000001 -learning_rate = .0000000001 +#learning_rate = .0000000000001 +learning_rate = .00000000000000001 training_epochs = 100 -batch_size = 100 +batch_size = 1 display_step = 1 tf.set_random_seed(777) @@ -66,7 +67,7 @@ def parse_function(filename,basewidth): #cost = tf.reduce_mean(-1 * (tf.reduce_sum(y*tf.log(pred) + tf.reduce_sum( (y-1)*tf.log(pred -1) ) ))) -cost = tf.reduce_mean(-1 * (tf.reduce_sum(y*tf.log(pred + 1e-30 )) ) ) +cost = tf.reduce_mean(-1 * (tf.reduce_sum(y*tf.log(pred )) ) ) optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) @@ -80,11 +81,18 @@ def parse_function(filename,basewidth): sess.run(init) for epoch in range(training_epochs): + epoch_loss = 0 + print sess.run(W, feed_dict={x: x_v,y: y_v}) + for i in range(int(len(files)//batch_size)): + epoch_x, epoch_y = x_v[ (i * batch_size) : (i +1 ) * batch_size ] , y_v[ (i * batch_size) : (i +1 ) * batch_size ] + #print sess.run(max_pool1, feed_dict={x_inp: epoch_x, y: epoch_y}).shape + _, c , w = sess.run([optimizer, cost, W], feed_dict={x: x_v,y: y_v}) + print sum(w) , c + epoch_loss += c - _, c , w = sess.run([optimizer, cost, W], feed_dict={x: x_v,y: y_v}) print sum(w) if (epoch+1) % display_step == 0: - print("Epoch:", '%04d' % (epoch+1), "cost=", "{}".format(c)) + print("Epoch:", '%04d' % (epoch+1), "cost=", "{}".format(epoch_loss)) print(sess.run([accuracy , pred] ,feed_dict={x: x_v,y: y_v })) @@ -115,5 +123,9 @@ def parse_function(filename,basewidth): value = parse_function("temp/train-1.png",200) - if(round(sess.run(pred , feed_dict={x : [np.array(value).flatten()]})) == 0) : + value = sess.run(pred , feed_dict={x : [np.array(value).flatten()]}) + + print value + + if(round(value) == 0) : elem.send_keys(Keys.SPACE)