본문 바로가기

dev_AI_framework

Node 클래스 구현 - Dense 연산 부분 수정

bias, activation_function 의 유무 조건문에 따른 Dense 층의 연산을 다르게 수정했는데,

Node 클래스를 구현함으로써 부모 노드, 자식 노드 탐색이 가능 이를 이용하여 다시 조건문을 줄이고,

self.node_list 의 값을 반드시 실행해야 하는 mul_mat_node_list 값으로 지정해주었다!

 

 x, mul_mat_node_list = operations_matrix.matrix_multiply(inputs, self.weights)

        self.node_list = mul_mat_node_list

        # bias 가 None 이 아닌 경우 - 아직
        # 이거 수정해야 함 루트 노드와 리프 노드를 연결해야 함,
        # 이전에는 루트 노드끼리 연결되어 있었음
        if self.bias is not None:
            x, add_node_list = operations_matrix.matrix_add(x, np.tile(self.bias, x.shape))
            for i in range(len(add_node_list)):
                child_node = self.backpropagate(add_node_list[i])
                root_node = self.find_root(mul_mat_node_list[i])

                child_node[0].add_child(root_node)
                root_node.add_parent(child_node[0])
        
        if self.activation is not None:
            x, act_node_list = self.activation(x)

            for i in range(len(act_node_list)):
                child_node = self.backpropagate(act_node_list[i])
                root_node = self.find_root(mul_mat_node_list[i])

                child_node[0].add_child(root_node)
                root_node.add_parent(child_node[0])

        x = x.reshape(n, 1,-1)

        return x

Dense 클래스 call 연산 부분의 수정