본문 바로가기
개발/Python

신경망 파라미터 개수

by 피로물든딸기 2025. 10. 20.
반응형

전체 링크

 

입력층 3, 은닉층 4, 출력층 2인 경우

 

레이어 개수
→ 입력층(1) + 은닉층(1) + 출력층(1) = 3개

은닉층 개수
→ 1개

은닉층 노드 수
→ 4개 (1개의 은닉층에 4개의 뉴런)

파라미터 수 (가중치 + 편향)

입력층(3) → 은닉층(4):
- 가중치 : 3 × 4 = 12
- 편향 : 4

은닉층(4) → 출력층(2)
- 가중치 : 4 × 2 = 8
- 편향 : 2

총 파라미터 수 = 12 + 4 + 8 + 2 = 26


입력층 4, 은닉층 5 / 3 / 2, 출력층 1인 경우

 

입력층 → 은닉층1

- 가중치 : 4×5=20

- 편향 : 5

- 합 = 25

 

은닉층1 → 은닉층2

- 가중치 : 5×3=15

- 편향 : 3

- 합 = 18

 

은닉층2 → 은닉층3

- 가중치 : 3×2=6

- 편향 : 2

- 합 = 8

 

은닉층3 → 출력층

- 가중치 : 2×1=2

- 편향 : 1

- 합 = 3

 

54개

→ 편향이 없는 경우는 43개 (4x5 + 5x3 + 3x2 + 2x1)


입력층 4, 은닉층 6 / 6 / 6, 출력층 4인 경우

입력층 → 은닉층1

- 가중치 : 4×6=24

- 편향 : 6

- 합 = 30

 

은닉층1 → 은닉층2

- 가중치 : 6×6=36

- 편향 : 6

- 합 = 42

 

은닉층2 → 은닉층3

- 가중치 : 6×6=36

- 편향 : 6

- 합 = 42

 

은닉층3 → 출력층

- 가중치 : 6×4=24

- 편향 : 4

- 합 = 28

 

→ 142개

→ 편향이 없는 경우는 120개 (4x6 + 6x6 + 6x6 + 6x4)


import matplotlib.pyplot as plt
import networkx as nx

# 각 층의 노드 개수
layers = [4, 5, 3, 2, 1]

# 노드 위치 계산
pos = {}
layer_gap = 3
node_gap = 1

for i, num_nodes in enumerate(layers):
    for j in range(num_nodes):
        pos[(i, j)] = (i * layer_gap, j * node_gap - (num_nodes-1)*node_gap/2)

# 그래프 생성
G = nx.DiGraph()
for i in range(len(layers)-1):
    for j in range(layers[i]):
        for k in range(layers[i+1]):
            G.add_edge((i,j), (i+1,k))

# 그림 그리기
plt.figure(figsize=(12,6))
nx.draw(G, pos, with_labels=False, node_size=600, node_color="skyblue", arrows=False)

# 층 이름 추가
layer_names = ["Input (4)", "Hidden1 (6)", "Hidden2 (6)", "Hidden3 (6)", "Output (4)"]
for i, name in enumerate(layer_names):
    x = i * layer_gap
    y = (layers[i]-1) * node_gap / 2 + 1.5
    plt.text(x, y, name, ha="center", fontsize=12, fontweight="bold")

plt.axis("off")
plt.show()
반응형

'개발 > Python' 카테고리의 다른 글

이상치 탐지 vs 특이치 탐지  (0) 2025.10.20
합성곱 신경망 (Feature Map)  (0) 2025.10.20
차트  (0) 2025.10.14
Ridge, Lasso, Elastic Net  (2) 2025.10.11
스케일링  (0) 2025.10.11

댓글