【问题标题】:Input a single image to an H5 file and get percentages for each class as output将单个图像输入到 H5 文件并获取每个类的百分比作为输出
【发布时间】:2021-01-10 01:39:37
【问题描述】:

我正在使用 COVID-19 Radiography Database 创建一个模型来预测用户是否患有 COVID-19。

这是我的代码:

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

tf.random.set_seed(1234)

train_data_dir="X_train_data/"

#Used Sequential
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(8, (3, 3), activation='relu', input_shape=(64, 64, 3)))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2), strides=None, padding="valid"))
model.add(tf.keras.layers.Conv2D(16, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2), strides=None, padding="valid"))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(32))
model.add(tf.keras.layers.Dropout(.1, input_shape=(32,)))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

#Defining optimizer
from tensorflow.keras.optimizers import Adam

model.compile(optimizer=Adam(lr=0.0001), loss='binary_crossentropy', metrics=['accuracy'])

# Directing Images to train folder
from tensorflow.keras.preprocessing.image import ImageDataGenerator
img_height, img_width = 64,64
batch_size = 16
train_datagen = ImageDataGenerator(validation_split=0.3) # set validation split

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='binary',
    subset='training') # set as training data

# Splitting images for validation set
validation_generator = train_datagen.flow_from_directory(
    train_data_dir, # same directory as training data
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='binary',
    subset='validation') # set as validation data

# Training the model
trainer=model.fit(train_generator, validation_data=validation_generator, epochs=10, verbose=2)

model.save("cnn_covid_x-ray_v1.h5") #you can load this model from output part

我的训练准确率为 97.82%,验证准确率为 96.78%。我现在如何使用我的h5 文件进行预测?例如,我想输入一个图像,假设是一张 COVID-19 X 射线,并获取它属于COVID-19 类的可能性和它属于NORMAL 类的可能性的百分比。

【问题讨论】:

  • 不只是简单的model = tf.keras.models.load_model("cnn_covid_x-ray_v1.h5")prediction = model.predict(x_ray_img)
  • @Mr.ForExample 不,不是。我不明白你为什么认为它只有两行代码。
  • 你想要的不就是简单二分类的结果吗?你还想要什么?
  • @Mr.ForExample 二进制分类会给出 1 或 0。我想要两个类中的每一个的百分比。
  • model.predict 是模型最后一层的输出,不会给你 1 或 0,在你的情况下,sigmoid 会让你在范围 (0 ,1) 内浮动,这正是你想要的,检查basic tutorial about TF binary classification

标签: python tensorflow keras prediction h5py


【解决方案1】:

您要做的第一件事是确保您希望使用的图像经过与训练图像相同的预处理。我注意到您没有重新缩放 ImageDataGenerator 中的图像。如果它们之前被重新缩放,请确保以相同的方式重新缩放图像。接下来将图像大小调整为 64 X 64。将图像输入到 model.predict。它将产生一个概率值作为输出。如果该值小于或等于 0.5,则为 0 类,如果大于 .5,则为 1 类。要知道哪个是哪个使用 class_dict=train_generator.class_indices。打印字典。它的形式 class name:index 其中 class name 是与索引关联的目录的名称。例如,如果您的目录被命名为 Covid 和 NonCovid,您的字典将类似于 {Covid:0, NonCovid:1}

【讨论】:

  • 我确实重新缩放了图像。原图尺寸为 256 x 256。这就是为什么我在做input_shape=(64, 64, 3) 的时候做了 64 x 64。
猜你喜欢
  • 2021-05-10
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多