본문 바로가기

분류 전체보기640

클래스(1) - 클래스 선언, 생성, 필드, 메소드 1. 클래스 선언 및 객체 생성클래스는 프로그램의 기본 단위로, 필드와 메소드 등을 포함할 수 있습니다. 아래는 Fraction 클래스에 대한 예시입니다.using System;class Fraction { int numerator; // 분자 int denominator; // 분모 // 생성자 public Fraction(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } // 덧셈 메소드 public Fraction Add(Fraction f) { int newNumerator = this.numerat.. 2024. 9. 30.
필드와 프로퍼티의 차이 필드(Field)와 프로퍼티(Property)는 C# 클래스에서 객체의 상태를 저장하고 데이터에 접근하는 방법을 제공합니다. 두 개념은 서로 관련이 있지만, 사용 방법과 목적이 다릅니다.1. 필드(Field)필드는 클래스나 구조체 내부에 선언된 변수로, 객체의 상태를 직접적으로 저장하는 공간입니다.필드는 주로 private으로 선언되어 직접 접근을 제한하며, 클래스 내부에서만 접근 가능합니다.예시:class Car { // 필드 선언 private string model; private int year;}특징:필드는 클래스 내부의 변수로, 값을 직접 저장하고 관리합니다.보통 접근 제어자(private)를 사용하여 외부에서 필드에 직접 접근하지 못하게 보호합니다.필드를 직접적으로 외부에 노.. 2024. 9. 30.
표준 입출력 표준 입출력문 (Standard Input/Output)  입력: Console.Read(), Console.ReadLine()을 사용해 입력을 받을 수 있습니다. string name = Console.ReadLine(); // 사용자로부터 입력 받음  출력: Console.Write(), Console.WriteLine()을 사용해 출력할 수 있습니다.Console.WriteLine("Hello, World!"); // 화면에 출력// 형식 지정자를 사용한 출력double pi = 3.14159265358979;Console.WriteLine("Pi: {0:F2}", pi); // 소수점 둘째 자리까지 출력 2024. 9. 30.
오버 플로우 검사문 (Checked) 오버플로 검사문 (Overflow Checking)checked 문: 오버플로를 명시적으로 검사checked { int result = int.MaxValue + 1; // 오버플로가 발생하여 예외 발생}  unchecked 문: 오버플로를 검사하지 않음unchecked { int result = int.MaxValue + 1; // 오버플로가 발생해도 예외 발생하지 않음 // result: -2147483648} 2024. 9. 30.
Break와 Continue break 문: 루프나 switch 문을 종료 for (int i = 0; i   continue 문: 다음 반복을 시작 for (int i = 0; i 2024. 9. 30.
Nullable Type 널이 가능한 형(Nullable Type)은 값 형식(Value Type)에 null 값을 허용할 수 있도록 하는 C#의 기능입니다. 기본적으로 값 형식(int, float, bool 등)은 null 값을 가질 수 없습니다. 하지만 널이 가능한 형을 사용하면 값이 없음을 나타내는 null을 할당할 수 있습니다.  1. 널이 가능한 형의 정의널이 가능한 형은 기본 값 형식 뒤에 ? 기호를 붙여 정의할 수 있습니다. 이렇게 정의된 변수는 값이 없음을 의미하는 null 값을 가질 수 있습니다.예시: int?, float?, bool? 등이 널이 가능한 형입니다.int? age = null; // 널이 가능한 int 형double? temperature = 36.5; // 값이 존재하는 경우   2. 널이 .. 2024. 9. 30.
형변환(캐스팅) 형 변환(Type Conversion)은 한 자료형의 값을 다른 자료형으로 변환하는 것을 의미합니다. C#에서 형 변환은 묵시적 형 변환(Implicit Conversion)과 명시적 형 변환(Explicit Conversion)으로 나뉩니다.1. 묵시적 형 변환 (Implicit Conversion)묵시적 형 변환은 컴파일러가 자동으로 수행하는 형 변환입니다. 주로 데이터 손실이 없는 변환, 즉 작은 크기의 자료형에서 큰 크기의 자료형으로 변환할 때 발생합니다.예시: int에서 double로 변환int myInt = 10;double myDouble = myInt; // 자동으로 형 변환Console.WriteLine(myDouble); // 출력: 10.0   2. 명시적 형 변환 (Explici.. 2024. 9. 30.
2.7 Memory units 읽기 쓰기 모두 가능한 메모리 - RAM  읽기를 진행할 때1. 메모리의 주소 전달2. Read Signal 전달3. 해당 주소에 있는 데이터를 Output으로 받는다.   쓰기를 진행할 때1. 메모리의 주소 전달2. Write Signal 전달3. 쓰고 싶은 데이터 전달4. 해당 주소에 있는 데이터를 Output으로 받는다.   읽기만 가능한 메모리 - ROM  1. 읽고 싶은 데이터의 주소 전달2. 해당 주소에 있는 데이터를 Output으로 받는다. 2024. 9. 29.
2.6 Binary Counters(2) - Binary counter with parallel load Binary counter with parallel load: Clear, Load, Increment(Count)의 값에 따라 서로 다른 연산을 하는 회로         1. Function 구하기 2. funtion table 작성하기 각각 Clear, Load, Increment에 대해 각 값들의 변화에 따라서 어떤 연산을 하는지 살펴보자. ClearClear가 1일 때 Load, Increment의 값과 상관 없이 J = 0 + 0 = 0, K = 1 + 0 + 0 = 1으로 J = 0, K = 1이 된다.따라서 Clear가 1일 때 J = 0, K = 1 이기 때문에 출력값은 모두 0으로 바뀐다. Clear가 0일 때는 Load, Increment의 값에 영향을 받는다. 따라서 우선 Load =.. 2024. 9. 29.
2.6 Binary Counters(1) - 4-bit synchronous binary counter 💡 Counter란 무엇인가?  카운터도 레지스터이다. 이진 값을 저장한다는 것에서 같은 레지스터이지만 카운터는 정해진 상태를 반복하게 되는(Sequence) 레지스터이다.    4-bit synchronous binary counter: 0부터 15까지의 이진수를 클럭 신호에 맞춰 차례로 셀 수 있는 회로   위의 회로를 분석해보자.  분석 순서는 'Function 찾기 -> State table 작성하기 -> State Diagram 작성하기' 이다.  1. Function 찾기 J(0) = K(0) = X J(1) = K(1) = X * A(0) J(2) = K(2) = X * A(0) * A(1) J(3) = K(3) = X * A(0) * A(1) * A(2) Y = X * A(0) * A(1.. 2024. 9. 29.
2.4 ~ 2.5 Registers ~ Shift Registers 💡 Registers란 무엇인가? 레지스터는 이진(binary) 값을 저장하는 소자이다. 이진 값은 0과 1 두 가지 상태만을 가지는 수체계이기 때문에, 레지스터는 이러한 이진 정보를 저장하는 데 사용된다. 좀 더 쉽게 설명하자면, 레지스터는 여러 개의 플립플롭으로 구성된 장치로, 각각의 플립플롭이 1비트의 정보를 저장할 수 있다. 이때, 1비트는 이진 값인 0 또는 1을 의미한다. 예를 들어, 4비트 레지스터라면, 4개의 플립플롭으로 이루어져 있고, 한 번에 4개의 이진 값을 저장할 수 있다. 이 경우, 저장 가능한 값은 0000(이진수)부터 1111(이진수)까지 총 16가지이다. 메모리와는 다르게 빠르게 접근하기 위해서 임시 저장소라고 보면 된다.  4 - bit register: clock의 상태.. 2024. 9. 29.
2.3 Multiplexers(Mux) - 입력들 중 Select로 하나 선택 💡 Multiplexer란 무엇인가? n개의 입력을 받으면 n개의 입력중 1개를 출력을 하는 회로 2 x 1 Mux2개의 입력중 하나만 선택해서 출력하는 것S의 값에 따라 어떤 입력을 선택할지 결정된다. 2^n개의 입력이 있다면 n개의 S가 필요하다.    4 x 1 Mux4개의 입력중 하나만 선택해서 출력하는 것S는 2개가 필요하다. S0, S1 (a)는 4 x 1 Mux의 심볼, (b)는 4 x 1 Mux의 Funtion Table이다.    Quadruple 2 to 1 line Mux : 형태는 2 x 1 Mux (A, B -> Y)이지만 하나의 입력 또는 출력에 4개의 또다른 입력 또는 출력이 있는 Mux   Enable이 1이고, Select가 0이면 A0, A1, A2, A3가 Y0, Y1.. 2024. 9. 28.
2.2 Decoders와 Encoders - 입력들의 조합으로 출력값 도출 💡 Decoder란 무엇인가? n개의 입력을 받아 서로 다른 m개의 출력하는 회로 (n x m decoder 또는 n - to - m line decoder라고 불린다) 일반 적으로 n - to 2^n line 디코더가 많다.  2 x 4 Decoder우선 2 x 4 Decoder의 진리표를 작성해보겠다. 아래와 같이 각 입력에 대해서 서로 다른 출력을 구성한다.  [ 진리표 ]    이제 이 진리표를 기반으로 회로도를 만들어보자.   [ 회로도 ]          경우에 따라 Enable Signal을 추가할 수 있다.  Enable Signal이 있는 2 x 4 Decoder 💡 Enable Signal이란? 디지털 회로에서 특정 회로의 작동을 허가하거나 금지하는 신호를 의미한다. 쉽게 말해 회로.. 2024. 9. 28.
cs231n - lecture06(Trainit NN Part 2) ⭐️⭐️⭐️ NN(신경망)을 Training하는 프로세스 ⭐️⭐️⭐️   1. 데이터의 미니배치를 샘플링전체 데이터 셋에서 미니배치를 샘플링(무작위로 선택)하여 학습에 사용한다. 이는 계산 효율성을 높이고, 매 스텝마다 모델이 다른 데이터에 대해 학습할 수 있도록 한다.  2. Forward pass입력 데이터를 신경망에 통과시켜 출력 값을 얻고, 그 출력 값과 실제 라벨 간의 차이(손실, Loss)를 계산한다. 이를 통해 모델의 예측 성능을 평가한다.  3. Backward pass (역전파)출력층부터 시작해서 각 층의 노드(뉴런)들이 손실에 얼마나 기여했는지를 계산한다. 이를 위해 chain rule(연쇄 법칙)을 사용하여, 출력층에서 손실에 대한 기울기를 먼저 구하고, 그 값을 기반으로 한 층씩 거.. 2024. 9. 28.
cs231n - lecture05(Trainit NN Part 1) NN 구조에 대한 굉장히 쉬운 설명   Input Layer(정보 수집 Team)입력층은 데이터를 처음 받아들이는 층이다. 비유하자면, 이 층의 각 뉴런들은 특정 작업을 담당하는 사람들이 모인 팀이라고 생각할 수 있. A 뉴런은 "나는 이 이미지의 경계를 살펴볼게"라고 하며, 이미지에서 경계 부분을 분석한다.B 뉴런은 "나는 이 이미지의 색상 패턴을 살펴볼게"라고 하며, 색상 정보를 추출한다.C 뉴런은 "나는 이 이미지의 밝기를 볼게"라고 하며, 이미지의 명암을 분석한다.이렇게 입력층의 뉴런들은 각각의 데이터를 분해하여 기본적인 정보(특징)를 분석한다.  Hidden  Layer(중간 관리자 Team)은닉층은 입력층에서 처리된 기본 정보를 기반으로 더 복잡한 특징을 학습한다. 은닉층을 중간 관리자들이 모.. 2024. 9. 28.
2024.09.27 Q&A 1. 수작업 기반 알고리즘 (SIFT, HOG)가 비효율적인 이유 수작업 기반의 SIFT나 HOG가 비효율적인 이유는 아래와 같다. SIFT나 HOG는 이미지 속에서 사람이 직접 정의한 특징(예: 경계, 코너, 모서리 등)을 찾아낸다. 이 과정에서 어떤 특징이 중요한지 사람이 정해야 한다. 사람이 특징을 정하는 과정은 많은 코스트가 들고, 주관적일 수 있어 만드는 사람마다 모델의 성능이 다를 수 있다.또한, 특정 문제에 대한 도메인 지식이 필요한데, 복잡한 문제에서는 사람이 중요한 특징을 정확하게 정의하기 어렵다.이렇게 사람이 수작업으로 진행해야하는데 한계가 생긴다. 그리고 딥러닝 기반의 CNN 모델은 수많은 데이터를 통해서 스스로 특징을 할 수 있다. 따라서 SIFT나 HOG처럼 수작업으로 학습시키는 .. 2024. 9. 27.
cs231n - lecture04(역전파, 신경망) 역전파(Back Propagation)  아래와 같이 x와 W로 total Loss를 구하는 과정을 Computational Graph라고 한다.  이제 역전파를 계산해보자.  대략적인 방식은 아래와 같다.1. 각 local gradient 2. Chain Rule 적용을 위한 gradient들 구하기 3. Input이 마지막 단에 끼치는 영향 구하기 4. 의미파악      우선 아래와 같은 Computational Graph가 있다고 가정하고 역전파 계산하기    1. local gradient 구하기 - Forward Pass에서 Local Gradient를 구한다.   2. Chain Rule 적용을 위한 gradient들 구하기    3. Input이 마지막 단에 끼치는 영향 구하기 - Back.. 2024. 9. 27.
Numpy - 브로드캐스팅 브로드캐스팅(Broadcasting)은 넘파이에서 크기가 다른 배열들 간의 연산을 할 수 있게 해주는 강력한 기능이다. 일반적으로 크기가 같은 배열끼리만 요소별 연산이 가능하지만, 브로드캐스팅은 크기가 다른 배열끼리도 연산이 가능하게 만들어준다..[브로드캐스팅의 동작원리][브로드캐스팅 규칙]두 배열의 차원이 다른 경우, 더 적은 차원을 가진 배열 Shape의 앞쪽은 1로 채워 차원을 증가시킨다.두 배열의 Shape가 일치하지 않는다면, 일치하지 않는 차원의 Shape가 1인 배열이 다른 Shape와 일치하도록 늘어난다.임의의 차원에서 크기가 일치하지 않고, 1도 아닌 경우에는 오류가 발생하다. 1. 더 적은 차원을 가진 배열은 Shape의 앞쪽이 1로 채워져 차원이 증가한다. 두 배열의 차원이 다를 때,.. 2024. 9. 26.
Numpy - Ufunc ufunc는 유니버설 함수(Universal Function)의 약자이며, 넘파이에서 제공하는 빠르고 효율적인 벡터화된 연산을 지원하는 함수들이다. 단, 동일한 크기를 가진 배열끼리만 가능하다. (브로드 캐스팅으로 해결 가능!) ufunc는 배열의 요소별(element-wise)로 작동하며, 일반적인 산술 연산, 비교 연산, 논리 연산 등을 포함해 다양한 수학적 연산을 빠르게 수행할 수 있다.ufunc의 특징배열 연산을 요소별로 빠르게 수행: 파이썬의 루프를 사용하지 않고도 배열 전체에 대해 연산을 빠르게 처리할 수 있다.벡터화된 연산: 반복문 없이 배열 전체에 대해 연산을 수행함으로써 성능을 크게 향상시킨다.브로드캐스팅 지원: 배열 간 크기가 다를 때도 자동으로 크기를 맞춰서 연산을 수행할 수 있다. .. 2024. 9. 26.
Numpy - 배열 내 요소 접근(인덱싱과 슬라이싱) 1. 인덱싱 [1차원 인덱싱]import numpy as np# 1차원 배열 생성arr1 = np.array([10, 20, 30, 40, 50])# 1차원 배열 인덱싱 예시print("첫 번째 요소:", arr1[0]) # 인덱스 0의 요소print("세 번째 요소:", arr1[2]) # 인덱스 2의 요소print("마지막 요소 (-1 인덱싱):", arr1[-1]) # 마지막 요소---------------------------------------------------# 첫 번째 요소: 10# 세 번째 요소: 30# 마지막 요소 (-1 인덱싱): 50  [2차원 인덱싱]# 2차원 배열 생성arr2 = np.array([[1, 2, 3], [4, 5.. 2024. 9. 26.
Numpy - ndarray의 속성 1. dtype: 배열 요소의 자료형 2. ndim: 배열의 차원 (예시: 1차원, 2차원, 3차원) 3. shape: 배열의 모양 (예시: 1x2, 3x4x5) 4. size: 전체 요소의 개수 [예시 코드]import numpy as np# 2x3 배열 생성arr = np.array([[1, 2, 3], [4, 5, 6]])# 각 속성 출력print("dtype (배열 요소의 자료형):", arr.dtype) # 배열 요소의 자료형print("ndim (배열의 차원):", arr.ndim) # 배열의 차원print("shape (배열의 모양):", arr.shape) # 배열의 모양 (행과 열)print("size (전체 요소의 개수):", arr.size) .. 2024. 9. 26.
Numpy - random 표준편차: 표준편차는 데이터의 흩어짐 정도를 나타내는 통계적 지표이다. 평균을 기준으로 데이터가 얼마나 퍼져 있는지를 측정한다. 값들이 평균에 가까울수록 표준편차는 작고, 값들이 평균에서 멀리 떨어져 있을수록 표준편차는 크다. 쉽게 말해, 표준편차가 크면 데이터가 넓게 퍼져 있고, 표준편차가 작으면 데이터가 평균에 가까이 모여 있다는 것을 의미한다.정규분포: 데이터가 평균을 중심으로 좌우 대칭을 이루며 종 모양을 띠는 분포1. np.random.random(shape): 0과 1 사이의 균일 분포에서 난수를 생성하는 함수로, 지정된 모양(shape)의 배열을 반환함. # (2, 2) 크기의 0과 1 사이의 난수 배열 생성arr = np.random.random((2, 2))print(arr)# - 결과 .. 2024. 9. 26.
Numpy - 배열의 생성 1. empty(shape): 지정한 모양의 배열을 생성하지만, 배열의 값은 초기화되지 않음(쓰레기 값 포함). 따라서, shape는 생성되지만 내부 값은 0이 될 수도, 1이 될 수도, 쓰레기 값이 될 수도 있다. np.empty((2, 3))# array([[6.92367847e-310, 6.92367847e-310, 0.00000000e+000],# [0.00000000e+000, 0.00000000e+000, 0.00000000e+000]])  2. array(object): 리스트, 튜플 등 기존 데이터를 배열로 변환한 것. np.array([1, 2, 3])# array([1, 2, 3])   3. zeros(shape): 지정한 모양(shape)의 배열을 0으로 채워서 생성np.z.. 2024. 9. 26.
2024.09.25 - ch1관련 문제 1. 부울식 F를 무관(don't care)조건 d를 이용하여 (1) SOP, (2) POS로 간소화하여라.F(A, B, C, D) = Σ(0, 2, 4, 12, 14)d(A, B, C ,D) = Σ(1, 5, 8, 10) 풀이) 1. 카르노맵 그리기2. SOP는 1로 채운 카르노 맵 사용하기3. POS는 0으로 채운 카르노 맵 사용하기     3-1. F'을 구한다.     3-2. (F')'을 구한다.   SOP = C'D' + AD' + B'D' POS = (F')' = D(A + B' + C')2. D, JK, T Flip-flop의 특성표(동작표)를 작성하라.  3. D, JK, T Flip-flop의 여기표를 작성하라.  4. 다음 그림과 같은 전가산기와 D Flip-flop으로 구성된 순차회.. 2024. 9. 26.
cs231n - lecture03(손실함수, 경사하강법) Loss function(손실함수):  손실 함수는 모델이 예측한 값과 실제 값 사이의 차이를 수치로 나타내는 함수이다. 쉽게 말해서, 모델이 얼마나 틀렸는지 측정하는 도구이다.    1. Multicalss SVM loss - Hinge loss SVM loss를 Hinge loss라고 부르는 이유는 SVM의 손실 함수가 힌지(Hinge) 모양의 특성을 가지기 때문이다.  쉽게 설명하면:x축: S(j)는 예측값(모델이 예측한 점수)S(yi) 는 정답 클래스의 스코어(점수)고, 이걸 기준으로 예측값 S(j)​가 얼마나 맞았는지 판단한다.y축: 이 축은 손실(Loss)을 나타내. 손실 값은 예측이 잘못되었을 때 증가한다.그래프의 해석:파란색 굵은 선이 바로 힌지 로스 곡선이다.그래프가 1에서 꺾이는 지점을.. 2024. 9. 23.