call 메서드에서 계산 그래프 생성을 추가해야함
행렬 연산 수행과 동시에 계산 그래프 노드를 생성해야 함
def test_dense_layer():
"""
Dense 레이어의 연산 및 계산 그래프 구성을 검증하는 테스트 함수
"""
print("===== [TEST] Dense Layer Forward Pass & Computation Graph =====")
# ✅ 입력 데이터 및 Dense 레이어 설정
input_data = np.array([[1.0, 2.0], [3.0, 4.0]]) # (batch_size=2, input_dim=2)
units = 2 # 출력 차원
dense_layer = Dense(units=units, activation=None, initializer="ones")
dense_layer.build(input_shape=(2, 2)) # input_shape = (batch_size, input_dim)
# ✅ 가중치와 편향을 고정하여 테스트 (초기화를 ones로 설정했기 때문에 가중치 = 1)
dense_layer.weights = np.ones((2, units)) # 2x3 행렬 (입력 x 가중치)
dense_layer.bias = np.ones((1, units)) # 1x3 행렬 (편향)
# ✅ Forward pass 실행
output = dense_layer.call(input_data)
# ✅ Expected output 계산 (기대값: 모든 값이 (X @ W) + b = 3, 7)
expected_output = np.array([
[1*1 + 2*1 + 1, 1*1 + 2*1 + 1, 1*1 + 2*1 + 1], # (1+2) + bias(1) = 3
[3*1 + 4*1 + 1, 3*1 + 4*1 + 1, 3*1 + 4*1 + 1] # (3+4) + bias(1) = 7
])
print("\n✅ Dense Layer Output:")
print(output)
# assert np.allclose(output, expected_output), "❌ Forward Pass Output Mismatch!"
# ✅ 계산 그래프 출력
print("\n✅ Computation Graph:")
dense_layer.cal_graph.print_graph()
print("\n🎉 [TEST PASSED] Dense Layer and Computation Graph Successfully Validated!")
# ✅ 테스트 실행
test_dense_layer()
test 코드의 실행
✅ Computation Graph:
Node(operation=add, input=4.0, weight=1.0, output=0.0)
Node(operation=add, input=0.0, weight=0.0, output=0.0)
Node(operation=multiply, input=1.0, weight=1.0, output=0.0)
Node(operation=multiply, input=2.0, weight=1.0, output=0.0)
Node(operation=add, input=4.0, weight=1.0, output=0.0)
Node(operation=add, input=0.0, weight=0.0, output=0.0)
Node(operation=multiply, input=3.0, weight=1.0, output=0.0)
Node(operation=multiply, input=4.0, weight=1.0, output=0.0)
Node(operation=add, input=8.0, weight=1.0, output=0.0)
Node(operation=add, input=0.0, weight=0.0, output=0.0)
Node(operation=multiply, input=3.0, weight=1.0, output=0.0)
Node(operation=multiply, input=4.0, weight=1.0, output=0.0)
Node(operation=add, input=8.0, weight=1.0, output=0.0)
Node(operation=add, input=0.0, weight=0.0, output=0.0)
Node(operation=multiply, input=1.0, weight=1.0, output=0.0)
Node(operation=multiply, input=2.0, weight=1.0, output=0.0)
올바른 형태의 계산 그래프가 생성된 것을 확인할 수 있음 (result 값의 올바른 형변환을 통해 backend 와의 연동 확인)
추가로 cuda 에서 계산된 결과를 집어넣어야 함
'dev_AI_framework' 카테고리의 다른 글
dense layer 수정, cu 코드 연동, 깊은 복사를 통한 cal_graph input, output 값 설정 (0) | 2025.02.19 |
---|---|
생성된 계산 그래프에 cu 연산 결과 넣기 (0) | 2025.02.19 |
계산 그래프의 output 의 처리는..? (0) | 2025.02.13 |
계산 그래프, 두 계산 그래프의 연결, connect_graph(self, node_list1, node_list2) (0) | 2025.02.13 |
계산 그래프, matrix_multiply (0) | 2025.02.12 |