【发布时间】: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