*Neural Nets(NN) for MNIST :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf import random import matplotlib.pylab as plt learning_rate = 0.001 training_epochs = 15 batch_size = 100 display_step = 1 mnist = input_data.read_data_sets('./MNIST_data/', one_hot=True) sess = tf.InteractiveSession() # Create the model X = tf.placeholder(tf.float32, [None, 784]) #열만 784개로 맞춰라 Y = tf.placeholder(tf.float32, [None, 10]) #열만 10개로 맞춰라 W1 = tf.Variable(tf.random_normal([784, 256])) W2 = tf.Variable(tf.random_normal([256, 256])) W3 = tf.Variable(tf.random_normal([256, 10])) b1 = tf.Variable(tf.random_normal([256])) b2 = tf.Variable(tf.random_normal([256])) b3 = tf.Variable(tf.random_normal([10])) L1 = tf.nn.relu(tf.add(tf.matmul(X, W1), b1)) L2 = tf.nn.relu(tf.add(tf.matmul(L1, W2), b2)) hypothesis = tf.add(tf.matmul(L2, W3), b3) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=hypothesis, labels=Y)) optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) for epoch in range (training_epochs): avg_cost = 0. total_batch = int(mnist.train.num_examples/batch_size) for i in range(total_batch): batch_xs, batch_ys = mnist.train.next_batch(batch_size) sess.run(optimizer, feed_dict={X:batch_xs, Y:batch_ys}) avg_cost += sess.run(cost, feed_dict={X: batch_xs, Y:batch_ys})/total_batch if epoch % display_step ==0: print("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost)) print("Optimization Finished") correct_prediction = tf.equal(tf.argmax(hypothesis, 1), tf.argmax(Y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print("Accuracy:", accuracy.eval({X: mnist.test.images, Y: mnist.test.labels})) | cs |
*Xavier initialization :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf import random import matplotlib.pylab as plt learning_rate = 0.001 training_epochs = 15 batch_size = 100 display_step = 1 mnist = input_data.read_data_sets('./MNIST_data/', one_hot=True) sess = tf.InteractiveSession() def xavier_init(n_inputs, n_outputs, uniform=True): if uniform: init_range = tf.sqrt(6.0 / (n_inputs + n_outputs)) return tf.random_uniform_initializer(-init_range, init_range) else: stddev = tf.sqrt(3.0 / (n_inputs + n_outputs)) return tf.truncated_normal_initializer(stddev=stddev) # Create the model X = tf.placeholder(tf.float32, [None, 784]) #열만 784개로 맞춰라 Y = tf.placeholder(tf.float32, [None, 10]) #열만 10개로 맞춰라 # W1 = tf.Variable(tf.random_normal([784, 256])) # W2 = tf.Variable(tf.random_normal([256, 256])) # W3 = tf.Variable(tf.random_normal([256, 10])) W1 = tf.get_variable("W1", shape=[784, 256], initializer=xavier_init(784, 256)) W2 = tf.get_variable("W2", shape=[256, 256], initializer=xavier_init(784, 256)) W3 = tf.get_variable("W3", shape=[256, 10], initializer=xavier_init(784, 256)) b1 = tf.Variable(tf.random_normal([256])) b2 = tf.Variable(tf.random_normal([256])) b3 = tf.Variable(tf.random_normal([10])) L1 = tf.nn.relu(tf.add(tf.matmul(X, W1), b1)) L2 = tf.nn.relu(tf.add(tf.matmul(L1, W2), b2)) hypothesis = tf.add(tf.matmul(L2, W3), b3) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=hypothesis, labels=Y)) optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) for epoch in range (training_epochs): avg_cost = 0. total_batch = int(mnist.train.num_examples/batch_size) for i in range(total_batch): batch_xs, batch_ys = mnist.train.next_batch(batch_size) sess.run(optimizer, feed_dict={X:batch_xs, Y:batch_ys}) avg_cost += sess.run(cost, feed_dict={X: batch_xs, Y:batch_ys})/total_batch if epoch % display_step ==0: print("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost)) print("Optimization Finished") correct_prediction = tf.equal(tf.argmax(hypothesis, 1), tf.argmax(Y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print("Accuracy:", accuracy.eval({X: mnist.test.images, Y: mnist.test.labels})) | cs |
* Mnist 5NN :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | import tensorflow as tf import random import matplotlib.pyplot as plt from tensorflow.examples.tutorials.mnist import input_data tf.set_random_seed(777) # reproducibility mnist = input_data.read_data_sets("./MNIST_data/", one_hot=True) # parameters learning_rate = 0.001 training_epochs = 15 batch_size = 100 # input place holders X = tf.placeholder(tf.float32, [None, 784]) Y = tf.placeholder(tf.float32, [None, 10]) # dropout (keep_prob) rate 0.7 on training, but should be 1 for testing keep_prob = tf.placeholder(tf.float32) # weights & bias for nn layers # http://stackoverflow.com/questions/33640581/how-to-do-xavier-initialization-on-tensorflow W1 = tf.get_variable("W1", shape=[784, 512], initializer=tf.contrib.layers.xavier_initializer()) b1 = tf.Variable(tf.random_normal([512])) L1 = tf.nn.relu(tf.matmul(X, W1) + b1) L1 = tf.nn.dropout(L1, keep_prob=keep_prob) W2 = tf.get_variable("W2", shape=[512, 512], initializer=tf.contrib.layers.xavier_initializer()) b2 = tf.Variable(tf.random_normal([512])) L2 = tf.nn.relu(tf.matmul(L1, W2) + b2) L2 = tf.nn.dropout(L2, keep_prob=keep_prob) W3 = tf.get_variable("W3", shape=[512, 512], initializer=tf.contrib.layers.xavier_initializer()) b3 = tf.Variable(tf.random_normal([512])) L3 = tf.nn.relu(tf.matmul(L2, W3) + b3) L3 = tf.nn.dropout(L3, keep_prob=keep_prob) W4 = tf.get_variable("W4", shape=[512, 512], initializer=tf.contrib.layers.xavier_initializer()) b4 = tf.Variable(tf.random_normal([512])) L4 = tf.nn.relu(tf.matmul(L3, W4) + b4) L4 = tf.nn.dropout(L4, keep_prob=keep_prob) W5 = tf.get_variable("W5", shape=[512, 10], initializer=tf.contrib.layers.xavier_initializer()) b5 = tf.Variable(tf.random_normal([10])) hypothesis = tf.matmul(L4, W5) + b5 # define cost/loss & optimizer cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits( logits=hypothesis, labels=Y)) optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) # initialize sess = tf.Session() sess.run(tf.global_variables_initializer()) # train my model for epoch in range(training_epochs): avg_cost = 0 total_batch = int(mnist.train.num_examples / batch_size) for i in range(total_batch): batch_xs, batch_ys = mnist.train.next_batch(batch_size) feed_dict = {X: batch_xs, Y: batch_ys, keep_prob: 0.7} c, _ = sess.run([cost, optimizer], feed_dict=feed_dict) avg_cost += c / total_batch print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.9f}'.format(avg_cost)) print('Learning Finished!') # Test model and check accuracy correct_prediction = tf.equal(tf.argmax(hypothesis, 1), tf.argmax(Y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print('Accuracy:', sess.run(accuracy, feed_dict={ X: mnist.test.images, Y: mnist.test.labels, keep_prob: 1})) # Get one and predict r = random.randint(0, mnist.test.num_examples - 1) print("Label: ", sess.run(tf.argmax(mnist.test.labels[r:r + 1], 1))) print("Prediction: ", sess.run( tf.argmax(hypothesis, 1), feed_dict={X: mnist.test.images[r:r + 1], keep_prob: 1})) plt.imshow(mnist.test.images[r:r + 1]. reshape(28, 28), cmap='Greys', interpolation='nearest') plt.show() ''' Epoch: 0001 cost = 0.447322626 Epoch: 0002 cost = 0.157285590 Epoch: 0003 cost = 0.121884535 Epoch: 0004 cost = 0.098128681 Epoch: 0005 cost = 0.082901778 Epoch: 0006 cost = 0.075337573 Epoch: 0007 cost = 0.069752543 Epoch: 0008 cost = 0.060884363 Epoch: 0009 cost = 0.055276413 Epoch: 0010 cost = 0.054631256 Epoch: 0011 cost = 0.049675195 Epoch: 0012 cost = 0.049125314 Epoch: 0013 cost = 0.047231930 Epoch: 0014 cost = 0.041290121 Epoch: 0015 cost = 0.043621063 Learning Finished! Accuracy: 0.9804 ''' | cs |
* More Deep & Dropout :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf import random import matplotlib.pylab as plt tf.set_random_seed(777) mnist = input_data.read_data_sets('../MNIST_data/', one_hot=True) sess = tf.InteractiveSession() X = tf.placeholder(tf.float32, [None, 784]) Y = tf.placeholder(tf.float32, [None, 10]) W1 = tf.get_variable("W1", shape=[784, 256] , initializer=tf.contrib.layers.xavier_initializer()) W2 = tf.get_variable("W2", shape=[256, 256] , initializer=tf.contrib.layers.xavier_initializer()) W3 = tf.get_variable("W3", shape=[256, 10] , initializer=tf.contrib.layers.xavier_initializer()) b1 = tf.Variable(tf.zeros([256])) b2 = tf.Variable(tf.zeros([256])) b3 = tf.Variable(tf.zeros([10])) dropout_rate = tf.placeholder(tf.float32) _L1 = tf.nn.relu(tf.matmul(X, W1) + b1) L1 = tf.nn.dropout(_L1, keep_prob=dropout_rate) _L2 = tf.nn.relu(tf.matmul(L1, W2) + b2) L2 = tf.nn.dropout(_L2, keep_prob=dropout_rate) hypothesis = tf.matmul(L2, W3) + b3 cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=hypothesis, labels=Y)) train = tf.train.AdamOptimizer(0.001).minimize(cost) tf.global_variables_initializer().run() for i in range(5500): # 5500 batch_xs, batch_ys = mnist.train.next_batch(100) train.run({X: batch_xs, Y: batch_ys, dropout_rate: 0.7}) print("cost:", cost.eval({X: batch_xs, Y: batch_ys, dropout_rate: 0.7})) correct_prediction = tf.equal(tf.argmax(hypothesis, 1), tf.argmax(Y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print(accuracy.eval({X: mnist.test.images, Y: mnist.test.labels, dropout_rate: 1})) print(hypothesis.eval({X: mnist.test.images, Y: mnist.test.labels, dropout_rate: 1})) r = random.randint(0, mnist.test.num_examples - 1) print('Label:', sess.run(tf.argmax(mnist.test.labels[r:r + 1], 1))) print('Prediction:', sess.run(tf.argmax(hypothesis, 1), {X: mnist.test.images[r:r + 1], dropout_rate: 1})) print(mnist.test.images[r:r + 1]) plt.imshow(mnist.test.images[r:r + 1].reshape(28, 28) , cmap='Greys', interpolation='nearest') plt.show() | cs |
'Python 활용 딥러닝' 카테고리의 다른 글
CNN으로 꽃 이미지 예측하기 (0) | 2018.12.20 |
---|---|
CNN + Convolution Neural Network (0) | 2018.12.20 |
Deep Learning 학습방법(Layer 구성, Backpropagation, Activation function ReLU) (0) | 2018.12.19 |
Neural Nets & Deep learning, Neural Nets for XOR (0) | 2018.12.19 |
학습에 영향을 주는 요소들 (Learning Rate, Overfitting, Online Learning) (0) | 2018.12.19 |