PyQt训练BP模型时,显示waiting动图(多线程)

1、实现效果

2、相关代码

实现BP训练模型的线程类

 1 class WorkThread(QtCore.QThread):
 2     finish_trigger = QtCore.pyqtSignal()  # 关闭waiting_gif
 3     result_trigger = QtCore.pyqtSignal(pd.Series)  # 传递预测结果信号
 4     evaluate_trigger = QtCore.pyqtSignal(list)  # 传递正确率信号
 5
 6     def __int__(self):
 7         super(WorkThread, self).__init__()
 8
 9     def init(self, dataset, feature, label, info):
10         self.dataset = dataset
11         self.feature = feature
12         self.label = label
13         self.info = info
14
15     # 可以认为,run()函数就是新的线程需要执行的代码
16     def run(self):
17         self.BP()
18
19     def BP(self):
20         """
21         BP神经网络,返回标签的预测数据
22         :param parent:
23         :param dataset:
24         :param feature:
25         :param label:
26         :param info:
27         :return:
28         """
29         dataset = self.dataset
30         feature = self.feature
31         label = self.label
32         info = self.info
33
34         input_dim = len(feature)
35         data_x = dataset[feature]  # 特征数据
36         data_y = dataset[label]  # 标签数据
37
38         x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=info[0][3])
39
40         # **********************建立一个简单BP神经网络模型*********************************
41         self.model = Sequential()  # 声明一个顺序模型
42         count = len(info)
43         for i in range(1, count-1):
44             if i == 1:
45                 self.model.add(Dense(info[i][0], activation=info[i][1], input_dim=input_dim, kernel_initializer=info[i][2]))  # 输入层,Dense表示BP层
46             else:
47                 self.model.add(Dense(info[i][0], activation=info[i][1], kernel_initializer=info[i][2]))
48
49         # 添加输出层
50         self.model.add(Dense(info[count-1][0], activation=info[count-1][1], kernel_initializer=info[count-1][2]))
51
52         sgd = SGD(lr=info[0][0], decay=1e-6, momentum=0.9, nesterov=True)
53         self.model.compile(loss=‘binary_crossentropy‘,  optimizer=sgd,  metrics=[‘accuracy‘])  # 编译模型
54
55         self.model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=info[0][1], batch_size=info[0][2])  # 训练模型1000次
56
57         scores_train = self.model.evaluate(x_train, y_train, batch_size=10)
58         scores_test = self.model.evaluate(x_test, y_test, batch_size=10)
59         scores = self.model.evaluate(data_x, data_y, batch_size=10)
60
61         self.finish_trigger.emit()         # 循环完毕后发出信号
62         list = [scores_train[1]*100, scores_test[1]*100, scores[1]*100]
63         self.evaluate_trigger.emit(list)
64         result = pd.Series(self.model.predict(data_x).T[0])
65         result.name = ‘预测(BP)‘
66         self.result_trigger.emit(result)
67         K.clear_session()  # 反复调用model 模型
68
69     def save_model(self, save_dir):
70         self.model.save(save_dir)  # 保存模型

GUI显示代码(部分):

 1 class MainWindow(QtGui.QMainWindow):
 2     save_dir_signal = QtCore.pyqtSignal(str)  # 传递保存目录信号
 3
 4 def show_evaluate_result(self, evaluate_result):
 5         help = QtGui.QMessageBox.information(self, ‘评价结果‘,
 6                                              "训练集正确率:  %.2f%%\n测试集正确率:  %.2f%%\n数据集正确率:  %.2f%%" %
 7                                              (evaluate_result[0], evaluate_result[1], evaluate_result[2]),
 8                                              QtGui.QMessageBox.Yes)
 9
10         self.pop_save_dir()
11
12     def pop_save_dir(self):
13         msg = QtGui.QMessageBox.information(self, ‘提示‘, ‘是否保存模型?‘, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
14         if msg == QtGui.QMessageBox.Yes:
15                 save_dir = QtGui.QFileDialog.getSaveFileName(self, ‘选择保存目录‘, ‘C:\\Users\\fuqia\\Desktop‘)
16
17                 if save_dir != ‘‘:
18                     save_dir = save_dir + ‘.model‘
19                     self.save_dir_signal.emit(save_dir)
20
21     def show_bp_result(self, result):
22
23         self.predict_data = result
24         TableWidgetDeal.add_predict_data(self.table, result)
25
26     def waiting_label_close(self):
27         self.label.close()
28
29     def show_waiting(self):
30         self.label = QtGui.QLabel(self)
31         self.label.setFixedSize(640, 480)  # 不加的话有问题???
32         self.label.setWindowFlags(QtCore.Qt.FramelessWindowHint)  # 无边框
33         self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground)  # 背景透明
34
35         screen = QtGui.QDesktopWidget().screenGeometry()
36         size = self.label.geometry()
37         # 如果是self.label.move((screen.width() - size.width()) / 2 , (screen.height() - size.height()) / 2)无法居中
38         self.label.move((screen.width() - size.width()) / 2 + 240, (screen.height() - size.height()) / 2)
39
40         # 打开gif文件
41         movie = QtGui.QMovie("./Icon/waiting.gif")
42         # 设置cacheMode为CacheAll时表示gif无限循环,注意此时loopCount()返回-1
43         movie.setCacheMode(QtGui.QMovie.CacheAll)
44         # 播放速度
45         movie.setSpeed(100)
46         self.label.setMovie(movie)
47         # 开始播放,对应的是movie.start()
48         movie.start()
49         self.label.show()
50         q = QtCore.QEventLoop()
51         q.exec_()
1 w = WorkThread()
2 w.init(self.object.data_set, feature, label, self.bp_ui.bp_info)
3 w.start()
4 w.finish_trigger.connect(self.waiting_label_close)
5 w.result_trigger.connect(self.show_bp_result)
6 w.evaluate_trigger.connect(self.show_evaluate_result)
7 self.save_dir_signal.connect(w.save_model)
8 self.show_waiting()

