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 ...
随机推荐
- $interpolateProvider
angular.module('emailParser', []) .config(['$interpolateProvider', function($interpolateProvider) { ...
- CSU 1588 合并果子
Description 现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T<=5 ...
- 容器(container)
一.容器有哪些 平时我们经常看到各种容器名称:Servlet容器.WEB容器.Java WEB容器.Java EE容器等 二.容器是什么 2-1 容器通常理解就是装东西的,我们这里说技术上的容 ...
- 《DSP using MATLAB》Problem 5.11
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- python列表复习
列表的切片 >>> name = list()>>> name.extend(range(100))>>> name[0, 1, 2, 3, 4, ...
- 求两个数之间的质数 -----------基于for循环 算法思想
前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...
- Go Example--锁
package main import ( "fmt" "math/rand" "runtime" "sync" &qu ...
- Js 字符串的三大操作
回顾: var num = str.length:字符个数 str = str.toLowerCase()/toUpperCase() var char = str.charAt(index) :指 ...
- 【JVM】内存分析<一>工具的使用
一. 获取堆快照 1.出现OOME时生成堆dump: #出现 OOME 时生成堆 dump: -XX:+HeapDumpOnOutOfMemoryError #生成堆文件地址: -XX:HeapDum ...
- linux http配置
yum install httpd 安装http服务器 启动http服务器即可访问 如果不行的话,试着执行命令 firewall-cmd –permanent –add-service=http(该命 ...