### 在Keras(TensorFlow)中无法使用model.predict()函数

背景:

我使用的是Pycharm和Python 3.6(没有使用更新的版本,因为我有一个库不支持更新的Python版本)。

我为一个反病毒软件构建了一个机器学习模型,并保存了它(尝试保存为’anti_virus_model.h5’和一个文件夹)。

我正在尝试为反病毒软件构建一个用户界面,因此我在使用tkinter库。

问题:我尝试加载我的模型(几乎可以肯定它工作了)并预测选中的文件(在将头部转换为向量后)。我已经导入了tensorflow和keras,但是函数model.predict(pe)似乎没有被Pycharm识别。[pe是我的向量]

这是我的代码:

from tkinter import *from tkinter import filedialogfrom tensorflow import kerasimport vector_buildimport tkinter as Tkimport tensorflow as tftf.keras.models.load_model('anti_virus_model.h5')def browse_file():    fname = filedialog.askopenfilename(filetypes=(("exe files", "*.exe"), ("exe files", "*.exe")))    print(fname)    pe = vector_build.encode_pe(fname)    print(pe)    print(keras.model.predict(pe))root = Tk.Tk()root.wm_title("Browser")broButton = Tk.Button(master=root, text='Browse', width=80, height=25, command=browse_file)broButton.pack(side=Tk.LEFT, padx=2, pady=2)Tk.mainloop()

选择文件后我得到的错误是:

2020-03-05 12:37:14.611731: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found2020-03-05 12:37:14.611883: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.2020-03-05 12:37:16.837699: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'nvcuda.dll'; dlerror: nvcuda.dll not found2020-03-05 12:37:16.837815: E tensorflow/stream_executor/cuda/cuda_driver.cc:351] failed call to cuInit: UNKNOWN ERROR (303)2020-03-05 12:37:16.841558: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: DESKTOP-GT2BTVK2020-03-05 12:37:16.841817: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: DESKTOP-GT2BTVK2020-03-05 12:37:16.842185: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2WARNING:tensorflow:Sequential models without an `input_shape` passed to the first layer cannot reload their optimizer state. As a result, your model isstarting with a freshly initialized optimizer.C:/Program Files (x86)/Steam/Steam.exe*(big vector, no need to include)*Exception in Tkinter callbackTraceback (most recent call last):  File "C:\Users\0123m\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1705, in __call__    return self.func(*args)  File "C:/Users/0123m/PycharmProjects/anti_virus_project/predictorUI.py", line 18, in browse_file        print(keras.model.predict(pe))AttributeError: 'numpy.ndarray' object has no attribute 'model'Process finished with exit code 0

(进程没有崩溃,我是手动关闭的)

提前感谢!


回答:

重构你的问题,使其易于测试!在这里拥有“全功能”的GUI程序并不是确保各个部分按预期工作的最佳方式。

  1. 你对同一个东西进行了多次导入,包括一个*导入,这会造成混淆。
  2. load_model()返回一个模型实例;你没有在任何地方使用它。

简化事物以将UI与实际的预测代码分离,你会得到一个易于测试的东西:

import tkinter as Tkfrom tkinter import filedialogfrom tensorflow import kerasimport vector_buildmodel = keras.models.load_model("anti_virus_model.h5")def predict_file(fname):    print(fname)  # 调试    pe = vector_build.encode_pe(fname)    print(pe)  # 调试    result = model.predict(pe)    print(result)  # 调试    return resultdef browse_file():    fname = filedialog.askopenfilename(filetypes=(("exe files", "*.exe"),))    result = predict_file(fname)    # TODO: 对`result`做些什么def ui_main():    root = Tk.Tk()    root.wm_title("Browser")    broButton = Tk.Button(master=root, text="Browse", width=80, height=25, command=browse_file)    broButton.pack(side=Tk.LEFT, padx=2, pady=2)    Tk.mainloop()if True:  # 首先使这个分支正确工作,    predict_file("C:/Windows/Calc.exe")else:  # ... 然后切换到这个。    ui_main()

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注