Created
August 26, 2018 17:53
-
-
Save abgoswam/bf2c8a55814b975e5b96f2f78a02baff to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Our application logic will be added here | |
def cnn_model_fn(features, labels, mode): | |
"""Model function for CNN.""" | |
# Input Layer | |
input_layer = tf.reshape(features["x"], [-1, 32, 32, 3], name="input_tensor") | |
# Convolutional Layer #1 | |
conv1 = tf.layers.conv2d( | |
inputs=input_layer, | |
filters=32, | |
kernel_size=[7, 7], | |
strides=(2, 2), | |
padding="valid", | |
activation=tf.nn.relu, | |
name="conv1_tensor") | |
# Dense Layer | |
pool2_flat = tf.reshape(conv1, [-1, 5408]) | |
dense = tf.layers.dense(inputs=pool2_flat, units=1024, activation=tf.nn.relu) | |
dropout = tf.layers.dropout( | |
inputs=dense, rate=0.4, training=mode == tf.estimator.ModeKeys.TRAIN) | |
# Logits Layer | |
logits = tf.layers.dense(inputs=dropout, units=10, name="logits_tensor") | |
predictions = { | |
# Generate predictions (for PREDICT and EVAL mode) | |
"classes": tf.argmax(input=logits, axis=1), | |
# Add `softmax_tensor` to the graph. It is used for PREDICT and by the | |
# `logging_hook`. | |
"probabilities": tf.nn.softmax(logits, name="softmax_tensor") | |
} | |
if mode == tf.estimator.ModeKeys.PREDICT: | |
return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions) | |
# Calculate Loss (for both TRAIN and EVAL modes) | |
loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits) | |
# Configure the Training Op (for TRAIN mode) | |
if mode == tf.estimator.ModeKeys.TRAIN: | |
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001) | |
train_op = optimizer.minimize( | |
loss=loss, | |
global_step=tf.train.get_global_step()) | |
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op) | |
# Add evaluation metrics (for EVAL mode) | |
eval_metric_ops = { | |
"accuracy": tf.metrics.accuracy( | |
labels=labels, predictions=predictions["classes"])} | |
return tf.estimator.EstimatorSpec( | |
mode=mode, loss=loss, eval_metric_ops=eval_metric_ops) | |
def main(unused_argv): | |
# Load training and eval data | |
#mnist = tf.contrib.learn.datasets.load_dataset("mnist") | |
#train_data = mnist.train.images # Returns np.array | |
#train_labels = np.asarray(mnist.train.labels, dtype=np.int32) | |
#eval_data = mnist.test.images # Returns np.array | |
#eval_labels = np.asarray(mnist.test.labels, dtype=np.int32) | |
# Create the Estimator | |
cifar_classifier = tf.estimator.Estimator( | |
model_fn=cnn_model_fn, model_dir="cifar_convnet_model_2") | |
# Set up logging for predictions | |
# Log the values in the "Softmax" tensor with label "probabilities" | |
tensors_to_log = {"probabilities": "softmax_tensor"} | |
logging_hook = tf.train.LoggingTensorHook( | |
tensors=tensors_to_log, every_n_iter=50) | |
print("=============================") | |
# Train the model | |
train_input_fn = tf.estimator.inputs.numpy_input_fn( | |
x={"x": train_data}, | |
y=train_labels, | |
batch_size=100, | |
num_epochs=100, | |
shuffle=True) | |
cifar_classifier.train( | |
input_fn=train_input_fn, | |
steps=200, | |
hooks=[logging_hook]) | |
print("++++++++++++++++++++++++++++") | |
# Evaluate the model and print results | |
eval_input_fn = tf.estimator.inputs.numpy_input_fn( | |
x={"x": train_data}, | |
y=train_labels, | |
num_epochs=1, | |
shuffle=False) | |
eval_results = cifar_classifier.evaluate(input_fn=eval_input_fn) | |
print(eval_results) | |
print("##########################") | |
if __name__ == "__main__": | |
tf.app.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment