在Pyqt5中实现keras深度学习网络预测

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)

跑这段代码时,报错:

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

场景:我在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、创建模型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)+'%'))#显示结果置信度
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值