지노랩 /JinoLab
4. 단일 입력·다중 출력(Single Input, Multiple Output) 신경망(perceptron) 구조 본문
프로그래밍/C언어를 이용한 Deep Learning
4. 단일 입력·다중 출력(Single Input, Multiple Output) 신경망(perceptron) 구조
지노랩/JinoLab 2025. 7. 30. 09:42
1. 구조 설명
flowchart LR
Input[감정 상태: sad] --> Mult0[× w_temp] --> Out0[온도 예측: y₀]
Input --> Mult1[× w_humi] --> Out1[습도 예측: y₁]
Input --> Mult2[× w_aq] --> Out2[공기질 예측: y₂]
- 입력(Input): 하나의 값(예: 사람의 기분 sad)
- 가중치(Weights):
- w_temp: 온도 예측용
- w_humi: 습도 예측용
- w_aq: 공기질 예측용
- 출력(Outputs):
- y₀ = sad × w_temp
- y₁ = sad × w_humi
- y₂ = sad × w_aq
이렇게 하나의 입력값을 각기 다른 가중치와 곱해서 3개의 예측값을 동시에 얻을 수 있습니다.
2. 의사코드(Pseudocode)
function predict_all(input, weights[3], outputs[3]):
for i from 0 to 2:
outputs[i] = input * weights[i]
return outputs
- input : 스칼라 값
- weights : 길이 3 짜리 1차원 배열
- outputs : 길이 3 짜리 1차원 배열 (결과 저장)
3. C 언어 구현
헤더 파일: simple_nn.h
#ifndef SIMPLE_NN_H
#define SIMPLE_NN_H
/**
* @brief 단일 입력·다중 출력 퍼셉트론 예측 함수
* @param input 입력값 (스칼라)
* @param weights 가중치 배열 (크기 n_outputs)
* @param outputs 결과 저장 배열 (크기 n_outputs)
* @param n_outputs 출력 개수
*/
void predict_all(double input,
const double *weights,
double *outputs,
int n_outputs);
#endif // SIMPLE_NN_H
구현 파일: simple_nn.c
#include "simple_nn.h"
void predict_all(double input,
const double *weights,
double *outputs,
int n_outputs) {
for (int i = 0; i < n_outputs; i++) {
outputs[i] = input * weights[i];
}
}
메인 파일: main.c
#include <stdio.h>
#include "simple_nn.h"
int main(void) {
double mood = 8.0; // 예시 입력: 기분(sad)을 스케일링한 값
double weights[3] = {1.2, 0.5, 0.8}; // 순서대로 [온도, 습도, 공기질] 가중치
double outputs[3]; // 예측값 저장 배열
// 3가지 예측 수행
predict_all(mood, weights, outputs, 3);
// 결과 출력
const char *labels[3] = {"온도", "습도", "공기질"};
for (int i = 0; i < 3; i++) {
printf("%s 예측값: %.2f\n", labels[i], outputs[i]);
}
return 0;
}
4. 빌드 & 실행
gcc -o SimpleNN main.c simple_nn.c
./SimpleNN
예시 출력:
온도 예측값: 9.60
습도 예측값: 4.00
공기질 예측값: 6.40
5. 핵심 정리 및 확장 과제
- 핵심 연산: outputs[i] = input × weights[i]
- 확장 아이디어:
- 입력 벡터로 확장: 다차원 입력 x[j] × 가중치 행렬 w[j][i] → 다중 입력·다중 출력 네트워크
- 편향(bias) 추가: y = x·w + b 형태로 오프셋 보정
- 활성화 함수(ReLU, Sigmoid 등) 적용
- 경사하강법 구현하여 가중치 자동 학습
이 예제를 기반으로, 신경망의 기본 빌딩 블록을 차근차근 확장해 보세요. 다음에는 다층 퍼셉트론(MLP) 구조를 구현해 보고, 역전파(backpropagation) 알고리즘을 통해 가중치를 학습시키는 과정을 다룹니다!
'프로그래밍 > C언어를 이용한 Deep Learning' 카테고리의 다른 글
| 6. 3가지 입력(온도·습도·공기질)으로 하나의 출력(행복/슬픔 지수) (2) | 2025.08.01 |
|---|---|
| 5. 단일 입력·다중 출력 퍼셉트론 구현하기 (3) | 2025.07.31 |
| 3. C 언어 단일 입력·단일 출력 퍼셉트론 (1) | 2025.07.29 |
| 2. 단일 입력·단일 출력 신경망 구조 (1) | 2025.07.28 |
| 1. 딥러닝(Deep Learning)이란 무엇인가? (2) | 2025.07.27 |