ml_framework
Dense
명징직조지훈
2023. 4. 19. 19:14
import numpy as np
import activation_function
# Dense 클래스
class Dense():
#가중치
weight = []
#편향값
bias = []
# 각 층별 노드들의 입력, 활성화 함수 연산 전의 값
node_input = []
# 각 층별 노드들의 출력
node_output = []
# 타겟, 목푯값
target = []
# 각 층의 델타 값의 저장
delta = []
# 활성화 함수
activation = activation_function()
# 가중치 업데이트 크기
weight_update_arr = []
# Dense 층
def Dense_layer(self, input_node, hidden_node, activation = "same"):
"""
Args:
activation : 활성화 함수 종류
padding : 패딩 종류
input_shape : 입력값의 크기
"""
Dense_dict = dict()
Dense_dict['layer_type'] = "Dense"
Dense_dict['input_node'] = input_node
Dense_dict['hidden_node'] = hidden_node
Dense_dict['activation'] = activation
return Dense_dict
# train Dense
def train(self, dict, data):
hidden_node = dict['hidden_node']
input_node = dict['input_node']
# 가중치의 임의 생성, 입력, 은닉 노드의 개수에 따라 가중치가 생성된다.
weight = np.random.rand(input_node, hidden_node)
#편향값의 임의 생성, 동일한 편향 값을 사용한다.
bias = np.random.rand(1)
# 가중치 값 저장
self.weight.append(weight)
# 편향 값 저장
self.bias.append(bias)
# 노드 입력값의 저장 필요, 활성화 미분 함수의 값을 구하기 위해 필요
self.node_input.append(input)
#가중치와 노드 출력의 행렬곱연산, 편향값 덧셈
hidden_input = weight @ input + bias
if(dict['activation'] == 'sigmoid'):
#노드 입력과 활성화 함수 연산을 통한 노드 출력 계산
# cnn 에선 0과 1 사이의 결과를 출력해야 하기 때문에 시그모이드 활성화 함수를 사용
output = self.activation.sigmoid(hidden_input)
# 노드 출력의 저장
self.node_output.append(output)
Dense 층에 저장되어야 할 정보들에는 뭐가 있을까?
dense 층은 노드의 개수 정보, 활성화 함수의 종류 등의 정보가 저장될 수 있다.
우선 위 두가지의 정보만을 가진 Dense 층의 구현,
Dense 클래스 내에서 이러한 연산이 수행될 수 있을 것,
딕셔러니 파일을 입력받고, 이에 따라 연산의 수행 가능할 것,