2018-12-27 15:47:45 +00:00
|
|
|
#!/usr/bin/python3
|
|
|
|
|
|
|
|
import tensorflow as tf
|
|
|
|
from tensorflow import keras
|
|
|
|
|
|
|
|
import numpy as np
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
import random
|
|
|
|
|
|
|
|
print(tf.__version__)
|
|
|
|
|
|
|
|
fashion_mnist = keras.datasets.fashion_mnist
|
|
|
|
|
|
|
|
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
|
|
|
|
|
|
|
|
train_images = train_images / 255.0
|
|
|
|
test_images = test_images / 255.0
|
|
|
|
|
|
|
|
class_names = [
|
|
|
|
"T-shirt/top",
|
|
|
|
"Trouser",
|
|
|
|
"Pullover",
|
|
|
|
"Dress",
|
|
|
|
"Coat",
|
|
|
|
"Sandal",
|
|
|
|
"Shirt",
|
|
|
|
"Sneaker",
|
|
|
|
"Bag",
|
|
|
|
"Ankle boot",
|
|
|
|
]
|
|
|
|
|
|
|
|
model = keras.Sequential(
|
|
|
|
[
|
|
|
|
keras.layers.Flatten(input_shape=(28, 28)),
|
|
|
|
keras.layers.Dense(128, activation=tf.nn.relu),
|
|
|
|
keras.layers.Dense(10, activation=tf.nn.softmax),
|
|
|
|
]
|
|
|
|
)
|
|
|
|
|
|
|
|
model.compile(
|
|
|
|
optimizer=tf.train.AdamOptimizer(),
|
|
|
|
loss="sparse_categorical_crossentropy",
|
|
|
|
metrics=["accuracy"],
|
|
|
|
)
|
|
|
|
|
|
|
|
model.fit(train_images, train_labels, epochs=5)
|
|
|
|
|
|
|
|
test_loss, test_acc = model.evaluate(test_images, test_labels)
|
|
|
|
|
|
|
|
print("Test accuracy:", test_acc)
|
2018-12-27 21:29:24 +00:00
|
|
|
|
|
|
|
predictions = model.predict(test_images)
|
|
|
|
|
|
|
|
|
|
|
|
def plot_image(i, predictions_array, true_label, img):
|
|
|
|
predictions_array, true_label, img = predictions_array[i], true_label[i], img[i]
|
|
|
|
plt.grid(False)
|
|
|
|
plt.xticks([])
|
|
|
|
plt.yticks([])
|
|
|
|
|
|
|
|
plt.imshow(img, cmap=plt.cm.binary)
|
|
|
|
|
|
|
|
predicted_label = np.argmax(predictions_array)
|
|
|
|
if predicted_label == true_label:
|
|
|
|
color = "blue"
|
|
|
|
else:
|
|
|
|
color = "red"
|
|
|
|
|
|
|
|
plt.xlabel(
|
|
|
|
"{} {:2.0f}% ({})".format(
|
|
|
|
class_names[predicted_label],
|
|
|
|
100 * np.max(predictions_array),
|
|
|
|
class_names[true_label],
|
|
|
|
),
|
|
|
|
color=color,
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def plot_value_array(i, predictions_array, true_label):
|
|
|
|
predictions_array, true_label = predictions_array[i], true_label[i]
|
|
|
|
plt.grid(False)
|
|
|
|
plt.xticks([])
|
|
|
|
plt.yticks([])
|
|
|
|
thisplot = plt.bar(range(10), predictions_array, color="#777777")
|
|
|
|
plt.ylim([0, 1])
|
|
|
|
predicted_label = np.argmax(predictions_array)
|
|
|
|
|
|
|
|
thisplot[predicted_label].set_color("red")
|
|
|
|
thisplot[true_label].set_color("blue")
|
|
|
|
|
|
|
|
|
|
|
|
num_rows = 5
|
|
|
|
num_cols = 5
|
|
|
|
num_images = num_rows * num_cols
|
|
|
|
plt.figure(figsize=(2 * 2 * num_cols, 2 * num_rows))
|
|
|
|
for i in range(num_images):
|
|
|
|
image_idx = random.randint(0, len(test_images) - 1)
|
|
|
|
plt.subplot(num_rows, 2 * num_cols, 2 * i + 1)
|
|
|
|
plot_image(image_idx, predictions, test_labels, test_images)
|
|
|
|
plt.subplot(num_rows, 2 * num_cols, 2 * i + 2)
|
|
|
|
plot_value_array(image_idx, predictions, test_labels)
|
|
|
|
|
|
|
|
plt.show()
|