原文地址:https://www.cnblogs.com/fuqia/p/9191696.html

时间: 2024-10-07 05:16:09

PyQt训练BP模型时,显示waiting动图(多线程)的相关文章

训练贷款模型时样本、模型、监控的一些点

一.样本 理想情况下,样本分三部分. 训练样本70% 验证样本(有时也叫测试样本)30% 跨时间验证样本:但经常这块数据没有,那也就只用前面的数据来做也可以. 二.如何确保模型训练完成 1.训练样本的roc和ks达到比较好的水平(0.7,0.3及以上) 2.验证样本和训练样本的指标差距不大(如10%,也要根据ks和roc的绝对值来看) 3.跨时间验证样本和训练样本的指标差距不大(如10%,也要根据ks和roc的绝对值来看) 三.模型上线监控 变量稳定性 模型稳定性 模型ks 通过率.拒绝率.在各

keras训练cnn模型时loss为nan

1.首先记下来如何解决这个问题的:由于我代码中 model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) 即损失函数用的是categorical_crossentropy所以,在pycharm中双击shift键,寻找该函数,会出现keras.loss模块中有该函数,进入该函数后, 原函数为: def categorical_crossentropy(y_true, y_pred):

8、在fa时,用HW200句的monophone.mmf和data/list/mono.list作为一个充分训练的模型文件,进行fa

在对ZhiJun40句语料做fa时,ZhiJun_SpeakerA2_30-fa-New,用的是HW2000句的monophone.mmf和data/list/mono.list作为,一个标准的充分训练的模型文件,然后进行fa fa之后得到的是mono类型的标注文件,位于/gv/.../下面, 然后,用Ning的脚本得到full类型的标注, 然后就用这套标注,进行合成了,make一下 结果报错了: =============== ang ================ ERROR [+2121

IE6 IE7 IE8(Q) 负边距 (margin) 导致元素溢出 hasLayout 容器时显示异常

标准参考 根据W3C CSS2.1规范第8.3节中的描述,边距属性设置了一个框的边距区的宽度.'margin' 缩写属性设置所有四边的边距,而其它的边距属性( 'margin-top' ,'margin-right' , 'margin-bottom' 及 'margin-left' )只设置它们代表的那一边的边距. 边距属性的取值可以是下面值之一: <length> 指定一个固定的宽度. <percentage> 百分比的计算基于生成的框的包含块的宽度. auto 其表现细节请参

华为云EI ModelArts,从0到1开发训练AI模型,通过“极快”和“极简”实现普惠AI

华为云EI ModelArts,从0到1开发训练AI模型,通过"极快"和"极简"实现普惠AI现如今 AI 技术.概念火爆.落地应用更是繁多,但开发呢?是否困难?到底有多痛?据了解,大部分 AI 开发者的工作时间并不长,并且十有八九可能不是"科班出身".从编写的教材.录制的课程中就可以看出,所有的教学都不可避免地带有很强的的学术性,即便有意避免研究导向,仍然离产业界的需求相去甚远.并且随着新一波人工智能的热潮,人们发现手里的数据多了,电脑运算的更快

Tensorflow中保存模型时生成的各种文件区别和作用

假如我们得到了如下的checkpoints, 上面的文件主要可以分成三类:一种是在保存模型时生成的文件,一种是我们在使用tensorboard时生成的文件,还有一种就是plugins这个文件夹,这个是使用capture tpuprofile工具生成的,该工具可以跟踪TPU的计算过程,并对你的模型性能进行分析,这里就不想详细介绍了.本文主要介绍前面两种文件的作用: tensorboard文件 events.out.tfevents.*...: 保存的就是你的accuracy或者loss在不同时刻的

CSS之选择符、链接、盒子模型、显示隐藏元素

<html> <head> <meta charset="utf-8"> <title>选择符.链接.盒子模型.显示隐藏元素</title> <style> a:link{ color:red; } a:visited{ color:black; } a:hover{ color:blue; } a:active{ color:green; } </style> </head> <bo

easyui-tabs图标(获取焦点时显示图标,失去焦点时隐藏图标)

获取焦点时显示图标,失去焦点时隐藏图标 <script type="text/javascript"> $('#_progress').tabs({ onSelect: function (title) { var tab = $('#_progress').tabs('getSelected'); // get selected panel var index = $('#_progress').tabs('getTabIndex', tab); //alert(inde

cna(Cisco Network Assistant)选择device manager时显示“无法显示该网页”

cna(Cisco Network Assistant)选择device manager时显示“无法显示该网页” 只要将弹出的网址中.html前的_zh-CN删除即可 若网址为http://10.1.1.1/flash0:ccpexp/html/ccpExpress_zh-CN.html 改为http://10.1.1.1/flash0:ccpexp/html/ccpExpress.html即可