지노랩 /JinoLab
3. C 언어 단일 입력·단일 출력 퍼셉트론 본문
1. 프로젝트 생성
- IDE(또는 터미널)에서 새 콘솔 애플리케이션 프로젝트를 만듭니다.
- 예: “SimpleNN”
- 기존 프로젝트를 복제(clone)해서 사용해도 좋습니다.
- 생성 후, 기본으로 잡혀 있는 main.c 외에 두 개의 파일을 추가합니다.
- simple_nn.h (헤더 파일)
- simple_nn.c (구현 파일)
2. 헤더 파일: simple_nn.h
#ifndef SIMPLE_NN_H
#define SIMPLE_NN_H
/**
* @brief 단일 입력·단일 출력 퍼셉트론 예측 함수
* @param input 관측값 (e.g., 온도)
* @param weight 가중치
* @return 예측값 (input × weight)
*/
double predict(double input, double weight);
#endif // SIMPLE_NN_H
- #ifndef·#define 가드로 중복 포함을 방지합니다.
- predict() 함수 원형(prototype)을 선언했습니다.
3. 구현 파일: simple_nn.c
#include "simple_nn.h"
double predict(double input, double weight) {
// 가장 기본적인 순전파: 입력 × 가중치
return input * weight;
}
- simple_nn.h를 #include 하여 함수 원형을 참조합니다.
- predict()는 단 한 줄로 이루어진, 가장 단순한 퍼셉트론 연산입니다.
4. 메인 파일: main.c
#include <stdio.h>
#include "simple_nn.h"
int main(void) {
// 샘플 입력 데이터: 온도 배열
double temperatures[] = {12.0, 23.0, 50.0, -10.0, 16.0};
const int N = sizeof(temperatures) / sizeof(temperatures[0]);
double weight = 1.5; // 가중치 예시
// 첫 세 개 값으로 테스트
for (int i = 0; i < 3 && i < N; i++) {
double y_pred = predict(temperatures[i], weight);
printf("입력: %.1f°C, 예측값: %.2f\n", temperatures[i], y_pred);
}
return 0;
}
- temperatures 배열에 5개의 샘플 데이터를 담았습니다.
- weight는 1.5로 설정.
- for 루프를 돌며 predict() 호출 후 결과를 출력합니다.
5. 빌드 & 실행
- 빌드
- gcc -o SimpleNN main.c simple_nn.c
- 실행
- ./SimpleNN
- 출력 예시
- 입력: 12.0°C, 예측값: 18.00 입력: 23.0°C, 예측값: 34.50 입력: 50.0°C, 예측값: 75.00
6. 요약 및 확장 방향
- 핵심 연산: y_pred = input × weight
- **퍼셉트론(perceptron)**의 가장 기초 형태로, 내부 활성화 함수 없이 선형 모델과 동일한 구조
- 이 예제를 바탕으로 다음을 시도해 보세요:
- 경사하강법으로 weight 학습하기
- 활성화 함수(예: 시그모이드) 추가
- 다층 퍼셉트론(MLP) 구조로 확장
이처럼 작은 예제로부터 출발해, 하나씩 기능을 더해 나가면 여러분만의 신경망 라이브러리를 만들어 볼 수 있습니다. 다음 포스팅에서는 “경사하강법”과 “비선형 활성화 함수”를 적용해 보겠습니다. 앞으로도 꾸준히 따라와 주세요!
'프로그래밍 > C언어를 이용한 Deep Learning' 카테고리의 다른 글
| 6. 3가지 입력(온도·습도·공기질)으로 하나의 출력(행복/슬픔 지수) (2) | 2025.08.01 |
|---|---|
| 5. 단일 입력·다중 출력 퍼셉트론 구현하기 (3) | 2025.07.31 |
| 4. 단일 입력·다중 출력(Single Input, Multiple Output) 신경망(perceptron) 구조 (2) | 2025.07.30 |
| 2. 단일 입력·단일 출력 신경망 구조 (1) | 2025.07.28 |
| 1. 딥러닝(Deep Learning)이란 무엇인가? (2) | 2025.07.27 |