From 0667dd90d1c0d6e6ff19b30e7878bf1cec800178 Mon Sep 17 00:00:00 2001 From: newbie Date: Tue, 24 Jun 2025 23:31:19 +0800 Subject: [PATCH] Add confusion matrix attributes to Qnn model; remove unused test.py file; comment out QCNN model instantiation in main.py --- Qtorch/Models/Qnn.py | 5 +- Scripts/test.py | 110 ------------------------------------------- main.py | 2 +- 3 files changed, 5 insertions(+), 112 deletions(-) delete mode 100644 Scripts/test.py diff --git a/Qtorch/Models/Qnn.py b/Qtorch/Models/Qnn.py index ddb3218..ca646be 100644 --- a/Qtorch/Models/Qnn.py +++ b/Qtorch/Models/Qnn.py @@ -34,6 +34,8 @@ class Qnn(nn.Module): } self.pca_2d, self.pca_3d = None, None + + self.cm, self.cmn = None, None def __prepare_data(self): @@ -139,6 +141,7 @@ class Qnn(nn.Module): print(f"Early stopping at epoch {epoch+1}") break + # cmn为归一化矩阵 self.cm = confusion_matrix(all_labels, all_predicted) self.cmn = confusion_matrix(all_labels, all_predicted, normalize='true') @@ -170,7 +173,7 @@ class Qnn(nn.Module): return pd.DataFrame(self.cm, columns=self.labels, index=self.labels) def get_cmn(self): - return pd.DataFrame(self.cm, columns=self.labels, index=self.labels) + return pd.DataFrame(self.cmn, columns=self.labels, index=self.labels) def get_epoch_data(self): return pd.DataFrame(self.epoch_data) diff --git a/Scripts/test.py b/Scripts/test.py deleted file mode 100644 index 174b196..0000000 --- a/Scripts/test.py +++ /dev/null @@ -1,110 +0,0 @@ -from graphviz import Digraph -import os - - -class layer: - def __init__(self, graph, name, size, color): - self.name = name - self.size = size - self.color = color - self.graph = graph - - def draw(): - pass - -class input_layer(layer): - def __init__(self, graph, size): - super().__init__(graph, f"Input Layer({size})", size) - self.graph.node(self.name, shape='circle', style='filled', fillcolor=self.color, label=" ") - self.graph.attr(label=f'{self.name} Layer({self.size})', fontname='Times New Roman', fontweight='bold', fontsize='36') - - -def draw_neural_net(input_size, hidden_sizes, num_classes, show_hidden=3): - g = Digraph('G', filename='neural_network', format='png') - g.attr(rankdir='LR', size='10,8', nodesep='1', ranksep='2', bgcolor='transparent', dpi='300') - - # Input layer - with g.subgraph(name='cluster_input') as c: - c.attr(color='white') - for i in range(input_size): - c.node(f'input_{i}', shape='circle', style='filled', fillcolor='darkorange:orange', label=" ") - c.attr(label=f'Input Layer({input_size})', fontname='Times New Roman', fontweight='bold', fontsize='36') - - # Hidden layers - previous_layer = 'input' - previous_layer_size = input_size - for layer_idx, hidden_size in enumerate(hidden_sizes): - with g.subgraph(name=f'cluster_hidden_{layer_idx}') as c: - c.attr(color='white') - for i in range(show_hidden): - c.node(f'hidden_{layer_idx}_{i}', shape='circle', style='filled', fillcolor='darkgreen:lightgreen', label=" ") - if hidden_size > show_hidden * 2: - c.node(f'ellipsis_{layer_idx}', shape='plaintext', label='...') - for i in range(hidden_size - show_hidden, hidden_size): - c.node(f'hidden_{layer_idx}_{i}', shape='circle', style='filled', fillcolor='darkgreen:lightgreen', label=" ") - c.attr(label=f'Hidden Layer {layer_idx + 1}({hidden_size})', fontname='Times New Roman', fontweight='bold', fontsize='36') - - # Add edges from previous layer to current hidden layer - if layer_idx == 0: # Only connect input layer to first hidden layer - for i in range(previous_layer_size): - for j in range(show_hidden): - g.edge(f'{previous_layer}_{i}', f'hidden_{layer_idx}_{j}') - for j in range(hidden_size - show_hidden, hidden_size): - g.edge(f'{previous_layer}_{i}', f'hidden_{layer_idx}_{j}') - else: - for i in range(show_hidden): - for j in range(show_hidden): - g.edge(f'hidden_{layer_idx - 1}_{i}', f'hidden_{layer_idx}_{j}') - for j in range(hidden_size - show_hidden, hidden_size): - g.edge(f'hidden_{layer_idx - 1}_{i}', f'hidden_{layer_idx}_{j}') - for i in range(hidden_size - show_hidden, hidden_size): - for j in range(show_hidden): - g.edge(f'hidden_{layer_idx - 1}_{i}', f'hidden_{layer_idx}_{j}') - for j in range(hidden_size - show_hidden, hidden_size): - g.edge(f'hidden_{layer_idx - 1}_{i}', f'hidden_{layer_idx}_{j}') - - previous_layer = f'hidden_{layer_idx}' - previous_layer_size = hidden_size - - # Output layer - with g.subgraph(name='cluster_output') as c: - c.attr(color='white') - for i in range(num_classes): - c.node(f'output_{i}', shape='circle', style='filled', fillcolor='darkorange:orange', label=" ") - c.attr(label=f'Output Layer({num_classes})', fontname='Times New Roman', fontweight='bold', fontsize='36') - - # Add edges from last hidden layer to output layer - # for i in range(previous_layer_size): - # for j in range(num_classes): - # g.edge(f'{previous_layer}_{i}', f'output_{j}') - # # Add edges - # # Add edges from input to visible hidden nodes - # for i in range(input_size): - # for j in range(show_hidden): - # g.edge(f'input_{i}', f'hidden_{j}') - # for i in range(input_size): - # for j in range(hidden_size - show_hidden, hidden_size): - # g.edge(f'input_{i}', f'hidden_{j}') - - # # Add edges from visible hidden nodes to output layer - # for i in range(show_hidden): - # for j in range(num_classes): - # g.edge(f'hidden_{i}', f'output_{j}') - # for i in range(hidden_size - show_hidden, hidden_size): - # for j in range(num_classes): - # g.edge(f'hidden_{i}', f'output_{j}') - # Add edges from last hidden layer to output layer - for i in range(show_hidden): - for j in range(num_classes): - g.edge(f'{previous_layer}_{i}', f'output_{j}') - for i in range(previous_layer_size - show_hidden, previous_layer_size): - for j in range(num_classes): - g.edge(f'{previous_layer}_{i}', f'output_{j}') - - return g - -if __name__ == '__main__': - g = draw_neural_net(7, [60, 60], 7) - output_path = g.render(view=False) - print(output_path) - os.system(f'explorer.exe neural_network.png') \ No newline at end of file diff --git a/main.py b/main.py index d2f256c..f426171 100644 --- a/main.py +++ b/main.py @@ -20,7 +20,7 @@ def main(): dropout_rate=0 ) - # model = QCNN( + # model = QCNN # X_train=X_train, X_test=X_test, y_train=y_train, y_test= y_test, # dropout_rate=0 # )