tensorflow 2.x fashion_mnist程序注释

 

# 载入tensorflow_datasets,用于load fashion_mnist数据集
import tensorflow_datasets as tfds
tfds.disable_progress_bar()
#载入相关模块
import tensorflow as tf
import math
import numpy as np
import matplotlib.pyplot as plt
#只打印ERROR信息
import logging
logger = tf.get_logger()
logger.setLevel(logging.ERROR)

#载入数据集,并将数据集分为训练集和测试集
dataset, metadata = tfds.load('fashion_mnist', as_supervised=True, with_info=True)
train_dataset, test_dataset = dataset['train'], dataset['test']

load函数详解:https://s0www0tensorflow0org.icopy.site/datasets/api_docs/python/tfds/load

#将数据集中的output映射到str上
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal',      'Shirt',   'Sneaker',  'Bag',   'Ankle boot']
打印train数量和test数量
num_train_examples = metadata.splits['train'].num_examples
num_test_examples = metadata.splits['test'].num_examples
print("Number of training examples: {}".format(num_train_examples))
print("Number of test examples:     {}".format(num_test_examples))
#将2维images转化为float数据(扁平化),并标准化到0-1之间
def normalize(images, labels):
    images = tf.cast(images, tf.float32)
    images /= 255
    return images, labels
#使用map函数将数据应用到normalize函数中
train_dataset =  train_dataset.map(normalize)
test_dataset  =  test_dataset.map(normalize)
#第一次使用dataset,将images加载到cache中,这样可以使训练得更快
train_dataset =  train_dataset.cache()
test_dataset  =  test_dataset.cache()
# 取得取一个单一的图像,通过重塑来移除颜色维度
for image, label in test_dataset.take(1):
    break
image = image.numpy().reshape((28,28))

# 使用matplotlib.pyplot绘制图片
plt.figure()
plt.imshow(image, cmap=plt.cm.binary)
plt.colorbar()
plt.grid(False)
plt.show()
#显示训练集的前25张图像,并在每张图像下面显示类名。验证数据的格式是否正确,并准备好构建和培训网络
plt.figure(figsize=(10,10))
i = 0
for (image, label) in test_dataset.take(25):
    image = image.numpy().reshape((28,28))
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(image, cmap=plt.cm.binary)
    plt.xlabel(class_names[label])
    i += 1
plt.show()
#建立模型
model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28, 1)),
    tf.keras.layers.Dense(128, activation=tf.nn.relu),
    tf.keras.layers.Dense(10)
])
'''
    Sequential函数是用来建立模型,其中Flatten指展平层,Dense指全连接层,Conv2D指卷积层,MaxPooling2D指最大池化层,dropout层。
'''
#设置训练方式
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
'''
    optimizer指优化器,其中adam指Adam优化器;
    loss指损失函数,SparseCategoricalCrossentropy一般分类使用此函数。
'''
BATCH_SIZE = 32
train_dataset = train_dataset.cache().repeat().shuffle(num_train_examples).batch(BATCH_SIZE)
test_dataset = test_dataset.cache().batch(BATCH_SIZE)
model.fit(train_dataset, epochs=5, steps_per_epoch=math.ceil(num_train_examples/BATCH_SIZE))
'''
    dataset = dataset.shuffle()  # 将数据打乱,数值越大,混乱程度越大
    dataset = dataset.batch(BATCH_SIZE)  # 将数据按照32为一组如此可以提高训练速度
    dataset = dataset.repeat()  # 数据集重复了指定次数
    repeat()在batch操作输出完毕后再执行,若在之前,相当于先把整个数据集复制两次
    为了配合输出次数,一般默认repeat()空,这样指数据集永远迭代下去   
    fit为训练函数其中train_dataset为训练数据集
    epochs设置为5,训练集有60000个样本,训练将持续5*60000次
'''
#打印测试集的准确度
test_loss, test_accuracy = model.evaluate(test_dataset, steps=math.ceil(num_test_examples/32))
print('Accuracy on test dataset:', test_accuracy)
#以下为测试
for test_images, test_labels in test_dataset.take(1):
    test_images = test_images.numpy()
    test_labels = test_labels.numpy()
    predictions = model.predict(test_images)

predictions.shape
predictions[0]

np.argmax(predictions[0])

test_labels[0]


def plot_image(i, predictions_array, true_labels, images):
  predictions_array, true_label, img = predictions_array[i], true_labels[i], images[i]
  plt.grid(False)
  plt.xticks([])
  plt.yticks([])
  
  plt.imshow(img[...,0], 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')
    
i = 0
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(i, predictions, test_labels, test_images)
plt.subplot(1,2,2)
plot_value_array(i, predictions, test_labels)

i = 12
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(i, predictions, test_labels, test_images)
plt.subplot(1,2,2)
plot_value_array(i, predictions, test_labels)

# Plot the first X test images, their predicted label, and the true label
# Color correct predictions in blue, incorrect predictions in red
num_rows = 5
num_cols = 3
num_images = num_rows*num_cols
plt.figure(figsize=(2*2*num_cols, 2*num_rows))
for i in range(num_images):
  plt.subplot(num_rows, 2*num_cols, 2*i+1)
  plot_image(i, predictions, test_labels, test_images)
  plt.subplot(num_rows, 2*num_cols, 2*i+2)
  plot_value_array(i, predictions, test_labels)

    
# Grab an image from the test dataset
img = test_images[0]

print(img.shape)

# Add the image to a batch where it's the only member.
img = np.array([img])

print(img.shape)

predictions_single = model.predict(img)

print(predictions_single)

plot_value_array(0, predictions_single, test_labels)
_ = plt.xticks(range(10), class_names, rotation=45)

np.argmax(predictions_single[0])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值