add the results
This commit is contained in:
@@ -70,7 +70,7 @@ class DataModule(AbstractDataModule):
|
||||
# base_path = pathlib.Path(os.path.realpath(__file__)).parents[2]
|
||||
# except NameError:
|
||||
# base_path = pathlib.Path(os.getcwd()).parent[2]
|
||||
base_path = '/home/stud/hanzhang/nasbenchDiT'
|
||||
base_path = '/nfs/data3/hanzhang/nasbenchDiT'
|
||||
root_path = os.path.join(base_path, self.datadir)
|
||||
self.root_path = root_path
|
||||
|
||||
@@ -408,6 +408,7 @@ def new_graphs_to_json(graphs, filename):
|
||||
adj = graph[0]
|
||||
|
||||
n_node = len(ops)
|
||||
print(n_node)
|
||||
n_edge = len(ops)
|
||||
n_node_list.append(n_node)
|
||||
n_edge_list.append(n_edge)
|
||||
@@ -489,7 +490,7 @@ def new_graphs_to_json(graphs, filename):
|
||||
'transition_E': transition_E.tolist(),
|
||||
}
|
||||
|
||||
with open(f'/home/stud/hanzhang/nasbenchDiT/graph_dit/nasbench-201-meta.json', 'w') as f:
|
||||
with open(f'/nfs/data3/hanzhang/nasbenchDiT/graph_dit/nasbench-201-meta.json', 'w') as f:
|
||||
json.dump(meta_dict, f)
|
||||
|
||||
return meta_dict
|
||||
@@ -655,7 +656,7 @@ def graphs_to_json(graphs, filename):
|
||||
class Dataset(InMemoryDataset):
|
||||
def __init__(self, source, root, target_prop=None, transform=None, pre_transform=None, pre_filter=None):
|
||||
self.target_prop = target_prop
|
||||
source = '/home/stud/hanzhang/nasbenchDiT/graph_dit/NAS-Bench-201-v1_1-096897.pth'
|
||||
source = '/nfs/data3/hanzhang/nasbenchDiT/graph_dit/NAS-Bench-201-v1_1-096897.pth'
|
||||
self.source = source
|
||||
# self.api = API(source) # Initialize NAS-Bench-201 API
|
||||
# print('API loaded')
|
||||
@@ -676,8 +677,8 @@ class Dataset(InMemoryDataset):
|
||||
return [f'{self.source}.pt']
|
||||
|
||||
def process(self):
|
||||
source = '/home/stud/hanzhang/nasbenchDiT/graph_dit/NAS-Bench-201-v1_1-096897.pth'
|
||||
self.api = API(source)
|
||||
source = '/nfs/data3/hanzhang/nasbenchDiT/graph_dit/NAS-Bench-201-v1_1-096897.pth'
|
||||
# self.api = API(source)
|
||||
|
||||
data_list = []
|
||||
# len_data = len(self.api)
|
||||
@@ -710,14 +711,24 @@ class Dataset(InMemoryDataset):
|
||||
return True
|
||||
|
||||
def generate_flex_adj_mat(ori_nodes, ori_edges, max_nodes=12, min_nodes=8,random_ratio=0.5):
|
||||
# print(ori_nodes)
|
||||
# print(ori_edges)
|
||||
|
||||
ori_edges = np.array(ori_edges)
|
||||
# ori_nodes = np.array(ori_nodes)
|
||||
nasbench_201_node_num = 8
|
||||
# random.seed(random_seed)
|
||||
nodes_num = random.randint(min_nodes, max_nodes)
|
||||
# print(f'arch_str: {arch_str}, \nmax_nodes: {max_nodes}, min_nodes: {min_nodes}, nodes_num: {nodes_num},random_seed: {random_seed},random_ratio: {random_ratio}')
|
||||
add_num = nodes_num - nasbench_201_node_num
|
||||
# ori_nodes, ori_edges = parse_architecture_string(arch_str)
|
||||
add_nodes = [op for op in random.choices(num_to_op[1:-1], k=add_num)]
|
||||
add_nodes = []
|
||||
print(f'add_num: {add_num}')
|
||||
for i in range(add_num):
|
||||
add_nodes.append(random.choice(num_to_op[1:-1]))
|
||||
# print(add_nodes)
|
||||
print(f'ori_nodes[:-1]: {ori_nodes[:-1]}, add_nodes: {add_nodes}')
|
||||
print(f'len(ori_nodes[:-1]): {len(ori_nodes[:-1])}, len(add_nodes): {len(add_nodes)}')
|
||||
nodes = ori_nodes[:-1] + add_nodes + ['output']
|
||||
edges = np.zeros((nodes_num , nodes_num))
|
||||
edges[:6, :6] = ori_edges[:6, :6]
|
||||
@@ -727,12 +738,18 @@ class Dataset(InMemoryDataset):
|
||||
rand = random.random()
|
||||
if rand < random_ratio:
|
||||
edges[i, j] = 1
|
||||
return nodes, edges
|
||||
if nodes_num < max_nodes:
|
||||
edges = np.pad(edges, ((0, max_nodes - nodes_num), (0, max_nodes - nodes_num)), 'constant',constant_values=0)
|
||||
while len(nodes) < max_nodes:
|
||||
nodes.append('none')
|
||||
print(f'edges size: {edges.shape}, nodes size: {len(nodes)}')
|
||||
return edges,nodes
|
||||
|
||||
def get_nasbench_201_val(idx):
|
||||
pass
|
||||
|
||||
def graph_to_graph_data(graph, idx):
|
||||
# def graph_to_graph_data(graph, idx):
|
||||
def graph_to_graph_data(graph):
|
||||
ops = graph[1]
|
||||
adj = graph[0]
|
||||
nodes = []
|
||||
@@ -753,58 +770,95 @@ class Dataset(InMemoryDataset):
|
||||
edge_index = torch.tensor(edges_list, dtype=torch.long).t()
|
||||
edge_type = torch.tensor(edge_type, dtype=torch.long)
|
||||
edge_attr = edge_type
|
||||
# y = torch.tensor([0, 0], dtype=torch.float).view(1, -1)
|
||||
y = get_nasbench_201_val(idx)
|
||||
y = torch.tensor([0, 0], dtype=torch.float).view(1, -1)
|
||||
# y = get_nasbench_201_val(idx)
|
||||
data = Data(x=x, edge_index=edge_index, edge_attr=edge_attr, y=y, idx=i)
|
||||
return data
|
||||
graph_list = []
|
||||
|
||||
with tqdm(total = len_data) as pbar:
|
||||
active_nodes = set()
|
||||
for i in range(len_data):
|
||||
arch_info = self.api.query_meta_info_by_index(i)
|
||||
results = self.api.query_by_index(i, 'cifar100')
|
||||
file_path = '/nfs/data3/hanzhang/nasbenchDiT/graph_dit/nasbench-201-graph.json'
|
||||
with open(file_path, 'r') as f:
|
||||
graph_list = json.load(f)
|
||||
i = 0
|
||||
flex_graph_list = []
|
||||
flex_graph_path = '/nfs/data3/hanzhang/nasbenchDiT/graph_dit/flex-nasbench201-graph.json'
|
||||
for graph in graph_list:
|
||||
# arch_info = self.api.query_meta_info_by_index(i)
|
||||
# results = self.api.query_by_index(i, 'cifar100')
|
||||
arch_info = graph['arch_str']
|
||||
# results =
|
||||
# nodes, edges = parse_architecture_string(arch_info.arch_str)
|
||||
ops, adj_matrix = parse_architecture_string(arch_info.arch_str)
|
||||
# ops, adj_matrix = parse_architecture_string(arch_info.arch_str, padding=4)
|
||||
ops, adj_matrix, ori_nodes, ori_adj = parse_architecture_string(arch_info, padding=4)
|
||||
# adj_matrix, ops = create_adj_matrix_and_ops(nodes, edges)
|
||||
for op in ops:
|
||||
if op not in active_nodes:
|
||||
active_nodes.add(op)
|
||||
|
||||
graph_list.append({
|
||||
"adj_matrix": adj_matrix,
|
||||
"ops": ops,
|
||||
"idx": i,
|
||||
"train": [{
|
||||
"iepoch": result.get_train()['iepoch'],
|
||||
"loss": result.get_train()['loss'],
|
||||
"accuracy": result.get_train()['accuracy'],
|
||||
"cur_time": result.get_train()['cur_time'],
|
||||
"all_time": result.get_train()['all_time'],
|
||||
"seed": seed,
|
||||
}for seed, result in results.items()],
|
||||
"valid": [{
|
||||
"iepoch": result.get_eval('x-valid')['iepoch'],
|
||||
"loss": result.get_eval('x-valid')['loss'],
|
||||
"accuracy": result.get_eval('x-valid')['accuracy'],
|
||||
"cur_time": result.get_eval('x-valid')['cur_time'],
|
||||
"all_time": result.get_eval('x-valid')['all_time'],
|
||||
"seed": seed,
|
||||
}for seed, result in results.items()],
|
||||
"test": [{
|
||||
"iepoch": result.get_eval('x-test')['iepoch'],
|
||||
"loss": result.get_eval('x-test')['loss'],
|
||||
"accuracy": result.get_eval('x-test')['accuracy'],
|
||||
"cur_time": result.get_eval('x-test')['cur_time'],
|
||||
"all_time": result.get_eval('x-test')['all_time'],
|
||||
"seed": seed,
|
||||
}for seed, result in results.items()]
|
||||
})
|
||||
data = graph_to_graph_data((adj_matrix, ops))
|
||||
# with open(flex_graph_path, 'a') as f:
|
||||
# flex_graph = {
|
||||
# 'adj_matrix': adj_matrix,
|
||||
# 'ops': ops,
|
||||
# }
|
||||
# json.dump(flex_graph, f)
|
||||
flex_graph_list.append({
|
||||
'adj_matrix':adj_matrix,
|
||||
'ops': ops,
|
||||
})
|
||||
if i < 3:
|
||||
print(f"i={i}, data={data}")
|
||||
with open(f'{i}.json', 'w') as f:
|
||||
f.write(str(data.x))
|
||||
f.write(str(data.edge_index))
|
||||
f.write(str(data.edge_attr))
|
||||
data_list.append(data)
|
||||
|
||||
# new_adj, new_ops = generate_flex_adj_mat(ori_nodes=ops, ori_edges=adj_matrix, max_nodes=12, min_nodes=8, random_ratio=0.5)
|
||||
# data_list.append(graph_to_graph_data((new_adj, new_ops)))
|
||||
new_adj, new_ops = generate_flex_adj_mat(ori_nodes=ori_nodes, ori_edges=ori_adj, max_nodes=12, min_nodes=9, random_ratio=0.5)
|
||||
flex_graph_list.append({
|
||||
'adj_matrix':new_adj.tolist(),
|
||||
'ops': new_ops,
|
||||
})
|
||||
# with open(flex_graph_path, 'w') as f:
|
||||
# flex_graph = {
|
||||
# 'adj_matrix': new_adj.tolist(),
|
||||
# 'ops': new_ops,
|
||||
# }
|
||||
# json.dump(flex_graph, f)
|
||||
data_list.append(graph_to_graph_data((new_adj, new_ops)))
|
||||
|
||||
# graph_list.append({
|
||||
# "adj_matrix": adj_matrix,
|
||||
# "ops": ops,
|
||||
# "arch_str": arch_info.arch_str,
|
||||
# "idx": i,
|
||||
# "train": [{
|
||||
# "iepoch": result.get_train()['iepoch'],
|
||||
# "loss": result.get_train()['loss'],
|
||||
# "accuracy": result.get_train()['accuracy'],
|
||||
# "cur_time": result.get_train()['cur_time'],
|
||||
# "all_time": result.get_train()['all_time'],
|
||||
# "seed": seed,
|
||||
# }for seed, result in results.items()],
|
||||
# "valid": [{
|
||||
# "iepoch": result.get_eval('x-valid')['iepoch'],
|
||||
# "loss": result.get_eval('x-valid')['loss'],
|
||||
# "accuracy": result.get_eval('x-valid')['accuracy'],
|
||||
# "cur_time": result.get_eval('x-valid')['cur_time'],
|
||||
# "all_time": result.get_eval('x-valid')['all_time'],
|
||||
# "seed": seed,
|
||||
# }for seed, result in results.items()],
|
||||
# "test": [{
|
||||
# "iepoch": result.get_eval('x-test')['iepoch'],
|
||||
# "loss": result.get_eval('x-test')['loss'],
|
||||
# "accuracy": result.get_eval('x-test')['accuracy'],
|
||||
# "cur_time": result.get_eval('x-test')['cur_time'],
|
||||
# "all_time": result.get_eval('x-test')['all_time'],
|
||||
# "seed": seed,
|
||||
# }for seed, result in results.items()]
|
||||
# })
|
||||
pbar.update(1)
|
||||
|
||||
for graph in graph_list:
|
||||
@@ -818,6 +872,8 @@ class Dataset(InMemoryDataset):
|
||||
graph['ops'] = ops
|
||||
with open(f'nasbench-201-graph.json', 'w') as f:
|
||||
json.dump(graph_list, f)
|
||||
with open(flex_graph_path, 'w') as f:
|
||||
json.dump(flex_graph_list, f)
|
||||
|
||||
torch.save(self.collate(data_list), self.processed_paths[0])
|
||||
|
||||
@@ -981,18 +1037,29 @@ class Dataset_origin(InMemoryDataset):
|
||||
|
||||
torch.save(self.collate(data_list), self.processed_paths[0])
|
||||
|
||||
def parse_architecture_string(arch_str):
|
||||
def parse_architecture_string(arch_str, padding=0):
|
||||
# print(arch_str)
|
||||
steps = arch_str.split('+')
|
||||
nodes = ['input'] # Start with input node
|
||||
adj_mat = np.array([[0, 1, 1, 0, 1, 0, 0, 0],
|
||||
ori_adj_mat = [[0, 1, 1, 0, 1, 0, 0, 0],
|
||||
[0, 0, 0, 1, 0, 1 ,0 ,0],
|
||||
[0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0]])
|
||||
# [0, 0, 0, 0, 0, 0, 0, 0]])
|
||||
[0, 0, 0, 0, 0, 0, 0, 0]]
|
||||
# adj_mat = np.array([[0, 1, 1, 0, 1, 0, 0, 0],
|
||||
adj_mat = [[0, 1, 1, 0, 1, 0, 0, 0],
|
||||
[0, 0, 0, 1, 0, 1 ,0 ,0],
|
||||
[0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1],
|
||||
[0, 0, 0, 0, 0, 0, 0, 1],
|
||||
# [0, 0, 0, 0, 0, 0, 0, 0]])
|
||||
[0, 0, 0, 0, 0, 0, 0, 0]]
|
||||
steps = arch_str.split('+')
|
||||
steps_coding = ['0', '0', '1', '0', '1', '2']
|
||||
cont = 0
|
||||
@@ -1004,7 +1071,21 @@ def parse_architecture_string(arch_str):
|
||||
cont += 1
|
||||
nodes.append(n)
|
||||
nodes.append('output') # Add output node
|
||||
return nodes, adj_mat
|
||||
ori_nodes = nodes.copy()
|
||||
if padding > 0:
|
||||
for i in range(padding):
|
||||
nodes.append('none')
|
||||
for adj_row in adj_mat:
|
||||
for i in range(padding):
|
||||
adj_row.append(0)
|
||||
# adj_mat = np.append(adj_mat, np.zeros((padding, len(nodes))))
|
||||
for i in range(padding):
|
||||
adj_mat.append([0] * len(nodes))
|
||||
# print(nodes)
|
||||
# print(adj_mat)
|
||||
# print(len(adj_mat))
|
||||
# print(f'len(ori_nodes): {len(ori_nodes)}, len(nodes): {len(nodes)}')
|
||||
return nodes, adj_mat, ori_nodes, ori_adj_mat
|
||||
|
||||
def create_adj_matrix_and_ops(nodes, edges):
|
||||
num_nodes = len(nodes)
|
||||
@@ -1046,6 +1127,7 @@ class DataInfos(AbstractDatasetInfos):
|
||||
|
||||
adj_ops_pairs = []
|
||||
for item in data:
|
||||
print(item)
|
||||
adj_matrix = np.array(item['adj_matrix'])
|
||||
ops = item['ops']
|
||||
ops = [op_type[op] for op in ops]
|
||||
@@ -1066,12 +1148,12 @@ class DataInfos(AbstractDatasetInfos):
|
||||
# ops_type[op] = len(ops_type)
|
||||
# len_ops.add(len(ops))
|
||||
# graphs.append((adj_matrix, ops))
|
||||
graphs = read_adj_ops_from_json(f'/home/stud/hanzhang/nasbenchDiT/graph_dit/nasbench-201-graph.json')
|
||||
graphs = read_adj_ops_from_json(f'/nfs/data3/hanzhang/nasbenchDiT/graph_dit/flex-nasbench201-graph.json')
|
||||
|
||||
# check first five graphs
|
||||
for i in range(5):
|
||||
print(f'graph {i} : {graphs[i]}')
|
||||
print(f'ops_type: {ops_type}')
|
||||
# print(f'ops_type: {ops_type}')
|
||||
|
||||
meta_dict = new_graphs_to_json(graphs, 'nasbench-201')
|
||||
self.base_path = base_path
|
||||
@@ -1280,11 +1362,11 @@ def compute_meta(root, source_name, train_index, test_index):
|
||||
'transition_E': tansition_E.tolist(),
|
||||
}
|
||||
|
||||
with open(f'/home/stud/hanzhang/nasbenchDiT/graph_dit/nasbench201.meta.json', "w") as f:
|
||||
with open(f'/nfs/data3/hanzhang/nasbenchDiT/graph_dit/nasbench201.meta.json', "w") as f:
|
||||
json.dump(meta_dict, f)
|
||||
|
||||
return meta_dict
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
dataset = Dataset(source='nasbench', root='/home/stud/hanzhang/nasbenchDiT/graph-dit', target_prop='Class', transform=None)
|
||||
dataset = Dataset(source='nasbench', root='/nfs/data3/hanzhang/nasbenchDiT/graph-dit', target_prop='Class', transform=None)
|
||||
|
Reference in New Issue
Block a user