def init(self,
         dataset,
         criterion,
         sample_nums,
         path_graph,
         path_wnids,
         classes,
         Rules,
         tree_supervision_weight=1.):
     """
     Extra init method makes clear which arguments are finally necessary for
     this class to function. The constructor for this class may generate
     some of these required arguments if initially missing.
     """
     self.dataset = dataset
     self.num_classes = len(classes)
     self.nodes = Node.get_nodes(path_graph, path_wnids, classes)
     self.rules = Rules(dataset, path_graph, path_wnids, classes)
     self.tree_supervision_weight = tree_supervision_weight
     self.criterion = criterion
     self.sample_nums = np.array(sample_nums)
     self.node_depths = defaultdict(lambda: [])
     self.node_weights = defaultdict(lambda: [])
     effective_num = 1.0 - np.power(0.999, self.sample_nums)
     weights = (1.0 - 0.999) / np.array(effective_num)
     self.weights = weights
     for node in self.nodes:
         key = node.num_classes
         depth = node.get_depth()
         self.node_depths[key].append(depth)
         node_weight = []
         for new_label in range(node.num_classes):
             node_weight.append(weights[node.new_to_old_classes[new_label]])
         self.node_weights[key].append(node_weight)
    def __init__(self, dataset, path_graph=None, path_wnids=None, classes=()):

        if not path_graph:
            path_graph = dataset_to_default_path_graph(dataset)
        if not path_wnids:
            path_wnids = dataset_to_default_path_wnids(dataset)
        if not classes:
            classes = dataset_to_dummy_classes(dataset)
        super().__init__()
        assert all([dataset, path_graph, path_wnids, classes])

        self.classes = classes

        self.nodes = Node.get_nodes(path_graph, path_wnids, classes)
        self.G = self.nodes[0].G
        self.wnid_to_node = {node.wnid: node for node in self.nodes}

        self.wnids = get_wnids(path_wnids)
        self.wnid_to_class = {
            wnid: cls
            for wnid, cls in zip(self.wnids, self.classes)
        }

        self.correct = 0
        self.total = 0

        self.I = torch.eye(len(classes))
示例#3
0
 def init(self,
          dataset,
          criterion,
          path_graph,
          path_wnids,
          classes,
          Rules,
          tree_supervision_weight=1.):
     """
     Extra init method makes clear which arguments are finally necessary for
     this class to function. The constructor for this class may generate
     some of these required arguments if initially missing.
     """
     self.dataset = dataset
     self.num_classes = len(classes)
     self.nodes = Node.get_nodes(path_graph, path_wnids, classes)
     self.rules = Rules(dataset, path_graph, path_wnids, classes)
     self.tree_supervision_weight = tree_supervision_weight
     self.criterion = criterion