当前位置:   article > 正文

在Pyqt5中实现keras深度学习网络预测_pyqt5调用深度学习模型

pyqt5调用深度学习模型

load_model是出现Tensor is not an element of this graph问题

问题描述:

global path_openfile_name
path_openfile_name = 'F:/code/python/demopyqt_for_radioml/Demo/Demo/data_for_v1.1/norm_cldnn-matlab.wts.h5'
path_openfile_name = str(path_openfile_name)
#读取模型
model = load_model(path_openfile_name)
...#提取样本x
#用模型预测样本x的y值
prediction = model.predict(x)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

跑这段代码时,报错:

ValueError: Tensor Tensor("Placeholder:x", shape=(x, x), dtype=int32) is not an element of this graph.
  • 1

场景:我在pyqt里设置了一个开始按钮,一按就会开始对指定文件内的内容进行分割、预测。但是点击一次按钮后,再次点击,就回出现这个错误。
之前认为是进程的问题,后来逐步调试发现实际的错误出在load_model()方法上。

解决办法
修改后:

graph1 = Graph()
with graph1.as_default():
    session1=Session(graph=graph1)
    with session1.as_default():
        model = load_model(path_openfile_name)
...#提取样本x
with graph1.as_default():
    prediction = model.predict(x)  # predict
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

解释:
1、创建模型model时,会话session尚未恢复。
2、模型中定义的所有占位符placeholders、变量variables 和操作符ops 被 Model.__init__方法放在一个新的图graph中。

部分功能

功能1 用模型预测大量样本,并输出其预测占比最多的种类并输出
功能2 实现再pyqt表格画布内增加一行的操作

        stream_result=['xxx','xxx','xxx',...]#模型针对每一个样本的预测结果
        count = Counter(stream_result)#计算样本预测结果中不同类的数目
        freq_list = count.values()# 数目
        max_cnt = max(freq_list)# 找到结果中最多的数目
        #如果最多的数量多于总数量一半,就输出最多的数量的label的识别结果
        #如果最多的数量少于总数量一半,就输出none,判定为无法识别
        if max_cnt > int(ex.a1024/2):
            most_common = count.most_common()[0][0]
            #第一个0是代表如果最多次数的结果有多个,选其中一个
            #第二个0是从[名称,次数]的list中选择最多的调制名称
        else: 
            most_common = 'None'
        print(most_common)
        most_common_p = max_cnt / ex.a1024 *100
        print(str(most_common_p)+'%')
        
        self.add_line(most_common,most_common_p)
        ex.workThread.wait()

#增加一行
    def add_line(self,cateloy_result,cateloy_result_p):
        tablerow = ex.tableWidget.rowCount()#得到当前表格的结果
        ex.tableWidget.setRowCount(tablerow+1)#行数+1
        ex.tableWidget.setItem(tablerow-1,0,QTableWidgetItem(str(ex.tableid)))#对应行显示id
        ex.tableid=ex.tableid+1#id+1
        ex.tableWidget.setItem(tablerow-1,3,QTableWidgetItem(cateloy_result))#显示结果(文本)
        ex.tableWidget.setItem(tablerow-1,4,QTableWidgetItem(str(cateloy_result_p)+'%'))#显示结果置信度
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/570825
推荐阅读
相关标签
  

闽ICP备14008679号