import tensorflow as tf
import matplotlib
matplotlib.use('agg')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import random
import itertools
from sklearn.manifold import TSNE
from tensorflow.examples.tutorials.mnist import input_data
def next_batch(data_count, data_x, data_y):
idx = np.arange(0, len(data_x))
np.random.shuffle(idx)
idx = idx[:data_count]
data_shuffle = [data_x[i] for i in idx]
labels_shuffle = [data_y[i] for i in idx]
return np.asarray(data_shuffle), np.asarray(labels_shuffle)
learning_rate = 0.001
training_epochs = 10
batch_size = 32
# load MNIST data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
# Network Model.
tf.set_random_seed(777)
keep_prob = tf.placeholder(tf.float32)
X = tf.placeholder(tf.float32, [None, 784])
X_img = tf.reshape(X, [-1, 28, 28, 1])
Y = tf.placeholder(tf.float32, [None, 10])
W1 = tf.Variable(tf.random_normal([3, 3, 1, 32], stddev=0.01))
L1 = tf.nn.conv2d(X_img, W1, strides=[1, 1, 1, 1], padding='SAME')
L1 = tf.layers.batch_normalization(L1, center=True, scale=True, training=True)
L1 = tf.nn.relu(L1)
L1 = tf.nn.max_pool(L1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
L1 = tf.nn.dropout(L1, keep_prob=keep_prob)
W2 = tf.Variable(tf.random_normal([3, 3, 32, 64], stddev=0.01))
L2 = tf.nn.conv2d(L1, W2, strides=[1, 1, 1, 1], padding='SAME')
L2 = tf.layers.batch_normalization(L2, center=True, scale=True, training=True)
L2 = tf.nn.relu(L2)
L2 = tf.nn.max_pool(L2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
L2 = tf.nn.dropout(L2, keep_prob=keep_prob)
W3 = tf.Variable(tf.random_normal([3, 3, 64, 128], stddev=0.01))
L3 = tf.nn.conv2d(L2, W3, strides=[1, 1, 1, 1], padding='SAME')
L3 = tf.layers.batch_normalization(L3, center=True, scale=True, training=True)
L3 = tf.nn.relu(L3)
L3 = tf.nn.max_pool(L3, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
L3 = tf.nn.dropout(L3, keep_prob=keep_prob)
L3_flat = tf.reshape(L3, [-1, 128 * 4 * 4])
W4 = tf.get_variable("W19", shape=[128 * 4 * 4, 100], initializer=tf.contrib.layers.xavier_initializer())
b4 = tf.Variable(tf.random_normal([100]))
L4 = tf.nn.relu(tf.matmul(L3_flat, W4) + b4)
L4 = tf.nn.dropout(L4, keep_prob=keep_prob)
W5 = tf.get_variable("W20", shape=[100, 10], initializer=tf.contrib.layers.xavier_initializer())
b5 = tf.Variable(tf.random_normal([10]))
logits = tf.matmul(L4, W5) + b5
y_pred = tf.nn.softmax(logits)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=Y, logits=logits))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
correct_prediction = tf.equal(tf.argmax(y_pred, 1), tf.argmax(Y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print('Learning start')
for epoch in range(training_epochs):
avg_cost = 0
avg_acc = 0
total_batch = int(len(mnist.train.images) / batch_size)
for i in range(total_batch):
batch = next_batch(32, mnist.train.images, mnist.train.labels)
feed_dict = {X: batch[0], Y: batch[1], keep_prob: 0.7}
c, _ , acc = sess.run([cost, optimizer, accuracy], feed_dict=feed_dict)
avg_cost += c / total_batch
avg_acc += acc / total_batch
print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.9f}'.format(avg_cost), 'Accuracy =', '{:.9f}'.format(avg_acc))
print('Learning Finish')
print('----------TEST----------')
total_batch = int(len(mnist.test.images) / batch_size)
test_acc = 0
for i in range(total_batch):
batch = next_batch(32, mnist.test.images, mnist.test.labels)
feed_dict = {X: batch[0], Y: batch[1], keep_prob: 1.0}
c, _ , acc = sess.run([cost, optimizer, accuracy], feed_dict=feed_dict)
test_acc += acc / total_batch
print('Test Accuracy = {0}'.format(test_acc))
print('END ALL')
sess.close()
'Study > Deep Learning' 카테고리의 다른 글
tensorflow ValueError: Cannot feed value of shape (10,) for Tensor u'Placeholder_1:0', which has shape '(?, 10)' (0) | 2019.02.05 |
---|---|
Cifar10 Tensorflow example (0) | 2019.01.04 |
Backpropagation (0) | 2018.12.27 |
MNIST Data 랜덤 추출. (3) | 2018.11.15 |
Bounding box patch 바운딩 박스 이미지 패치 만들기. (0) | 2018.11.15 |