지노랩 /JinoLab
7. 다중 입력·단일 출력 퍼셉트론을 C 언어로 본문
1. 네트워크 아키텍처
입력 벡터: [x₀(온도), x₁(습도), x₂(공기질)]
가중치 벡터: [w₀, w₁, w₂ ]
↓ ↓ ↓
x₀·w₀ x₁·w₁ x₂·w₂
↘ ↓ ↙
─────────⊕─────────
↓
y_pred = ∑ xᵢ·wᵢ
- 입력(features): 온도(x₀), 습도(x₁), 공기질(x₂)
- 가중치(weights): 각 특성별 중요도를 나타내는 파라미터 w₀, w₁, w₂
- 출력(prediction): 가중합(weighted sum)ypred=x0w0+x1w1+x2w2 y_{\text{pred}} = x_0 w_0 + x_1 w_1 + x_2 w_2
2. 의사코드(Pseudocode)
function weighted_sum(inputs[ ], weights[ ], n):
sum = 0
for i = 0 to n-1:
sum += inputs[i] * weights[i]
return sum
- inputs[i]: i번째 입력
- weights[i]: i번째 가중치
- n: 입력(가중치) 개수
3. C 언어 구현
헤더 파일: simple_nn.h
#ifndef SIMPLE_NN_H
#define SIMPLE_NN_H
/**
* @brief 다중 입력·단일 출력 퍼셉트론 예측 함수
* @param inputs 입력 배열
* @param weights 가중치 배열
* @param n_inputs 배열 길이 (입력 개수)
* @return 예측값 (가중합)
*/
double weighted_sum_predict(const double *inputs,
const double *weights,
int n_inputs);
#endif // SIMPLE_NN_H
구현 파일: simple_nn.c
#include "simple_nn.h"
double weighted_sum_predict(const double *inputs,
const double *weights,
int n_inputs) {
double sum = 0.0;
for (int i = 0; i < n_inputs; i++) {
sum += inputs[i] * weights[i];
}
return sum;
}
메인 파일: main.c
#include <stdio.h>
#include "simple_nn.h"
// 입력(특성) 개수
#define N_FEATURES 3
int main(void) {
// 3가지 특성(온도, 습도, 공기질)의 첫 번째 샘플
double features[N_FEATURES] = {28.0, 65.0, 75.0};
// 각 특성에 대응하는 가중치
double weights [N_FEATURES] = { 0.5, 0.2, 0.8};
// 예측 수행
double y_pred = weighted_sum_predict(features, weights, N_FEATURES);
// 결과 출력
printf("예측 결과 (행복지수) : %.2f\n", y_pred);
return 0;
}
4. 빌드 & 실행
gcc -o SimpleNN main.c simple_nn.c
./SimpleNN
예측 결과 (행복지수) : 77.10
5. 코드 설명 및 팁
- 헤더 파일 분리
- 함수 원형을 선언해 모듈화
- 가중합 연산
- for 루프로 각 입력·가중치 곱을 누적
- 상수화
- #define N_FEATURES로 입력 개수를 상수화해 유지보수성 향상
- 확장 아이디어
- 편향(bias) 추가: sum += b
- 활성화 함수(ReLU, Sigmoid) 적용: y = f(sum)
- 다층 퍼셉트론(MLP) 구조로 확대
6. 다음 단계
- 역전파(Backpropagation) 구현해 가중치 학습하기
- 배치 처리(Batch Processing) 로 다수의 샘플에 한 번에 예측 적용
- 다양한 활성화 함수와 정규화 기법 실습
이 튜토리얼을 시작으로, 직접 C 언어로 신경망의 핵심 알고리즘을 구현하고 실험해 보세요. 다음 포스팅에서는 역전파 알고리즘과 학습 과정을 상세히 다룹니다!
'프로그래밍 > C언어를 이용한 Deep Learning' 카테고리의 다른 글
| 9. 은닉층(hidden layer) (4) | 2025.08.04 |
|---|---|
| 8. 다중 입력·다중 출력(Multiple Input, Multiple Output, MIMO) 퍼셉트론 (2) | 2025.08.03 |
| 6. 3가지 입력(온도·습도·공기질)으로 하나의 출력(행복/슬픔 지수) (2) | 2025.08.01 |
| 5. 단일 입력·다중 출력 퍼셉트론 구현하기 (3) | 2025.07.31 |
| 4. 단일 입력·다중 출력(Single Input, Multiple Output) 신경망(perceptron) 구조 (2) | 2025.07.30 |