为了账号安全,请及时绑定邮箱和手机立即绑定

Tensorflow图像处理函数

Tensorflow图像处理函数

动漫人物 2023-07-11 10:50:14
伙计们,我从 Tensorflow.org 制作了基本图像分类教程。但我无法理解 def image_process 的代码。因为教程里没有任何解释。这是代码: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)我的问题:函数如何确定 Predictions_array 是预测值,真实标签是正确标签。我们不应该说 true_label = train_label[i] 或 Predictions_array = Prediction[i]当我们没有像我展示的那样在函数中设置对象时,函数如何确定对象。
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

让我们从火车代码开始(内联文档)


# TensorFlow and tf.keras

import tensorflow as tf

from tensorflow import keras


# Helper libraries

import numpy as np

import matplotlib.pyplot as plt


# load data

fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()


# Text representation of labels

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',

               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']


# Normalize the train and test images

train_images = train_images / 255.0

test_images = test_images / 255.0


# Define the model

model = keras.Sequential([

    keras.layers.Flatten(input_shape=(28, 28)),

    keras.layers.Dense(128, activation='relu'),

    keras.layers.Dense(10)

])

model.compile(optimizer='adam',

              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),

              metrics=['accuracy'])


# train the model

model.fit(train_images, train_labels, epochs=10)

正如你所看到的,最后一层是Dense输出大小的层10。那是因为我们有10个班级。为了确定它属于哪个类别,我们只需从这 10 个类别中取出最大值并将其类别指定为预测即可。但如果我们可以将这些值更改为概率,我们还可以知道模型做出此预测的信心有多大。因此,让我们附加 softmax 层,将这 10 个输出归一化为概率。


probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()])

predictions = probability_model.predict(test_images)

print (f"Input: {test_images.shape}, Output: {predictions.shape}")

输出:


Input: (10000, 28, 28), Output: (10000, 10)

让我们打印第 i 个测试图像的预测标签和真实标签


i = 0

print (f"Actual Label: {train_labels[i]}, Predicted Label: {np.argmax(predictions[i])}")

输出:


Actual Label: 9, Predicted Label: 9

最后让我们绘制第 i 个图像并用预测的类别及其概率对其进行标记。(内联文档)


def plot_image(i, predictions_array, true_label, img):

  """

  i: render ith image

  predictions_array: Probabilities of each class predicted by the model for the ith image

  true_label: All the the acutal label

  img: All the images

  """

  # Get the true label of ith image and the ithe image itself

  true_label, img = true_label[i], img[i]


  plt.grid(False)

  plt.xticks([])

  plt.yticks([])


  # Render the ith image

  plt.imshow(img, cmap=plt.cm.binary)


  # Get the class with the higest probability for the ith image

  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)

最后让我们调用它


plot_image(i, predictions[i], test_labels, test_images)

//img1.sycdn.imooc.com//64acc38d000185d502180235.jpg

你的困惑是因为predictions_array参数。请注意,这是模型对第 i 个测试数据所做的预测。它有 10 个值,每个值代表它属于相应类别的概率。



查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信