赞
踩
问题描述:
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)+'%'))#显示结果置信度
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。