카테고리 없음
Dense(3)
명징직조지훈
2023. 4. 22. 17:12
2023.04.22 - [ml_framework] - Sequential(2)
레이어 방문, dense 층에서의 연산 입력 데이터의 차원 수와 은닉층 노드의 개수를 바탕으로 연산을 수행한다.
Sequential 클래스에서의 fit 함수, 훈련과 관련된 정보가 저장된다.
은닉 노드의 개수와 훈련 데이터의 입력,
훈련 데이터의 개수, 은닉 노드의 개수에 따라 그 크기가 다르게 지정, 그 정보를 입력받는다.
# train Dense
def train(self, dict, train):
hidden_node = dict['hidden_node']
# 가중치의 임의 생성, 입력, 은닉 노드의 개수에 따라 가중치가 생성된다.
weight = np.random.rand(train.shape[1], hidden_node)
#편향값의 임의 생성, 동일한 편향 값을 사용한다.
bias = np.random.rand(1)
# 가중치 값 저장
self.Dense_dict['weight'] = weight
# 편향 값 저장
self.Dense_dict['bias'] = bias
for i in range(train.shapa[0]):
node_input = train[i]
#가중치와 노드 출력의 행렬곱연산, 편향값 덧셈
hidden_input = weight @ node_input + bias
if(dict['activation'] == 'sigmoid'):
#노드 입력과 활성화 함수 연산을 통한 노드 출력 계산
# cnn 에선 0과 1 사이의 결과를 출력해야 하기 때문에 시그모이드 활성화 함수를 사용
hidden_output = self.activation.sigmoid(hidden_input)
# 노드 출력의 저장
self.node_output.append(hidden_output)
먼저 훈련 시 입력 데이터에 대한 차원 수와, 해당 은닉층 노드의 개수에 따른 가중치, 편향 값의 생성,
그 가중치와 편향 값을 저장한다.
전달 받은 train 데이터는 전체 배치 중 하나의 데이터이다.
# train Dense
def train(self, dict, train):
hidden_node = dict['hidden_node']
# 가중치의 임의 생성, 입력, 은닉 노드의 개수에 따라 가중치가 생성된다.
weight = np.random.rand(train.shape[1], hidden_node)
#편향값의 임의 생성, 동일한 편향 값을 사용한다.
bias = np.random.rand(1)
# 가중치 값 저장
self.Dense_dict['weight'] = weight
# 편향 값 저장
self.Dense_dict['bias'] = bias
#가중치와 노드 출력의 행렬곱연산, 편향값 덧셈
hidden_input = weight @ train + bias
if(dict['activation'] == 'sigmoid'):
#노드 입력과 활성화 함수 연산을 통한 노드 출력 계산
# cnn 에선 0과 1 사이의 결과를 출력해야 하기 때문에 시그모이드 활성화 함수를 사용
hidden_output = self.activation.sigmoid(hidden_input)
# 노드 입력값과 출력값의 반환
return hidden_input, hidden_output
전달받은 딕셔너리 파일로부터 은닉 노드의 개수를 입력받는다.
훈련 데이터의 차원 수와 은닉 노드의 개수를 통해 가중치 생성, 편향값 생성
해당 가중치와 편향값의 저장,
노드 입력의 계산, 행렬 곱연산과 편향값 덧셈 수행,
활성화 함수의 종류에 따라 다른 연산 수행,
노드 입력, 출력값의 저장 필요, (어디다 저장하지?)
레이어에 저장해야겠다.