C에서 C++로
입출력 #include int main(void) { // 출력 std::cout
- 프로그래밍 언어/C++
- · 2022. 12. 24.
1번에서 전체 개념을 가볍게 설명하고, 2번부터 자세하고 차근차근 설명해 두었습니다. 그러니 첫 부분이 이해되지 않아도 일단은 넘어가서 뒷부분을 읽고 돌아오시면 이해하기 더 편할 겁니다. 전체 개념 딥러닝에서 모델을 학습한다는 것은 실제 값과 예측 값의 오차를 최소화하는 가중치를 찾는 과정이다. 여기서 '오차'를 정의하는 함수를 비용 함수(Cost function)라고 한다. 즉, 비용 함수가 최솟값을 갖는 방향으로 가중치를 업데이트하는 작업이 필요하다. 경사 하강법이라고 불리는 Gradient Descent는 최솟값을 찾을 때 사용할 수 있는 최적화 알고리즘이다. 먼저, 최솟값을 찾을 함수를 설정한 후, 임의의 값으로 초기화하고 해당 값의 기울기를 빼면서 최솟값에 가까워질 때까지 반복하는 방법이다. $..
선형 구조 아래와 같이 은닉층이 있는 신경망은 어떻게 결과값을 계산하는지 확인해보자. $z_0=w_0x_0+w_1x_1$ $z_1=w_2x_0+w_3x_1$ $y=w_5z_0+w_6z_1$ 확인을 위해 식을 직접 대입해 보면, $y=w_5(w_0x_0+w_1x_1)+w_6(w_2x_0+w_3x_1) \\ =(w_5w_0+w_6w_2)x_0+(w_5w_1+w_6w_3)x_1 \\ =w_{t0}x_0+w_{t1}x_1$ 결과적으로 레이어를 추가했지만 또 다른 선형 함수가 만들어졌다. 그림으로 나타내면 아래와 같다. 즉, 은닉층을 선형적으로 쌓아도 결국 하나의 선형 함수로 정의된다는 것이다. 따라서 위와 같은 문제를 해결하기 위해 활성화 함수가 필요하다. 예: $y=w_5h_0(z_0)+w_6h_1(z_1)$..
입출력 #include int main(void) { // 출력 std::cout
Name Space namespace는 특정 영역을 분리하는 식별자 역할을 한다. 데이터의 범위를 단순히 전역·지역으로 나누지 않고 namespace를 이용해 구체적으로 지정해 줄 수 있다. namespace test1 { void HelloWorld(void); } namespace test2 { void HelloWorld(void); } test1과 test2라는 독립된 공간을 만들어 HelloWorld라는 같은 이름의 함수가 충돌하지 않도록 분리해 주었다. test1과 test2는 각각의 공간을 식별해주는 namespace가 된다. test1::HelloWorld namespace::함수/변수의 형태로 특정 namespace 내의 데이터를 정의하거나 불러온다. 예시: namespace로 분리하기 ..
nomad-coders님의 영상을 보다가 dataclasses라는 유용한 라이브러리를 알게 되어 정리하게 되었다. 정리한 내용은 공식 문서 (3.11)를 참고하여 작성하였다. 추가로 객체 데이터를 다룰 때 유용하게 사용하고 있는 property도 함께 소개하였다. dataclasses 개념 class Person: def __init__(self, pid, name, age): self.pid = pid self.name = name self.age = age class내에서 __init__을 사용해 필요한 데이터를 저장해두는 아주 전형적인 코드이다. 하지만 받아야 하는 데이터가 많을 경우, 동일한 코드를 반복적으로 작성해야 하는 번거로움이 생긴다. 이럴 때 dataclasses를 사용해 간결하게 작성할..