PyQt训练BP模型时,显示waiting动图(多线程)
1、实现效果

2、相关代码
实现BP训练模型的线程类
class WorkThread(QtCore.QThread):
finish_trigger = QtCore.pyqtSignal() # 关闭waiting_gif
result_trigger = QtCore.pyqtSignal(pd.Series) # 传递预测结果信号
evaluate_trigger = QtCore.pyqtSignal(list) # 传递正确率信号 def __int__(self):
super(WorkThread, self).__init__() def init(self, dataset, feature, label, info):
self.dataset = dataset
self.feature = feature
self.label = label
self.info = info # 可以认为,run()函数就是新的线程需要执行的代码
def run(self):
self.BP() def BP(self):
"""
BP神经网络,返回标签的预测数据
:param parent:
:param dataset:
:param feature:
:param label:
:param info:
:return:
"""
dataset = self.dataset
feature = self.feature
label = self.label
info = self.info input_dim = len(feature)
data_x = dataset[feature] # 特征数据
data_y = dataset[label] # 标签数据 x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=info[0][3]) # **********************建立一个简单BP神经网络模型*********************************
self.model = Sequential() # 声明一个顺序模型
count = len(info)
for i in range(1, count-1):
if i == 1:
self.model.add(Dense(info[i][0], activation=info[i][1], input_dim=input_dim, kernel_initializer=info[i][2])) # 输入层,Dense表示BP层
else:
self.model.add(Dense(info[i][0], activation=info[i][1], kernel_initializer=info[i][2])) # 添加输出层
self.model.add(Dense(info[count-1][0], activation=info[count-1][1], kernel_initializer=info[count-1][2])) sgd = SGD(lr=info[0][0], decay=1e-6, momentum=0.9, nesterov=True)
self.model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy']) # 编译模型 self.model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=info[0][1], batch_size=info[0][2]) # 训练模型1000次 scores_train = self.model.evaluate(x_train, y_train, batch_size=10)
scores_test = self.model.evaluate(x_test, y_test, batch_size=10)
scores = self.model.evaluate(data_x, data_y, batch_size=10) self.finish_trigger.emit() # 循环完毕后发出信号
list = [scores_train[1]*100, scores_test[1]*100, scores[1]*100]
self.evaluate_trigger.emit(list)
result = pd.Series(self.model.predict(data_x).T[0])
result.name = '预测(BP)'
self.result_trigger.emit(result)
K.clear_session() # 反复调用model 模型 def save_model(self, save_dir):
self.model.save(save_dir) # 保存模型
GUI显示代码(部分):
class MainWindow(QtGui.QMainWindow):
save_dir_signal = QtCore.pyqtSignal(str) # 传递保存目录信号 def show_evaluate_result(self, evaluate_result):
help = QtGui.QMessageBox.information(self, '评价结果',
"训练集正确率: %.2f%%\n测试集正确率: %.2f%%\n数据集正确率: %.2f%%" %
(evaluate_result[0], evaluate_result[1], evaluate_result[2]),
QtGui.QMessageBox.Yes) self.pop_save_dir() def pop_save_dir(self):
msg = QtGui.QMessageBox.information(self, '提示', '是否保存模型?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if msg == QtGui.QMessageBox.Yes:
save_dir = QtGui.QFileDialog.getSaveFileName(self, '选择保存目录', 'C:\\Users\\fuqia\\Desktop') if save_dir != '':
save_dir = save_dir + '.model'
self.save_dir_signal.emit(save_dir) def show_bp_result(self, result): self.predict_data = result
TableWidgetDeal.add_predict_data(self.table, result) def waiting_label_close(self):
self.label.close() def show_waiting(self):
self.label = QtGui.QLabel(self)
self.label.setFixedSize(640, 480) # 不加的话有问题???
self.label.setWindowFlags(QtCore.Qt.FramelessWindowHint) # 无边框
self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground) # 背景透明 screen = QtGui.QDesktopWidget().screenGeometry()
size = self.label.geometry()
# 如果是self.label.move((screen.width() - size.width()) / 2 , (screen.height() - size.height()) / 2)无法居中
self.label.move((screen.width() - size.width()) / 2 + 240, (screen.height() - size.height()) / 2) # 打开gif文件
movie = QtGui.QMovie("./Icon/waiting.gif")
# 设置cacheMode为CacheAll时表示gif无限循环,注意此时loopCount()返回-1
movie.setCacheMode(QtGui.QMovie.CacheAll)
# 播放速度
movie.setSpeed(100)
self.label.setMovie(movie)
# 开始播放,对应的是movie.start()
movie.start()
self.label.show()
q = QtCore.QEventLoop()
q.exec_()
w = WorkThread()
w.init(self.object.data_set, feature, label, self.bp_ui.bp_info)
w.start()
w.finish_trigger.connect(self.waiting_label_close)
w.result_trigger.connect(self.show_bp_result)
w.evaluate_trigger.connect(self.show_evaluate_result)
self.save_dir_signal.connect(w.save_model)
self.show_waiting()
PyQt训练BP模型时,显示waiting动图(多线程)的更多相关文章
- keras训练cnn模型时loss为nan
keras训练cnn模型时loss为nan 1.首先记下来如何解决这个问题的:由于我代码中 model.compile(loss='categorical_crossentropy', optimiz ...
- js特效:鼠标滑过图片时切换为动图
效果展示 事前准备 一张普通的静态图+与其对应的gif图. 实现思路 获取图片的src,改变其后缀,使其变成与之对应的gif图片.(很简单有木有= =) 具体实现 编写html代码 <div c ...
- wpf 登录时显示状态动态图
下面的示例演示了如何在登录过程时,界面上显示状态图标,登录完成后隐藏图标: public partial class MainWindow : Window { public MainWindow() ...
- Qt QLabel 显示gif动图
#include <QMovie> QMovie * move = new QMovie(":/gif/牵着我的手去浪迹天涯.gif"); ui->label_g ...
- PocketSphinx语音识别系统语言模型的训练和声学模型的改进
PocketSphinx语音识别系统语言模型的训练和声学模型的改进 zouxy09@qq.com http://blog.csdn.net/zouxy09 关于语音识别的基础知识和sphinx的知识, ...
- 1.keras实现-->自己训练卷积模型实现猫狗二分类(CNN)
原数据集:包含 25000张猫狗图像,两个类别各有12500 新数据集:猫.狗 (照片大小不一样) 训练集:各1000个样本 验证集:各500个样本 测试集:各500个样本 1= 狗,0= 猫 # 将 ...
- 使用py-faster-rcnn训练VOC2007数据集时遇到问题
使用py-faster-rcnn训练VOC2007数据集时遇到如下问题: 1. KeyError: 'chair' File "/home/sai/py-faster-rcnn/tools/ ...
- 第15.40节、PyQt(Python+Qt)实战:moviepy实现MP4视频转gif动图的工具
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 在写<第15.39节.splitDockWidget和 ...
- [源码分析] Facebook如何训练超大模型---(1)
[源码分析] Facebook如何训练超大模型---(1) 目录 [源码分析] Facebook如何训练超大模型---(1) 0x00 摘要 0x01 简介 1.1 FAIR & FSDP 1 ...
随机推荐
- 深入java final关键字
Java final关键字详解:https://blog.csdn.net/kuangay/article/details/81509164 深入java final关键字 用法注意点和JVM对其进行 ...
- xdoj 1146 (逆向01背包)
背包 有:01背包 逆向背包 多重背包 完全背包 所有的背包都可以根据更新的方向一维实现 amazing?! #include <iostream> #include <cstd ...
- lesson4-图像分类-小象cv
CNN网络进化:AlexNet->VGG->GoogleNet->ResNet,深度8->19->22->152GoogleNet:Lsplit->trans ...
- 用户密码管理和 su 命令
1.passwd root 用户给自己改 密码,直接 输入 passwd 就可以了 若是给其它用户修改密码,就需要 passwd user_name 用户锁定和解锁 passwd -l user_ ...
- 安装Ubuntu16.04与windows10双系统后,如何修改启动默认设置
在安装了Ubuntu16.04系统之后,系统会默认自启动Ubuntu16.04,而我们大多数情况下可能都在使用windows系统,不修改默认设置,不经意间便会启动了Ubuntu16.04,通过我的经历 ...
- 实验吧—隐写术——WP之 奇妙的音乐
点击链接下载压缩包,解压后得到:一个图片,一个压缩包 打开图片: 看到海伦.凯勒我们都知道她是一位盲人,而下面黑色和灰色的点点应该就是盲文了,那么我们百度一下对照表 我们将图片里的盲文对照后得到; k ...
- (惊艳)基于谷底最小值的阈值的图像分割(改进HSV中的H分量可以用imhist(H)提取)
任务概述:将这张图片作为输入 , 然后抠出只有斑点的图片 灵感来源: 1. 黄色部分用绿色的掩盖掉得到图片B,然后A和B进行∩运算,相同的设置为0 2.统计单词的子母数,开辟一个26个元素的数组,进来 ...
- word怎么在方框中打对号
最快最简单的方法,是在word里输入一个大写的R,然后选中并将字体改为wingdings2,至于那个带叉号的方框图形,可以输入大写字母T并将字体设置为windings2
- java中的数据结构
1.链表的使用 使用时需要import java.util.List 和 java.util.ArrayList //返回list中的元素个数 int size(); //判断list中是否包含元素, ...
- MySQL--数据超时相关参数
=============================================== connect_timeout connect_timeout用在client和server之间建立连接 ...