지노랩 /JinoLab
6. 3가지 입력(온도·습도·공기질)으로 하나의 출력(행복/슬픔 지수) 본문
1. 네트워크 구조
flowchart LR
Temp[온도 x₀] --> Mult0[× w₀] --> Sum[+]
Humi[습도 x₁] --> Mult1[× w₁] --> Sum
AQ[공기질 x₂] --> Mult2[× w₂] --> Sum --> y_pred
- 입력:
- x0x_0: 온도
- x1x_1: 습도
- x2x_2: 공기질
- 가중치:
- w0w_0: 온도 가중치
- w1w_1: 습도 가중치
- w2w_2: 공기질 가중치
- 출력 (ypredy_{\text{pred}})는 다음과 같이 계산합니다.ypred=x0w0+x1w1+x2w2 y_{\text{pred}} = x_0 w_0 + x_1 w_1 + x_2 w_2이때 xiwi\displaystyle x_i w_i 각 항은 “단일 입력·단일 출력” 네트워크의 예측값이며, 이들을 모두 더한 것이 바로 가중합(weighted sum) 결과입니다.
2. 의사코드(Pseudocode)
function weighted_sum_predict(inputs[3], weights[3]) → double:
sum = 0
for i from 0 to 2:
sum += inputs[i] * weights[i]
return sum
- inputs[i]: i번째 입력값
- weights[i]: i번째 가중치
- sum에 모든 xiwix_i w_i를 누적하여 최종 예측값 반환
3. C 언어 구현
헤더 파일: simple_nn.h
#ifndef SIMPLE_NN_H
#define SIMPLE_NN_H
/**
* @brief 다중 입력·단일 출력 퍼셉트론 예측 함수
* @param inputs 입력값 배열 (크기 n_inputs)
* @param weights 가중치 배열 (크기 n_inputs)
* @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) {
// 예시 입력값: 온도, 습도, 공기질
double features[N_FEATURES] = {25.0, 60.0, 80.0};
// 각 특성별 가중치: 온도, 습도, 공기질 순
double weights[N_FEATURES] = { 0.8, 0.1, 0.3};
// 예측 수행
double y_pred = weighted_sum_predict(features, weights, N_FEATURES);
// 해석: 예) y_pred > 임계치 → “행복” / ≤ 임계치 → “슬픔”
printf("예측값 (행복지수): %.2f\n", y_pred);
return 0;
}
4. 빌드 & 실행
gcc -o SimpleNN main.c simple_nn.c
./SimpleNN
출력 예시:
예측값 (행복지수): 34.30
5. 응용 및 확장
- 편향(bias) 추가

- 활성화 함수 도입
- ReLU, Sigmoid, Tanh 등으로 비선형성 부여
- 다층 퍼셉트론(MLP)
- 은닉층(hidden layer)과 역전파(backpropagation) 구현
- 배치 처리(Batch Processing)
- 여러 데이터 포인트를 한 번에 예측하도록 일반화
위 기본 구조를 바탕으로, 실제 딥러닝 프레임워크에서 사용하는 원리(가중치 학습·역전파 등)를 단계적으로 구현해 보세요. 다음 포스팅에서는 활성화 함수와 **경사하강법(Gradient Descent)**을 적용하는 과정을 다룹니다.
'프로그래밍 > C언어를 이용한 Deep Learning' 카테고리의 다른 글
| 8. 다중 입력·다중 출력(Multiple Input, Multiple Output, MIMO) 퍼셉트론 (2) | 2025.08.03 |
|---|---|
| 7. 다중 입력·단일 출력 퍼셉트론을 C 언어로 (1) | 2025.08.02 |
| 5. 단일 입력·다중 출력 퍼셉트론 구현하기 (3) | 2025.07.31 |
| 4. 단일 입력·다중 출력(Single Input, Multiple Output) 신경망(perceptron) 구조 (2) | 2025.07.30 |
| 3. C 언어 단일 입력·단일 출력 퍼셉트론 (1) | 2025.07.29 |