class MainWindow(QMainWindow, Ui_MainWindow): finsh_signal = pyqtSignal() progress_signal = pyqtSignal(int, int) """ Class documentation goes here. """ def __init__(self, parent=None): """ Constructor @param parent reference to the parent widget @type QWidget """ super(MainWindow, self).__init__(parent) self.setupUi(self) self.setWindowIcon(QIcon('image.ico')) #self.show() self.net = Net() bw1 = self.net.loadWeight('w1-save.csv') bw2 = self.net.loadWeight('w2-save.csv') lw1 = list(bw1) lw2 = list(bw2) weight1 = np.array(lw1) weight2 = np.array(lw2) self.weight1 = weight1.reshape(64, 365) self.weight2 = weight2.reshape(365, 49) self.horizontalSlider.setMinimum(0) self.horizontalSlider.setMaximum(100) self.horizontalSlider.setSingleStep(1) self.horizontalSlider.valueChanged.connect(self.valuechange) self.progressBarPercent.setValue(0) self.progressBarAcc.setValue(0) self.trainning = False self.work = True self.finsh_signal.connect(self.callFinish) self.progress_signal.connect(self.callProgress) def threadTrain(self, ls): self.work = True self.trainning = True batch_size = 32 times = ls lr = 0.1 ldate, lvalue, datacnt = loadData('data.csv') datelevels = getDateLevels(ldate) #print (datelevels) valuelevels = getValueLevels(lvalue) progress = 0 acc = 0 cnt = int(datacnt / batch_size) * batch_size rem = datacnt % batch_size for t in range(times): for i in range(0, cnt, batch_size): if self.work == False: break start = i end = start + batch_size dw1, dw2 = self.net.train(self.weight1, self.weight2, datelevels[start:end], valuelevels[start:end]) self.weight1 -= lr * dw1 self.weight2 -= lr * dw2 p, vs = self.net.inference(self.weight1, self.weight2, datelevels, lvalue) cal = ((t * datacnt + i + 1)) / (times * datacnt) cal = int(cal * 100) #print('{0}*{1}+{2}/({3} * {4})={5}'.format(t, datacnt, i, times, datacnt, cal)) if progress != cal: progress = cal #self.progressBarPercent.setValue(progress) acc = int(p * 100) #self.progressBarAcc.setValue(acc) self.progress_signal.emit(progress, acc) if rem > 0: if self.work == False: break start += batch_size end = start + rem #print('{0},{1}'.format(start, end)) dw1, dw2 = self.net.train(self.weight1, self.weight2, datelevels[start:end], valuelevels[start:end]) self.weight1 -= lr * dw1 self.weight2 -= lr * dw2 p, vs = self.net.inference(self.weight1, self.weight2, datelevels, lvalue) cal = ((t * datacnt + i + 1)) / (times * datacnt) cal = int(cal * 100) #print('{0}*{1}+{2}/({3} * {4})={5}'.format(t, datacnt, i, times, datacnt, cal)) if progress != cal: progress = cal #self.progressBarPercent.setValue(progress) acc = int(p * 100) #self.progressBarAcc.setValue(acc) self.progress_signal.emit(progress, acc) #self.progressBarPercent.setValue(100) self.net.saveWeight(self.weight1, 'w1-save.csv') self.net.saveWeight(self.weight2, 'w2-save.csv') self.finsh_signal.emit() # self.trainning = False def callFinish(self): self.progressBarPercent.setValue(100) self.textEditResult.setText('训练完成') def callProgress(self, progress, acc): self.progressBarAcc.setValue(acc) self.progressBarPercent.setValue(progress) @pyqtSlot() def on_pushButtonTrain_clicked(self): self.textEditResult.setText('开始训练') if self.trainning == True: self.textEditResult.setText('正在训练') return self.progressBarAcc.setValue(0) self.progressBarPercent.setValue(0) times = self.horizontalSlider.value() #self.labelTime.setText(str(times)) print(times) thread.start_new_thread(self.threadTrain, (times, )) @pyqtSlot() def on_pushButtonInference_clicked(self): if self.trainning == True: self.textEditResult.setText('正在训练') return date = self.calendarWidget.selectedDate() t = str(date.toPyDate()) l = t.split('-') sdate = str(l[0]) + str(l[1]) + str(l[2]) print(sdate) ldata = [int(sdate)] lvalue = [0] datelevels = getDateLevels(ldata) #valuelevels = getValueLevels(lvalue) p, a2 = self.net.inference(self.weight1, self.weight2, datelevels, lvalue) data = sort(a2) s = '' for i in range(49): n, p = data[i] s += str(n) s += ',' self.textEditResult.setText(s) @pyqtSlot() def on_pushButtonAcc_clicked(self): if self.trainning == True: self.textEditResult.setText('正在训练') return ldate, lvalue, datacnt = loadData('data.csv') datelevels = getDateLevels(ldate) #print (datelevels) p, vs = self.net.inference(self.weight1, self.weight2, datelevels, lvalue) acc = int(p * 100) self.progressBarAcc.setValue(acc) self.progressBarPercent.setValue(100) def valuechange(self): times = self.horizontalSlider.value() self.labelTime.setText(str(times)) @pyqtSlot() def on_pushButtonStop_clicked(self): self.work = False