TensorFlow2.0(一)图像分类

本文简单实现,模型训练  Softmax分类器操作

参照官网图像分类:基本分类:对服装图像进行分类  |  TensorFlow Core (google.cn)

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#加载数据
fashion_mnist=tf.keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
class_name=['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
print(train_images.shape)
#测试集预处理,像素值0-255映射到0-1
train_images=train_images/255.0
test_images=test_images/255.0
#构建模型,设置层
model=tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28,28)),#将图像格式二维数组转换成一维数组
                           tf.keras.layers.Dense(128,activation='relu'),#第一个Dense层有128个节点,全链接层
                           tf.keras.layers.Dense(10)])#返回长度为10的logits数组,每个节点包含一个得分,表示当前图像属于10个类中的哪一类
#tf.keras.Sequential()创建顺序模型,model.layers():访问涂层   详见官方api  https://tensorflow.google.cn/guide/keras/sequential_model
#构建模型,编译模型
model.compile(optimizer='adam',#优化器
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),#损失函数
              metrics=['accuracy'])#培训和测试期间模型评估指标列表
#训练模型,
model.fit(train_images,train_labels,epochs=18)#该方法将模型与训练数据进行拟合

#评估准确率
test_loss,test_acc=model.evaluate(test_images,test_labels,verbose=2)#比较模型在测试数据集上的表现
#test_loss:测试损失值#   test_acc:测试结果准确性
#verbose:测试信息复杂程度,0 1 2三个取值
print('\nTest accuracy',test_acc)

#对未知图片进行分类
#预测
#Softmax层(回归分类器)
probablility_model=tf.keras.Sequential([model,
                                      tf.keras.layers.Softmax()])

#模型预测
predictions=probablility_model.predict(test_images)
#np.argmax(predictions[0])#对模型预测得到10个特征值,取最大值
class_names=predictions
#plt.imshow(test_images)
#绘制图表
def plot_image(i, predictions_array, true_label, img):
  true_label, img = 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):
  true_label = true_label[i]
  plt.grid(False)
  plt.xticks(range(10))
  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')



#验证预测结果
def test_result():
    i = 0
    plt.figure(figsize=(6, 3))
    plt.subplot(1, 2, 1)
    plot_image(i, predictions[i], test_labels, test_images)
    plt.subplot(1, 2, 2)
    plot_value_array(i, predictions[i], test_labels)
    plt.show()
#使用训练好的模型,对单个图像进行预测
img=test_images[1]
print(img.shape)
img=(np.expand_dims(img,0))
print(img.shape)
predictions_single=probablility_model.predict(img)
print(predictions_single)
plot_value_array(1,predictions_single[0],test_labels)
#_=plt.xticks(range(10),class_names,rotation=45)
plt.show()

 

posted on 2022-10-11 11:09  妙笔千山  阅读(101)  评论(0编辑  收藏  举报