Streamlit with Tensorflow分析图像并返回其为正或负的概率



我试图使用Tensorflow来机器学习来分析图像,并根据创建的模型(扩展名。h5)返回正或负的概率。我找不到确切的文档或存储库,所以即使是一个链接来阅读也会很棒。

应用程序链接:https://share.streamlit.io/felipelx/hackathon/IDC_Detector.py

我正在使用的库。

import numpy as np
import streamlit as st
import tensorflow as tf
from keras.models import load_model

加载模型的函数。

@st.cache(allow_output_mutation=True)
def loadIDCModel():
model_idc = load_model('models/IDC_model.h5', compile=False)
model_idc.summary()
return model_idc

工作图像的功能,以及我想看到的:模型。predict -我可以看到但不更新%,与图像无关,值总是相同的。

if uploaded_file is not None:
# transform image to numpy array
file_bytes = tf.keras.preprocessing.image.load_img(uploaded_file, target_size=(96,96), grayscale = False, interpolation = 'nearest', color_mode = 'rgb', keep_aspect_ratio = False)

c.image(file_bytes, channels="RGB")
Genrate_pred = st.button("Generate Prediction")    
if Genrate_pred:
model = loadMetModel()
input_arr = tf.keras.preprocessing.image.img_to_array(file_bytes)
input_arr = np.array([input_arr])
probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()])
prediction = probability_model.predict(input_arr)
dict_pred = {0: 'Benigno/Normal', 1: 'Maligno'}
result = dict_pred[np.argmax(prediction)]
value = 0
if result == 'Benigno/Normal':
value = str(((prediction[0][0])*100).round(2)) + '%'
else:
value = str(((prediction[0][1])*100).round(2)) + '%'

c.metric('Predição', result, delta=value, delta_color='normal')

事先感谢您的帮助。

我注意到的第一件事是,您用于加载模型的函数命名为loadIDCModel,但是您调用用于加载模型的函数是loadMetModel。但是,当我检查您的源代码时,看起来您已经解决了这个问题。我建议你更新你的问题来反映这一点。

玩你的应用程序,我认为问题是你的模型本身。我尝试了各种各样的图像——包含癌的图像,甚至还有一张猫的图像——每一张都给了我73%左右的概率。我得到的最低分数是72.74%,最高分数是73.11%(这是猫)。输出百分比似乎略有变化,这暗示不是代码中有问题,而是您的模型本身可能有问题。你可能需要重新训练你的模型,因为它似乎已经学会了总是返回大约0.73的值。

相关内容

  • 没有找到相关文章

最新更新