From 884db9b9265fac690cbedc95b8a3c67d068b1d42 Mon Sep 17 00:00:00 2001 From: newbie Date: Mon, 7 Oct 2024 09:54:32 +0800 Subject: [PATCH] init --- .gitignore | 2 + .vscode/launch.json | 15 ++ Qfunctions/__init__.py | 0 Qfunctions/__pycache__/Qtorch.cpython-312.pyc | Bin 0 -> 6700 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 144 bytes Qfunctions/__pycache__/divSet.cpython-312.pyc | Bin 0 -> 1317 bytes .../__pycache__/loaData.cpython-312.pyc | Bin 0 -> 3736 bytes .../__pycache__/saveToxlsx.cpython-312.pyc | Bin 0 -> 620 bytes Qfunctions/__pycache__/test.cpython-312.pyc | Bin 0 -> 1079 bytes Qfunctions/divSet.py | 28 +++ Qfunctions/loaData.py | 97 +++++++++ Qfunctions/saveToxlsx.py | 13 ++ Qfunctions/test.py | 17 ++ Qtorch/Models/QSVM.py | 14 ++ Qtorch/Models/QSVM_BRF.py | 74 +++++++ Qtorch/Models/Qmlp.py | 180 +++++++++++++++++ Qtorch/Models/Qnn.py | 105 ++++++++++ Qtorch/Models/__init__.py | 0 .../Models/__pycache__/QSVM.cpython-312.pyc | Bin 0 -> 1089 bytes .../__pycache__/QSVM_BRF.cpython-312.pyc | Bin 0 -> 5870 bytes .../Models/__pycache__/Qmlp.cpython-310.pyc | Bin 0 -> 4880 bytes .../Models/__pycache__/Qmlp.cpython-312.pyc | Bin 0 -> 10092 bytes Qtorch/Models/__pycache__/Qnn.cpython-312.pyc | Bin 0 -> 4247 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 143 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 147 bytes Qtorch/__init__.py | 0 Qtorch/__pycache__/Qmlp.cpython-312.pyc | Bin 0 -> 8233 bytes Qtorch/__pycache__/Qnn.cpython-312.pyc | Bin 0 -> 4240 bytes Qtorch/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 136 bytes Qtorch/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 151 bytes SVM | 1 + catplus | 49 +++++ main.py | 189 ++++++++++++++++++ remake/.vscode/launch.json | 15 ++ remake/Qtorch/Functions/__init__.py | 5 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 331 bytes .../__pycache__/dataLoader.cpython-312.pyc | Bin 0 -> 4540 bytes .../__pycache__/dataSplitter.cpython-312.pyc | Bin 0 -> 1717 bytes .../__pycache__/resSaver.cpython-312.pyc | Bin 0 -> 843 bytes remake/Qtorch/Functions/dataLoader.py | 91 +++++++++ remake/Qtorch/Functions/dataSplitter.py | 37 ++++ remake/Qtorch/Functions/resSaver.py | 15 ++ remake/Qtorch/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 147 bytes remake/Qtorch/models/QSVM.py | 21 ++ remake/Qtorch/models/Qnn.py | 72 +++++++ remake/Qtorch/models/Qsvm_brf.py | 114 +++++++++++ remake/Qtorch/models/__init__.py | 3 + .../models/__pycache__/QSVM.cpython-312.pyc | Bin 0 -> 1149 bytes .../models/__pycache__/Qnn.cpython-312.pyc | Bin 0 -> 3855 bytes .../__pycache__/Qsvm_brf.cpython-312.pyc | Bin 0 -> 8484 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 215 bytes remake/README.md | 0 remake/main.py | 23 +++ test.py | 110 ++++++++++ test2.py | 55 +++++ 56 files changed, 1345 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 Qfunctions/__init__.py create mode 100644 Qfunctions/__pycache__/Qtorch.cpython-312.pyc create mode 100644 Qfunctions/__pycache__/__init__.cpython-312.pyc create mode 100644 Qfunctions/__pycache__/divSet.cpython-312.pyc create mode 100644 Qfunctions/__pycache__/loaData.cpython-312.pyc create mode 100644 Qfunctions/__pycache__/saveToxlsx.cpython-312.pyc create mode 100644 Qfunctions/__pycache__/test.cpython-312.pyc create mode 100644 Qfunctions/divSet.py create mode 100644 Qfunctions/loaData.py create mode 100644 Qfunctions/saveToxlsx.py create mode 100644 Qfunctions/test.py create mode 100644 Qtorch/Models/QSVM.py create mode 100644 Qtorch/Models/QSVM_BRF.py create mode 100644 Qtorch/Models/Qmlp.py create mode 100644 Qtorch/Models/Qnn.py create mode 100644 Qtorch/Models/__init__.py create mode 100644 Qtorch/Models/__pycache__/QSVM.cpython-312.pyc create mode 100644 Qtorch/Models/__pycache__/QSVM_BRF.cpython-312.pyc create mode 100644 Qtorch/Models/__pycache__/Qmlp.cpython-310.pyc create mode 100644 Qtorch/Models/__pycache__/Qmlp.cpython-312.pyc create mode 100644 Qtorch/Models/__pycache__/Qnn.cpython-312.pyc create mode 100644 Qtorch/Models/__pycache__/__init__.cpython-310.pyc create mode 100644 Qtorch/Models/__pycache__/__init__.cpython-312.pyc create mode 100644 Qtorch/__init__.py create mode 100644 Qtorch/__pycache__/Qmlp.cpython-312.pyc create mode 100644 Qtorch/__pycache__/Qnn.cpython-312.pyc create mode 100644 Qtorch/__pycache__/__init__.cpython-310.pyc create mode 100644 Qtorch/__pycache__/__init__.cpython-312.pyc create mode 160000 SVM create mode 100755 catplus create mode 100644 main.py create mode 100644 remake/.vscode/launch.json create mode 100644 remake/Qtorch/Functions/__init__.py create mode 100644 remake/Qtorch/Functions/__pycache__/__init__.cpython-312.pyc create mode 100644 remake/Qtorch/Functions/__pycache__/dataLoader.cpython-312.pyc create mode 100644 remake/Qtorch/Functions/__pycache__/dataSplitter.cpython-312.pyc create mode 100644 remake/Qtorch/Functions/__pycache__/resSaver.cpython-312.pyc create mode 100644 remake/Qtorch/Functions/dataLoader.py create mode 100644 remake/Qtorch/Functions/dataSplitter.py create mode 100644 remake/Qtorch/Functions/resSaver.py create mode 100644 remake/Qtorch/__init__.py create mode 100644 remake/Qtorch/__pycache__/__init__.cpython-312.pyc create mode 100644 remake/Qtorch/models/QSVM.py create mode 100644 remake/Qtorch/models/Qnn.py create mode 100644 remake/Qtorch/models/Qsvm_brf.py create mode 100644 remake/Qtorch/models/__init__.py create mode 100644 remake/Qtorch/models/__pycache__/QSVM.cpython-312.pyc create mode 100644 remake/Qtorch/models/__pycache__/Qnn.cpython-312.pyc create mode 100644 remake/Qtorch/models/__pycache__/Qsvm_brf.cpython-312.pyc create mode 100644 remake/Qtorch/models/__pycache__/__init__.cpython-312.pyc create mode 100644 remake/README.md create mode 100644 remake/main.py create mode 100644 test.py create mode 100644 test2.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2bb627b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Static +Result \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..14b7790 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python Debugger: Current File", + "type": "debugpy", + "request": "launch", + "program": "main.py", + "console": "integratedTerminal" + } + ] +} \ No newline at end of file diff --git a/Qfunctions/__init__.py b/Qfunctions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Qfunctions/__pycache__/Qtorch.cpython-312.pyc b/Qfunctions/__pycache__/Qtorch.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38e4bbbdc3909c4ac34ea23592e9c4816d864dee GIT binary patch literal 6700 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 R5Ep|OADI~$8H<>KECBzLB2NGS literal 0 HcmV?d00001 diff --git a/Qfunctions/__pycache__/divSet.cpython-312.pyc b/Qfunctions/__pycache__/divSet.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17896c94d595fe54f57acd60f46bf3365830d1d1 GIT binary patch literal 1317 zcmbtUPiWg#7=KTaCCida9JZy!aY!=eRD;#vhLmlkgVE;F;jslq3G0k%J;!oo*?m$9 z9x^D<(!nlfmpQvM$Cm7nV~;!RGIojZz~RAIOM6LAh4j?R`aMTVdPsNK2YTQ4-ur!j z-uL~`pV@2%f#iP|*1i-GddfG62(fW+7L1>fg)Ho#7GA}e+kzvs#8t5+txB*@S<)T6 zn(B&%ywBYX%qDzl+HTb+o?rDkj_n%)JGJ7Qu4PhdrDi&WGW`ql263*qwYEiQr6$E0 zxsu_7iqOGx%(MHj9?EvCds2X!NsY-RXs8X{6?nCGg}QJCPI{^TMB*4F2bfLskfGnZJ$+QOE&9ryMqs`{3wng10v6DUDCP=ib$ z)l)0TkShECf&f|6L+aSy6Q)z3O}ka~eA6fUd=!RC`J9+!JM9|F)@{EEd~>~eo3@w; zTgu5pdCwux(T#lDbk>Q-6iU2?*&&9`B+K+oCOe#o9!+yEK0T(8Ls~L?jo~g+uJHu6 z%VaQs(@g0m2Vn36*&CDE)4_Z84SDrZsnKqc(yeZz(I{Oeq~j2iy0*Jk`l`O})_l9| zdL_%gy+ZtRoi39PO*##6c>UgUSVHtnKmB7RTzDZPMZ0Hj*gxU^`Tpnd$&ox2&h5#W z__W+lMe=*$+>?~HmwjiHosY8fTT8?2ha1a}CGFnTjjMfpr}9!p#ibqdQSLW;_q*m_ zAKZ+D`EcQfrT&G%@-ywsP|JtKJ$-Vd&qn&}*3?ip!i7C8H`4NvmLDt+wfDm!)B*|g zLZlZ4YxmtvcQmsY%`EPG{U|q_`E;mX3nu<-Fv z`y?zrRww$!!NS(kgA2QAc~>YOz-y5qR@Q#moI-pz5-&b8oA;Z!~1ka6F} zQ)cfbw;f74v|S^f2i+YHf6S6`D<2|SfXFlt%d7N72(<2yOLPvloKW5bEH6Zi@!x3i OA9U%ZbQ+%@d%Om`C@%j1 literal 0 HcmV?d00001 diff --git a/Qfunctions/__pycache__/loaData.cpython-312.pyc b/Qfunctions/__pycache__/loaData.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7439bfbe75754d46a1318cc65a863d3075472b68 GIT binary patch literal 3736 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 literal 0 HcmV?d00001 diff --git a/Qfunctions/__pycache__/saveToxlsx.cpython-312.pyc b/Qfunctions/__pycache__/saveToxlsx.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56d5d26bed79e8193fe402d775722a7f0484cb29 GIT binary patch literal 620 zcmZ8fO=uHA6n?Win{3jiwz&#rJ?W}sDHOD{^rR?_DX0}nFJal4m`yjkac5FCA%_-( zUVE~EQt-G^4?X50^e#e#3bO6Zlea={IXROb6yM={-+S+SZyt~Nn#*ND*!?fxDk%lv zmkg#R;*kyV!W{zvf;`v(qP&M4)Iz5ETb4H+b)*`DE}V=99|Rl&N8>a=Z8~k55T2k8 zoWQ9iAY)U1?tGf)<$iW;^|g zvZlwaEfXa=ja1EGs2%#Q|JHh0Y5ER#1D{z;Y_Ju`wF-?^GAqNfcu^+8TVjwL#?%ct+456R%!Goj?DEvBxXsm_cBdY=m`@_E?E!nZ))z1EY$M3GFm3YaW|cXatszktN5yTTEp_VqbGo;7ADL zEt*Z0eX^eD3o_w3F+l-}P=f5Zt>Pi2F%zq+L zNn2V3Dv=t=RrcyIlcEv8zH^mi)7VIgGAWu={t>ICNcMY4?w|PyW&wmiZ)1bmg)GcI z$=ti6Ow%QLuxvw!Ji{?VgpI(iqJV0y`OvTl!n6aM9`s!!ASOZ8&S`Agp6%TooVHyw zM%4gWz6XP9+e9+Pv1)HR_ST>WZ^nZj(^V=HmW25%s8q5ERVx@l+agq{VA~^@PX_Y^ z&^4;wG6?TQGfY7N3l38UQ@Ep@LBhn~HL2t}6`BbRUXW_YgRwi%SgpZ?_D&SazKaU? z!g9G>xP(x}K_=#RDcmT{dlp~Hpuj8VD|;&M^g#8LNTquI`m^DO`S38{N@* zHhSL-y`OAo*J?vsqVjC`$?)Rv>bZtEu$Apx8DAP-y}y|~Qaiq#JFqgdG_!oWHnJnC zAGJekBkRRa{e{c7V}Mp z0O%^_L#DmKT#P;MA@=JyhKI-lAJ4U3wkth!5y7?<#1GnfT7I9G01q&M`xx8P&bvOG ichCiVl$m^0f^NosN`fGK0okwM^fxfklskk%ob(H!kpLF} literal 0 HcmV?d00001 diff --git a/Qfunctions/divSet.py b/Qfunctions/divSet.py new file mode 100644 index 0000000..8e09c2e --- /dev/null +++ b/Qfunctions/divSet.py @@ -0,0 +1,28 @@ +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import StandardScaler, LabelEncoder + +def divSet(data, labels = None, test_size=0.2, random_state=None): + + encoder = LabelEncoder() + + # 最后一列是标签 + X = data.iloc[:, :-1] + y = data.iloc[:, -1] + + if labels: + labels = encoder.fit_transform(labels) + else: + encoder.fit(y) + + # 分割数据集为训练集和测试集 + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state) + # 标准化特征 + scaler = StandardScaler() + X_train = scaler.fit_transform(X_train) + X_test = scaler.transform(X_test) + + # 编码标签 + y_train = encoder.transform(y_train.values.reshape(-1, 1)) + y_test = encoder.transform(y_test.values.reshape(-1, 1)) + + return X_train, X_test, y_train, y_test, encoder diff --git a/Qfunctions/loaData.py b/Qfunctions/loaData.py new file mode 100644 index 0000000..5d7272e --- /dev/null +++ b/Qfunctions/loaData.py @@ -0,0 +1,97 @@ +import os +import pandas as pd + +STATIC_PATH = './Static' + +# 从文件夹中读取所有xlsx文件,每个文件对应一个label +# labelNames为label的名字,如果不提供则默认为文件名 +def load_data(folder, labelNames, isDir): + # 检查folder参数 + if folder is None: + raise ValueError("The 'folder' parameter is required.") + + # 检查labelNames参数 + if labelNames is None: + raise ValueError("The 'labelNames' parameter is required if 'folder' does not contain labels.") + + folder = os.path.join(STATIC_PATH, folder) + + # 看看有没有元数据文件夹 + if not os.path.isdir(folder): + raise ValueError(f"The folder '{folder}' does not exist.") + +# fileNames = [f for f in os.listdir(folder) if f.endswith('.xlsx')] + +# # 获取数据的最大行数 +# max_row_length = get_max_row_len(folder, fileNames) + +# all_features = [] + +# for i, fileName in enumerate(fileNames): + +# features = load_xlsx(folder + '/' + fileName, labelNames[i], max_row_length, 'zero') +# all_features.append(features) + +# data = pd.concat(all_features, ignore_index = True) + + data = None + if not isDir: + data = load_from_file(folder=folder, labelNames=labelNames) + else: + data = load_from_folder(folder=folder, labelNames=labelNames) + print(data) + return data + +def load_from_folder(folder, labelNames): + pass + +def load_from_file(folder, labelNames): + fileNames = [labelName + ".xlsx" for labelName in labelNames] + # 获取数据的最大行数 + max_row_length = get_max_row_len(folder, fileNames) + all_features = [] + for i, fileName in enumerate(fileNames): + features = load_xlsx(folder + '/' + fileName, labelNames[i], max_row_length, 'zero') + all_features.append(features) + return pd.concat(all_features, ignore_index = True) + + +def load_xlsx(fileName, labelName, max_row_length = 1000, fill_rule = None): + df = pd.read_excel(fileName) + + # 提取偶数列 + features = df.iloc[0:, 1::2] + features.dropna(inplace=True) + features.reset_index(drop=True, inplace=True) + + features = features.T + + # 补全每一行到指定长度 + features = features.apply(lambda row: fill_to_len(row, max_row_length, fill_rule), axis=1) + + features['label'] = labelName + features.columns = [f'feature{i+1}' for i in range(max_row_length)] + ['label'] + + return features + +def fill_to_len(row, length = 1000, rule = None): + fill_value = 0 + + if rule == 'min': + fill_value = row.min() + elif rule == 'mean': + fill_value = row.mean() + elif rule == 'zero': + fill_value = 0 + fill_values = pd.Series([fill_value] * (length - len(row))) + + return pd.concat([row, fill_values], ignore_index=True) + +def get_max_row_len(folder, filenames): + max_len = 0 + for filename in filenames: + df = pd.read_excel(os.path.join(folder, filename)) + max_len = max(max_len, df.shape[0]) + return max_len + +__all__ = ['load_data'] diff --git a/Qfunctions/saveToxlsx.py b/Qfunctions/saveToxlsx.py new file mode 100644 index 0000000..9f8e5b4 --- /dev/null +++ b/Qfunctions/saveToxlsx.py @@ -0,0 +1,13 @@ +import os + +def save_to_xlsx(project_name, file_name, data): + os.makedirs(f'Result/{project_name}', exist_ok=True) + data.to_excel(f'Result/{project_name}/{file_name}.xlsx', index=True) + print("Save successed to " + f'Result/{project_name}/{file_name}.xlsx') + + + # for filename,data in save_maps.items(): + # data.to_excel(f'Result/{project_name}/{filename}.xlsx', index=True) + # print("Save successed to " + f'Result/{project_name}/{filename}.xlsx') + # print('Save to xlsx done!') + return diff --git a/Qfunctions/test.py b/Qfunctions/test.py new file mode 100644 index 0000000..d4c26dd --- /dev/null +++ b/Qfunctions/test.py @@ -0,0 +1,17 @@ +import time +from sklearn.neural_network import MLPClassifier +from sklearn.metrics import classification_report, accuracy_score + +def MLP(X_train, X_test, y_train, y_test): + start_time = time.time() + # 训练 MLP 分类器 + mlp = MLPClassifier(hidden_layer_sizes=(100,), max_iter=300, random_state=42) + mlp.fit(X_train, y_train) + y_pred = mlp.predict(X_test) + end_time = time.time() + # 打印训练时间 + print("Training Time:", end_time - start_time, "seconds") + # 评估模型 + print("Accuracy:", accuracy_score(y_test, y_pred)) + print("Classification Report:") + print(classification_report(y_test, y_pred)) \ No newline at end of file diff --git a/Qtorch/Models/QSVM.py b/Qtorch/Models/QSVM.py new file mode 100644 index 0000000..b0c5b35 --- /dev/null +++ b/Qtorch/Models/QSVM.py @@ -0,0 +1,14 @@ +from Qtorch.Models.Qnn import Qnn +from abc import ABC, abstractmethod + +class QSVM(Qnn, ABC): + def __init__(self, data, labels=None, test_size=0.2, random_state=None): + super().__init__(data, labels, test_size, random_state) + self.result.update({ + "pca_2d" : None, + "pca_3d" : None + }) + + @abstractmethod + def train_model(self, train_loader, test_loader, epochs): + return super().train_model(train_loader, test_loader, epochs) diff --git a/Qtorch/Models/QSVM_BRF.py b/Qtorch/Models/QSVM_BRF.py new file mode 100644 index 0000000..9e42baf --- /dev/null +++ b/Qtorch/Models/QSVM_BRF.py @@ -0,0 +1,74 @@ +import torch +import torch.nn as nn +import torch.optim as optim + +from Qtorch.Models.QSVM import QSVM as svm + +class QSVM_BRF(svm): + def __init__(self, data, labels=None, test_size=0.2, random_state=None, + gamma=1.0, C=100, batch_size = 64, learning_rate=0.01): + super().__init__(data, labels, test_size, random_state) + self.gamma, self.C, self.n_features = gamma, C, data.shape[0] - 1 + self.support_vectors = torch.cat([batch[0] for batch in self.train_loader]) + self.alpha = nn.Parameter(torch.zeros(self.support_vectors.shape[0])) + self.b = nn.Parameter(torch.zeros(1)) + self.batch_size = batch_size + self.learning_rate = learning_rate + self.optimizer = optim.SGD(self.parameters(), lr=self.learning_rate) + + def rbf_kernel(self, X, Y): + X_norm = (X**2).sum(1).view(-1, 1) + Y_norm = (Y**2).sum(1).view(1, -1) + dist = X_norm + Y_norm - 2.0 * torch.mm(X, Y.t()) + return torch.exp(-self.gamma * dist) + + def forward(self, X): + K = self.rbf_kernel(X, self.support_vectors) + return torch.mm(K, self.alpha.unsqueeze(1)).squeeze() + self.b + + def hinge_loss(self, outputs, targets): + return torch.mean(torch.clamp(1 - outputs * targets, min=0)) + + def regularization(self): + return 0.5 * (self.alpha ** 2).sum() + + def train_model(self, epoch_times=100, learning_rate=0.01): + + losses, train_accs, test_accs = [], [], [] + + for epoch in range(epoch_times): + self.train() + epoch_loss, correct_train, total_train = 0, 0, 0 + + for batch_X, batch_y in self.train_loader: + + self.optimizer.zero_grad() + outputs = self(batch_X) + loss = self.hinge_loss(outputs, batch_y) + self.C * self.regularization() + loss.backward() + self.optimizer.step() + + epoch_loss += loss.item() + predicted = torch.sign(outputs) + correct_train += (predicted == batch_y).sum().item() + total_train += batch_y.size(0) + + train_acc = correct_train / total_train + test_acc = self.evaluate() + + losses.append(epoch_loss / len(self.train_loader)) + train_accs.append(train_acc) + test_accs.append(test_acc) + print(f'Epoch [{epoch+1}/{epoch_times}], Loss: {losses[-1]:.4f}, Train Acc: {train_acc:.4f}, Test Acc: {test_acc:.4f}') + + def evaluate(self): + self.eval() + correct = 0 + total = 0 + with torch.no_grad(): + for batch_X, batch_y in self.test_loader: + outputs = self(batch_X) + predicted = torch.sign(outputs) + correct += (predicted == batch_y).sum().item() + total += batch_y.size(0) + return correct / total diff --git a/Qtorch/Models/Qmlp.py b/Qtorch/Models/Qmlp.py new file mode 100644 index 0000000..841bb90 --- /dev/null +++ b/Qtorch/Models/Qmlp.py @@ -0,0 +1,180 @@ +import torch +import torch.nn as nn +from torch.utils.data import DataLoader, TensorDataset +from sklearn.preprocessing import LabelEncoder +from sklearn.metrics import confusion_matrix +import pandas as pd + +LABEL_ENCODER = LabelEncoder() +DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + +class Qmlp(nn.Module): + + epoch_data = { + 'epoch': [], + 'train_loss': [], + 'train_accuracy': [], + 'test_accuracy': [] + } + + labels = None + + def __init__(self, X_train, y_train, X_test, y_test, + hidden_layers, + labels=None, + dropout_rate=0.3 + ): + super(Qmlp, self).__init__() + + self.X_train, self.y_train, self.X_test, self.y_test = X_train, y_train, X_test, y_test + + self.labels = labels + + input_size = X_train.shape[1] + # input_size = 5 + print(input_size) + num_classes = len(set(y_train)) + + self.layers = nn.ModuleList() + + # Input layer to first hidden layer + self.layers.append(nn.Linear(input_size, hidden_layers[0])) + self.layers.append(nn.BatchNorm1d(hidden_layers[0])) + self.layers.append(nn.ReLU()) + self.layers.append(nn.Dropout(dropout_rate)) + + # Create hidden layers + for i in range(1, len(hidden_layers)): + self.layers.append(nn.Linear(hidden_layers[i-1], hidden_layers[i])) + self.layers.append(nn.BatchNorm1d(hidden_layers[i])) + self.layers.append(nn.ReLU()) + self.layers.append(nn.Dropout(dropout_rate)) + + # Output layer + self.layers.append(nn.Linear(hidden_layers[-1], num_classes)) + self.__init_weights() + + def forward(self, x): + for layer in self.layers: + x = layer(x) + return x + + def __prepare_data(self): + + # Step 2: Prepare the data + X_train_tensor = torch.tensor(self.X_train, dtype=torch.float32) + self.y_train = LABEL_ENCODER.fit_transform(self.y_train) + y_train_tensor = torch.tensor(self.y_train, dtype=torch.long) + + X_test_tensor = torch.tensor(self.X_test, dtype=torch.float32) + self.y_test = LABEL_ENCODER.transform(self.y_test) + y_test_tensor = torch.tensor(self.y_test, dtype=torch.long) + + train_dataset = TensorDataset(X_train_tensor, y_train_tensor) + test_dataset = TensorDataset(X_test_tensor, y_test_tensor) + + train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True) + test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False) + + return train_loader, test_loader + + def __train_model(self, train_loader, test_loader, epochs_times=100): + + model = self.to(DEVICE) + + criterion = nn.CrossEntropyLoss() + optimizer = torch.optim.Adam(model.parameters(), lr=0.001, weight_decay=1e-5) + scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10) + best_test_accuracy = 0 + patience = 100 + counter = 0 + accuracy_threshold = 0.99 # 99% 的准确率阈值 + + for epoch in range(epochs_times): + + model.train() + running_loss = 0.0 + correct_train = 0 + total_train = 0 + + for inputs, labels in train_loader: + inputs, labels = inputs.to(DEVICE), labels.to(DEVICE) + + optimizer.zero_grad() + outputs = model(inputs) + loss = criterion(outputs, labels) + loss.backward() + optimizer.step() + + running_loss += loss.item() + _, predicted = torch.max(outputs.data, 1) + total_train += labels.size(0) + correct_train += (predicted == labels).sum().item() + train_accuracy = correct_train / total_train + train_loss = running_loss / len(train_loader) + + model.eval() + correct_test = 0 + total_test = 0 + all_labels = [] + all_predicted = [] + all_prob = [] + with torch.no_grad(): + for inputs, labels in test_loader: + inputs, labels = inputs.to(DEVICE), labels.to(DEVICE) + outputs = model(inputs) + prob = torch.nn.functional.softmax(outputs, dim=1) + _, predicted = torch.max(outputs.data, 1) + total_test += labels.size(0) + correct_test += (predicted == labels).sum().item() + all_labels.extend(labels.cpu().numpy()) + all_predicted.extend(predicted.cpu().numpy()) + all_prob.extend(prob.cpu().numpy()) + + test_accuracy = correct_test / total_test + print(f'Epoch [{epoch+1}/{epochs_times}], Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy * 100:.2f}%, Test Accuracy: {test_accuracy*100:.2f}%') + + self.epoch_data['epoch'].append(epoch+1) + self.epoch_data['train_loss'].append(train_loss) + self.epoch_data['train_accuracy'].append(train_accuracy) + self.epoch_data['test_accuracy'].append(test_accuracy) + + scheduler.step(train_loss) + + if test_accuracy > best_test_accuracy: + best_test_accuracy = test_accuracy + counter = 0 + else: + counter += 1 + + if counter >= patience and best_test_accuracy >= accuracy_threshold: + print(f"Early stopping at epoch {epoch+1}") + break + + if self.labels: + # labels_encoded = LABEL_ENCODER.fit(self.labels) + self.cm = confusion_matrix(all_labels, all_predicted, normalize='true') + else: + self.cm = confusion_matrix(all_labels, all_predicted, normalize='true') + + + # self.cm = confusion_matrix(all_labels, all_predicted, normalize='true') + print(self.cm) + return + + def get_cm(self): + return pd.DataFrame(self.cm, columns=self.labels, index=self.labels) + + def get_epoch_data(self): + return pd.DataFrame(self.epoch_data) + + def fit(self, epoch_times = 100): + + train_loader, test_loader = self.__prepare_data() + self.__train_model(train_loader, test_loader, epochs_times=epoch_times) + return + def __init_weights(self): + for m in self.modules(): + if isinstance(m, nn.Linear): + nn.init.xavier_uniform_(m.weight) + nn.init.zeros_(m.bias) \ No newline at end of file diff --git a/Qtorch/Models/Qnn.py b/Qtorch/Models/Qnn.py new file mode 100644 index 0000000..b35b439 --- /dev/null +++ b/Qtorch/Models/Qnn.py @@ -0,0 +1,105 @@ +import torch +import torch.nn as nn +import pandas as pd +from abc import ABC, abstractmethod + +from sklearn.metrics import confusion_matrix as cm + +from torch.utils.data import DataLoader, TensorDataset +from Qfunctions.divSet import divSet as ds +from Qfunctions.saveToxlsx import save_to_xlsx as stx + + +class Qnn(nn.Module, ABC): + + def __init__(self, data, labels=None, test_size=0.2, random_state=None): + super(Qnn, self).__init__() + + self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + # 保存原始labe, 混淆矩阵使用 + self.original_labels = labels + + # 划分训练集和测试集 + X_train, X_test, y_train, y_test, self.labels = ds( + data=data, + labels=labels, + test_size=test_size, + random_state=random_state + ) + + self.train_loader, self.test_loader = self.__prepare_data( + X_train=X_train, + y_train=y_train, + X_test=X_test, + y_test=y_test + ) + + # 定义结果 + self.result = { + 'acc_and_loss' : { + 'epoch' : [], + 'loss': [], + 'train_accuracy': [], + 'test_accuracy': [], + }, + 'confusion_matrix': None, + } + + def accuracy(self, output, target): + pass + + # 定义损失函数 + def hinge_loss(self, output, target): + pass + + @abstractmethod + def train_model(self, train_loader, test_loader, epochs): + pass + + def confusion_matrix(self, test_outputs): + predicted = torch.argmax(test_outputs, dim=1) + true_label = torch.argmax(self.y_test, dim=1) + return cm(predicted.cpu(), true_label.cpu()) + + def fit(self, epochs = 100): + self.train_model(epochs) + + def save(self, project_name): + for filename, data in self.result.items(): + if filename == 'confusion_matrix': + data = pd.DataFrame(data, columns=self.original_labels, index=self.original_labels) + stx(project_name, filename, data) + else: + data = pd.DataFrame(data) + stx(project_name, filename, data) + + def __prepare_data(self, X_train, y_train, X_test, y_test): + + X_train_tensor = torch.tensor(X_train, dtype=torch.float32) + y_train_tensor = torch.tensor(y_train, dtype=torch.long) + + X_test_tensor = torch.tensor(X_test, dtype=torch.float32) + y_test_tensor = torch.tensor(y_test, dtype=torch.long) + + train_dataset = TensorDataset(X_train_tensor, y_train_tensor) + test_dataset = TensorDataset(X_test_tensor, y_test_tensor) + + train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True) + test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False) + + print(train_loader, test_loader) + + return train_loader, test_loader + + + + + + + + + + + + diff --git a/Qtorch/Models/__init__.py b/Qtorch/Models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Qtorch/Models/__pycache__/QSVM.cpython-312.pyc b/Qtorch/Models/__pycache__/QSVM.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd426d9deeed9c353e564b51ae66397ac71748fb GIT binary patch literal 1089 zcmZ8g&ubGw6rS0c-6Ty?TWM=SC`zHQmjtZ%14V5WdMFK)iih()6d#Hjfj1|^AtwJnPp%%qRLvzR_E#y*;Icd{4)6yHd zY5Z1>i9@pJ`=%C>nc0WopuH>uVLL&E2c@d(#PP8uU8i#$z!qH0k%e7kX)f7DMeO2M z$|9UbSZgKQ-Ed3aM$fQiEFqJIbaCm)f}?kj)TWwIl{-Z+FYq1;V2{_1-bBwKwuzfs zlQe0MK1NNn+HIv5tM=7IzZYW=1mtQ8{-D-u&0K&r* zV~%G_$(U4KUQuh~Z!TY|R(O7`Q7V=4k2tS++!lV>U&${9RpFHK3so1&=9N;pT0>+Y zbv+w-Jz`2fISuA~1AU{Z&ACH5vio@d#+%y*-VwcXOp{yloAY1k*dZM|9v+3?ADxUF zXNc&D4x}NcUp-YVn!pr*|0Y2DC(!P`0GK2O1w|U-!!$gXvd=1tw5f{=>RTrM=2dMM z^h`(kbRC1&s!mCY5r~uO=13GV3P_BDSs#iz?JKJKmzTgmv%k_qJ2wy06Z_4Br|+h| zq-Q?U88HTDCMm4Eda2fj`vo(hX6V}$4l^8Jid)@NIK$Xl-S*;>NLZmLL>GtI?z9~4 zd5oDjrl_9HgP5LrT|yZpo}2)4-a==ZP7)`Bh+gbyn9Sl10eBk0h**?RfR{5IPd67& zHwXVYq2vsSz3d28F{YyGzeRDX66J65ZcP84m;_hRk(a@o5RCD6boB?CJf#D87H?1Q Kk~5@Gl>862xB$)o literal 0 HcmV?d00001 diff --git a/Qtorch/Models/__pycache__/QSVM_BRF.cpython-312.pyc b/Qtorch/Models/__pycache__/QSVM_BRF.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5ebbd3a8cea009210f964b477b8333b17c967aa GIT binary patch literal 5870 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 azmK-RkE%XI4gX|MP*l~l^f4l(F5o{cdAfiA literal 0 HcmV?d00001 diff --git a/Qtorch/Models/__pycache__/Qmlp.cpython-310.pyc b/Qtorch/Models/__pycache__/Qmlp.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12a7552a973ccf3587932eae57b550fe17782b5a GIT binary patch literal 4880 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 UXapk=7lRldnHd=wi)zNY$gUlahDQler0#% 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 literal 0 HcmV?d00001 diff --git a/Qtorch/__pycache__/__init__.cpython-310.pyc b/Qtorch/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..807caaf02e233a2943efe6c5abd38a57af8034ec GIT binary patch literal 136 zcmd1j<>g`kf?0o$rGe_I|p@<2{`wUX^%S=BbKQ~psurebf zL*FGewIC-ou_!MyFI_({tu!yWBr`v+SU<2NzbH9FKR!M)FS8^*Uaz3?7l%!5eoARh Ys$CH)&=^J_E(S3^GBYwV7BK@^09INhNB{r; literal 0 HcmV?d00001 diff --git a/SVM b/SVM new file mode 160000 index 0000000..3aec5f2 --- /dev/null +++ b/SVM @@ -0,0 +1 @@ +Subproject commit 3aec5f294e817679e61b0833d4f750b9f118cfbc diff --git a/catplus b/catplus new file mode 100755 index 0000000..5ba5acc --- /dev/null +++ b/catplus @@ -0,0 +1,49 @@ +#!/bin/bash + +# 输出的Markdown文件名 +output_file="python_files_output.md" + +# 清空或创建输出文件 +> "$output_file" + +# 递归函数来处理目录 +process_directory() { + local dir="$1" + local depth="$2" + + # 添加目录作为标题 + echo "$(printf '%0.s#' $(seq 1 $depth)) ${dir##*/}" >> "$output_file" + echo "" >> "$output_file" + + # 遍历当前目录中的所有.py文件 + for file in "$dir"/*.py; do + # 检查文件是否存在(以防止没有.py文件的情况) + if [ -f "$file" ]; then + # 将文件名作为子标题写入md文件 + echo "$(printf '%0.s#' $(seq 1 $((depth + 1)))) ${file##*/}" >> "$output_file" + echo "" >> "$output_file" + + # 添加代码块开始标记 + echo '```python' >> "$output_file" + + # 将Python文件内容添加到md文件 + cat "$file" >> "$output_file" + + # 添加代码块结束标记 + echo '```' >> "$output_file" + echo "" >> "$output_file" + fi + done + + # 递归处理子目录 + for subdir in "$dir"/*/; do + if [ -d "$subdir" ]; then + process_directory "$subdir" $((depth + 1)) + fi + done +} + +# 从当前目录开始处理 +process_directory "." 1 + +echo "Markdown文件已生成: $output_file" diff --git a/main.py b/main.py new file mode 100644 index 0000000..bcfdbb2 --- /dev/null +++ b/main.py @@ -0,0 +1,189 @@ +# frofrom Qtorch.Functions import dLoader +from Qtorch.Models.Qmlp import Qmlp +from Qfunctions.divSet import divSet +from Qfunctions.loaData import load_data as dLoader +from sklearn.decomposition import PCA + +import torch + +def main(): + projet_name = '20241005Sound' + label_names =["Accuracy", "Compress", "Distance", "Loss", "Metal", "Python"] + data = dLoader(projet_name, label_names, isDir=False) + X_train, X_test, y_train, y_test, encoder = divSet( + data=data, labels=label_names, test_size= 0.5 + ) + + print(y_train) + + import pandas as pd + pca = PCA(n_components=2) # 保留两个主成分 + principalComponents = pca.fit_transform(X_train) + df_pca2d = pd.DataFrame(data=principalComponents, columns=['PC1', 'PC2']) + df_pca2d['labels'] = y_train + + pca = PCA(n_components=3) # 保留三个主成分 + principalComponents = pca.fit_transform(X_train) + df_pca3d = pd.DataFrame(data=principalComponents, columns=['PC1', 'PC2', 'PC3']) + df_pca3d['labels'] = y_train + + # 保存为CSV文件 + import os + folder = os.path.join("./Result", projet_name) + df_pca2d.to_excel(os.path.join(folder, 'pca_2d_points_with_labels.xlsx'), index=False) + df_pca3d.to_excel(os.path.join(folder, 'pca_3d_points_with_labels.xlsx'), index=False) + + + + # model = Qmlp( + # X_train=X_train, X_test=X_test, y_train=y_train, y_test= y_test, + # hidden_layers=[32, 32, 32], + # dropout_rate=0 + # ) + # model.fit(100) + + # cm = model.get_cm() + # epoch_data = model.get_epoch_data() + + # from Qfunctions.saveToxlsx import save_to_xlsx as stx + # stx(project_name=projet_name, file_name="cm", data=cm) + # stx(project_name=projet_name, file_name="acc_and_loss", data=epoch_data) + # print("Done") + +if __name__ == '__main__': + main() + + + + +# from sklearn.model_selection import train_test_split +# from sklearn.preprocessing import StandardScaler +# from sklearn.svm import SVC +# from sklearn.model_selection import GridSearchCV +# from sklearn.metrics import accuracy_score, classification_report, confusion_matrix +# import pandas as pd + +# if __name__ == '__main__': + +# project_name = '20240829Letters' +# labels = None + +# data = ld(project_name, labels) + + + + + # svm = SVM( + # data=data, + # labels=labels + # ) + + # svm.fit() + + # X, y = data.iloc[:, :-1], data.iloc[:, -1] + + # # 分割数据 + # X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=None) + + # # 标准化数据 + # scaler = StandardScaler() + # X_train_scaled = scaler.fit_transform(X_train) + # X_test_scaled = scaler.transform(X_test) + + # # 创建 SVM 分类器 + # svm = SVC(kernel='rbf', random_state=42) + + # # 定义参数网格 + # param_grid = { + # 'C': [0.1, 1, 10, 100], + # 'gamma': ['scale', 'auto', 0.1, 1, 10] + # } + + # # 使用网格搜索进行超参数调优 + # grid_search = GridSearchCV(svm, param_grid, cv=5, n_jobs=-1, verbose=2) + # grid_search.fit(X_train_scaled, y_train) + + # # 打印最佳参数 + # print("Best parameters:", grid_search.best_params_) + + # # 使用最佳参数的模型 + # best_svm = grid_search.best_estimator_ + + # # 计算训练集和测试集准确率 + # y_train_pred = best_svm.predict(X_train_scaled) + # train_acc = accuracy_score(y_train, y_train_pred) + + # y_test_pred = best_svm.predict(X_test_scaled) + # test_acc = accuracy_score(y_test, y_test_pred) + + # # 在测试集上进行预测 + # y_pred = best_svm.predict(X_test_scaled) + + # # 计算准确率 + # accuracy = accuracy_score(y_test, y_pred) + # print(f"Accuracy: {accuracy}") + + # # 打印详细的分类报告 + # print(classification_report(y_test, y_pred)) + # # 计算并可视化混淆矩阵 + # cm = confusion_matrix(y_test, y_test_pred, normalize='true') + + # print(cm) + # # model = QSVM( + # # data=data, + # # labels=labels + # # ) + + # # model.fit(300) + # # model.save(project_name) + + + # # 创建一个 Excel 写入器 + # # 将分类报告转换为DataFrame + # # 获取分类报告 + + # report = classification_report(y_test, y_test_pred, output_dict=True) + + # df_report = pd.DataFrame(report).transpose() + # with pd.ExcelWriter(f'./Result/{project_name}/svm_results.xlsx') as writer: + # from sklearn.decomposition import PCA + # pca = PCA() + # X_pca = pca.fit_transform(X) + # # 创建 2D PCA 坐标的 DataFrame + # df_pca_2d = pd.DataFrame(data = X_pca[:, :2], columns = ['First Principal Component', 'Second Principal Component']) + # df_pca_2d['Label'] = y + # # 创建 3D PCA 坐标的 DataFrame + # df_pca_3d = pd.DataFrame(data = X_pca[:, :3], columns = ['First Principal Component', 'Second Principal Component', 'Third Principal Component']) + # df_pca_3d['Label'] = y + + # # 将 2D PCA 坐标写入 Excel + # df_pca_2d.to_excel(writer, sheet_name='PCA 2D Coordinates', index=False) + # df_pca_3d.to_excel(writer, sheet_name='PCA 3D Coordinates', index=False) + + + # # 将分类报告写入Excel + # df_report.to_excel(writer, sheet_name='Classification Report') + + # # 将最佳参数写入Excel + # pd.DataFrame([grid_search.best_params_]).to_excel(writer, sheet_name='Best Parameters') + + # # 如果你想保存混淆矩阵 + # from sklearn.metrics import confusion_matrix + # # 创建混淆矩阵并添加标签 + # cm = confusion_matrix(y_test, y_test_pred, normalize='true') + # df_cm = pd.DataFrame(cm, index=labels, columns=labels) + # df_cm.index.name = 'True' + # df_cm.columns.name = 'Predicted' + + # # 将混淆矩阵写入Excel + # df_cm.to_excel(writer, sheet_name='Confusion Matrix') + + # # 如果你想保存训练集和测试集的准确率 + # train_accuracy = best_svm.score(X_train_scaled, y_train) + # test_accuracy = best_svm.score(X_test_scaled, y_test) + # pd.DataFrame({ + # 'Train Accuracy': [train_accuracy], + # 'Test Accuracy': [test_accuracy] + # }).to_excel(writer, sheet_name='Accuracy') + + # print("Results have been saved to 'svm_results.xlsx'") \ No newline at end of file diff --git a/remake/.vscode/launch.json b/remake/.vscode/launch.json new file mode 100644 index 0000000..14b7790 --- /dev/null +++ b/remake/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python Debugger: Current File", + "type": "debugpy", + "request": "launch", + "program": "main.py", + "console": "integratedTerminal" + } + ] +} \ No newline at end of file diff --git a/remake/Qtorch/Functions/__init__.py b/remake/Qtorch/Functions/__init__.py new file mode 100644 index 0000000..e2eb142 --- /dev/null +++ b/remake/Qtorch/Functions/__init__.py @@ -0,0 +1,5 @@ +from .dataLoader import dLoader +from .dataSplitter import dsplit +from .resSaver import save_to_xlsx + +__all__ = ['dLoader', 'dsplit', 'save_to_xlsx'] \ No newline at end of file diff --git a/remake/Qtorch/Functions/__pycache__/__init__.cpython-312.pyc b/remake/Qtorch/Functions/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3412e26aec5c2efe49b931ede117299d5170ec21 GIT binary patch literal 331 zcmXw!zfQw25XS8|f2z<-JOGF-3+4eTCd7o0P`50WRhuTlj)U!@X5E;k*N7s-s#+7314ecNV?Ps($TGIQzu4{TBWv3*! zZPPBPm73p4dgF~<)bw)IE_`EJM;U9{#xr)>_4~<88?jRI+!hcPKI0BSz6r*7gN`=n Pc!N$pbNZOs1DO8+7cE!Y literal 0 HcmV?d00001 diff --git a/remake/Qtorch/Functions/__pycache__/dataLoader.cpython-312.pyc b/remake/Qtorch/Functions/__pycache__/dataLoader.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..257c78dbbd48d032c706e48c96118539915cd25f GIT binary patch literal 4540 zcmbW4U2GKB6@cf?%>LWnU}NmoI1EX_UZ8d;KMA(u%HS9$IEG@UPzSmmc4qByW@nc> zZPTHz8OI!OYH-dDwXsJsV{ccfHmO(seK496~#ORo_g+`ncXq9 z(w~v`-n;jnd+zV~&bfarFAp>DWv(tJ{{f}Hkw5OoI)#cLrElDt)xBxKMsB?FAy2Q zAa(Q`@k+UMKBwTx48QxwWNtcrvaA8x>~AFKmP)zF-gMeKnTuS49byvf$qfvXPnfc$ro4Q z8)CA4V_mV0cW2Sboa|(n6R_HBAR9EQT#5gE_h7uBJD!Qm0GXHRyGc$2zHG?!k5t=b zZ)%3znIPsu7ta_qZtF;`TPo$IU*d21+)?^quMzyR+?b~n^NZWyNWubqJ!w%AB+(Fs zBu=Mn>l8{WRl8l>ZFPe1VA-#o`>?Wa6H*l;)=oM44 zkWLE5u}q3yrFx8=&HF#!%9ls0!pi(M5#>D%2#r zn-sLPA!Km+V?~ms9dy2SqcEnZs&GmcMs->8%=M^jjAG51ZbsB3QE%#mRd-<+w}tKk zED`F7)`YA>Z@MeCib-G7xT=r8Kuwrj`u-cpDpQ8EG?wFvCduQma*Ivt7M~G~VT&J0 zE1DJQ>+k4)_dxteM}M~!Aj^;xYz1Xa(#I5#^642>F|6p2Y{XOIcpRt4;;O7!Az2$u z$yhXGE2P5N#L2*xU(95ntHov{%MY8G5RF*a^4t4vMLb(*MeNEroeN4@VRD%E_F5I5 zk%nLrWumIald=eVBkLAYtWZ(d3cB?=Ar`qR_V=Q_c{rVtn@>*+4-YqY%5p}PMNE#i z8Otg0Bf0r|Mj9uEo4ZD}1UW^$nOrY&&*1iCCai#Dm+>ahOL(GNkmQ(W-(;$)XB%c3 zW_Qf&xcZ~Hu0rLm+@Xi{o30I98JLR{>UZB?*ON!L(VxSA4BvV4-dl%$zIkC?PwqWP z{^@7RYL?${dTVRQB`%W z=V9&U>)Q&o-+s!lzOB<`Q)p`6!>Wx}k6t@=<=C|oS5C}rpPwkycid^cd-}8Xg+8%R zb!sZO99;h(ShpCg%Xi-kZh7K^uFrx@S;fVD)B7%+nCF)wdlvXT&!5&YmG7hHPlHTN zn@*VWrws>o@t;-kB;8bZ;4MDEL#_LfU7%d<2eUlSp67tgC8n;yW}vUrp5;w`#H-8E zDItkH$4Z>UO8hx4$r9FNeWq`O_<)x_$#=`|>O(-JkegkP*P4 zlc9kMI?&JoG}y5k$D^PzxwS7KuyZ!FI!nO}`%nH;oFfI=# zq+33UWGmo6G#0{@&}@aV3`m!WleKsSbX$J1TurnhKwxkM)SXzU-|_+R)d|aoMQup7 z0*SObn$q-G0B@vvO2nrt!7)FX zU96w3zcf(@ZO-jqj;^~nHa&Lf^bF4L%hA^#GL?%%>E$f3DkF`!+B8VH#oyfYzC{-_aFy3S-qyf?_{bJNMQoK_989F=_q zWW9R-P1Yy|!z0BI*b#!v0{PrR&p3Is?Lu#Bd&mn}(Kb>d=OL1+bfhZ;k@lCo2Nsf6^%T!k7-dhet zrbd5~U9PU3JvMXf@(-rN%c1g18-DgGsX0D#{PMt5_+jPx+1N}hKalU4>-t0A?W*4& zU)=Hb;>Pwu<#!>biImfLA(3xgsBV~-mLjbSd@J4#qpW(a5w}im<;o67&XWgQ@jg#6 zNhG1OK@)W{?u~ZuSRWH(Cs*i=IVc;{$AB}TZi8F~=TOB2PV2e=5uk_APSF2fhx%T> z=R5+wF4TwnCa(_kdz|>b88sV(5GAP_^;$YZSXC742QEJ!!T^4mnS_ls;aeNEUdj@m96RL(;cE@`OVOeZhpjV5%Nf)aD{9d>z`m(o%!guY9KxwXHNpkcg<7e*tFL BRP_J= literal 0 HcmV?d00001 diff --git a/remake/Qtorch/Functions/__pycache__/dataSplitter.cpython-312.pyc b/remake/Qtorch/Functions/__pycache__/dataSplitter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e7e8305741fba9f4bdfea8b23eb0fffd6de4530 GIT binary patch literal 1717 zcmbVM-D@0G6rb6ho&Cy8Yd_F6rnxEBX0hyIi4CNs8mI|^L`|TUAg+_0yV*%+XVyD+ z11mGIf`tZ^F20!fVtld^|A6`*D86J^VZ#M6U@7!XNT2$m=ib@bM2J3kVD3Hlp5Hn5 zoO6G7e$lj?1oFjJSo=|tq(Ar~mc&3gm;~i3$&^glmKyT1EOR|!CmPA+WJ6h2V4X6R zPvzxQJ6Tj8bGM?*PEul6PK9ERR=lQd(PDz>OVn^ogP2QI!^VV-yk)Fl`wge+nwTt9 zA%mf)pe5lucqH@FDU6Zq4CX-brL{Q6*a)*JoAR9mjEOsmTA~0uLFzw|F-rC2Pfq#D zTIxu!f$GaUgY$#5a~d$|V=!urfquwAnr35+pYl~d;U|Ac?hGn?ALbwvWP@Cgr}-E+ ztZc*|IW~(-d_s@`gckc9&VF`?$U>IKA#!W_AwJgDo{6=?InHJnG50SK^Zz?y-p}}1 zKj-KDbS~+_%9H6quF7BY~*Ni#Vp}3gDIBnR+(0_D39uRkY9r(VM+LNC7j_9V`x#=4ZDRs zmLkSFwu>55_^mKCI+|p-4}U2v9VJDWe2d9#rvEcXmL62a)Tk~9?y4%3zkJ|Nmy?g^>=#oJkpiY_KhH)F0-=!|8*2{A(r^;{9EAt!$1t}(_ zW}B&|xH9qr#O4)xk6`FXPo9@fjDF^H=Jzur_p%$=FDJT7-4*y=3NwYy?A~y9v3nuR zJlC1sPiwpB!d?OO3#G77y1(8lT-ng~GbirlH}c)t&-J~+*j@eM#pws~gI9ja?tWub&U~^V`!s{pHU5o_4ygjfL9SX04}P=*;cw zXZ!kisE==_ztg|f`)DdeQ$2L0r%!Y6nZ9-|)Xr_Le-ms4{qf7;_~qXCR8M;qJoBfz zbDQ(qH}8M2o4>lNTs?qFrDAen_3JGzKfkt6RN1rMZPCM01OD80#ltohof8~jXJczq z5Vwjw51K8gAvh%3_`O8NATk++;c4a?1Zvs%I+=ha|JQmaVfZsC%kpp1)bG;uC(49; HO?dnbU?I2G literal 0 HcmV?d00001 diff --git a/remake/Qtorch/Functions/__pycache__/resSaver.cpython-312.pyc b/remake/Qtorch/Functions/__pycache__/resSaver.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55919bb1d0770c7d6245af7a5954f1143c7fb0a5 GIT binary patch literal 843 zcmZ`%&1(}u6rb4-lhhPzJQYFa)+|W&U<+D`Ak>1C1pGMl5|*7wciYYGc4k(R7$F6r z7s1|IDTN#>_0a#rOB4%b_2#KJA)b12-ge^`_+Z|=kKg;fHyBsTw{JeS&M`vY zz?q1a8{>*H_7FuB2WSmZ?G;+XU2N&+0BE>+j)Toq3;gkGrS_0ioR_jOVVeZhPH`U{ zphJyn@Acz6kMk%s`uG4*^U!>$_q7e+{YUz`s=M;LP8KErTIlP*dz^R2s9Us3y-!m_ z$y4V!Bh--&kr8o1^04EwfVBL8)v|o19`JRsm{~E8Hkd1$q0?rhDkQfSNdxStMWn|_ zo+s5rFiKhxS1X{56DY7QDS`aI1dxPLgqrITo()%xosc@BwyY*y;lQ;>!2TQBD?DK$ z38ekZ!fBCpd?B0B<^{HUW~~#5j*6OoNLi;kwNkw6Y(|h`XM>l7z1Gqfn^0fcN3GxSN(?*rpl;4#H;?DSRwZS89NMRFGNN zS>0aUo!h^?e`_>TJ()i>?w(a&1(};5TCbS-F&Q-S}H9Sss~{&23mU)^-vH&1Et_0m&clYX;L?v^t}x>A%`9c zR9%0Cidgtko?}8$-Mda&5)0dlLeHG*E^L- z4d6Q|12OxT-etUOf)73mpbjNqpusKhwKec{0o!`&S7L3$HGeSFTo&u|VOZ`5NRGZ2 z^rlgLgz*HFm=7h*H`k%Ue72S;=@heM_&TEL8;I6AtgzD10=QOe%rD%#TOL$JK`s1J z++K+AoNYpcXDShPlS&shasXY{)w+7u*fvrtgDx!5`%|)%Ib}cFt6BE=w4a_czH7#&YBhzFRAp>)UJGjx=dmS)Y6VejwVJ*c32H`(pb{IXd9f9E z_eG%MOe9pqRjni9y!1l9QRgZ`_c+6OIq;O?Tv5qWB&&zBg=(WN3d`+kwOW`Hq8SKJ zhP809AVuAKAPVzQLzb(Bdc())1!C_?vn^@h9VgKS^${m(7U5tOzSzza|JmG*ed*2B zw`1?d-{1LU-`=(JPjioRpY4eqdt!HtKEF(TGP@6YCfCDQkJqX|%UsLM*RsaA1 literal 0 HcmV?d00001 diff --git a/remake/Qtorch/models/__pycache__/Qnn.cpython-312.pyc b/remake/Qtorch/models/__pycache__/Qnn.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46cccbad36e91655f19f39914dd4cca2f0589183 GIT binary patch literal 3855 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 literal 0 HcmV?d00001 diff --git a/remake/Qtorch/models/__pycache__/__init__.cpython-312.pyc b/remake/Qtorch/models/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8dbabf71b1e6e17ebd4ac25e2cb1c669dfeeed4 GIT binary patch literal 215 zcmX@j%ge<81e>Q{Ofv)0k3k$5V1hC}ivbza8B!Qh7;_kM8KM{%8B&~NwL8kq()X&JzP1P@~%*e>l zcS%hx$Vp8s%FE14*Dp%VP0UW!4=l+qO3u*F%}+_qDb|mV&&