본문 바로가기

전체 글640

3.6 Error detecting code : 에러를 검출할 수 있는 코드 Parity bit: 오류를 검출하기 위해 데이터에 추가하는 비트이다. 전송되는 데이터의 전체 비트 수가 홀수인지 짝수인지 확인할 수 있도록 추가되는 비트 하나이다.  Even Parity(짝수): 전체 비트 수가 짝수가 되도록 Parity bit를 설정하는 방식이다. 데이터의 1의 개수가 짝수가 되도록 Parity bit를 0 또는 1을 추가한다. 예를 들어 데이터가 1 1 0 1이라면, 1의 개수는 3이므로 Parity bit는 1이 되어 전체 bit 수가 4(짝수)가 된다. Odd Parity(홀수): 전체 비트 수가 홀수가 되도록 Parity bit를 설정하는 방식이다. 데이터의 1의 개수가 짝수가 되도록 Parity bit를 0 또는 1을 추가한다. 예를 들어 데.. 2024. 10. 6.
3.5 Other binary codes Gray Code 2024. 10. 6.
3.4 Floating point representation(부동 소수점 표현) : 매우 큰 값 또는 매우 작은 값을 표현하기 위한 방식 예를 들어 매우 큰값은 12340000, 매우 작은 값은0.0001234 같은 수이다.    Floating point representation(부동 소수점 표현)   Bit에 따른 정확도와 E, M의 개수 차이  숫자 범위에 따른 숫자 인코딩 방식 1. NormalizedE(exp)에 해당하는 부분이 0도 아니고, 255도 아닌 경우즉, 0 0 0 0 0 0 0 0도 아니고, 1 1 1 1 1 1 1 1도 아닌경우 10진수 소수를 2진수로 나타내는 방식(STEP) STEP 01) 10진수 소수를 2진수로 변경하기STEP 02) 변경한 2진수를 1.xxx * 2^E 형태로 만들기STEP 03) 부호 비트 채우기 ➡️ 음수라면 1, 양수라면 0S.. 2024. 10. 6.
3.3 Fixed point representation(정수의 표현) : 정수를 2진수로 표현하는 방식에서 음수에 대해서는 어떻게 표현하냐에 대한 내용 음수를 나타내는 방식에는 3가지의 방식이 있다.  1. Signed Magnitude representation        ➡️ 최상위 bit를 부호 bit로 생각해서 최상위 bit가 0이면 양수, 1이면 음수로 결정하는 것 2. Signed 1's Complement representation        ➡️ 1의 보수를 음수로 결정하는 것 3. Signed 2's Complement representation        ➡️ 2의 보수를 음수로 결정하는 것    이제 실제로 3 bit에서 위의 각각의 방식으로 음수를 나타내보자. Signed Magnitude representation0 1 1 ➡️ + 3 0 1 .. 2024. 10. 6.
3.2 Complements(보수) 보수(Complement): 음수에 대한 표현 방식을 이해하기 위해서 배우는 것   위의 정리에서도 작성된 내용이지만 r이 2. 즉, 2진수의 보수를 구한다고할 때 1의 보수 + 2진수 = -12의 보수 + 2진수 = 0사실상 1의 보수는 2의 보수를 구하기 위한 수단이고 1의 보수를 통해서 2의 보수를 구한다는 것은 r의 음수 값을 구한다는 것이다.  2의 보수란 2진수의 음수값을 말하는 것이다!    보수(Complement)를 이용한 뺄셈     실제 값들을 계산해서 감을 익혀보자.    4bit에서 가장 왼쪽의 bit는 부호 비트이기 때문에 실제 4bit는 0~7까지의 숫자만 표현이 된다.  실제 값이 4bit를 모두 사용하는 9 ~ 15사이의 값인 경우 음수로 변경되어 해당 값의 2의보수가 답으.. 2024. 10. 6.
3.1 Data types 10진수, 2진수, 8진수, 16진수       10진수  ➡️  2진수   실수(0.6875)를 2진수로 바꾸는 경우 딱 떨어지는 경우는 많지 않다. 같은 패턴이 무한이 나오거나 계속 다른 패턴이 나오는 경우가 많다!  41.6875를 2진수로 표현한다면, 정수부분을 먼저 구하고 실수부분을 구한 뒤 두 값을 이어준다.41은 1 0 1 0 0 1 이고, 0.6875는 0 . 1 0 1 1 이므로 41.6875는 1 0 1 0 0 1 . 1 0 1 1이다.   8진수  ➡️  2진수 / 16진수  ➡️  2진수    위의 성질을 이용해서 길이가 긴 2진수를 8진수/ 16진수로 쉽게 바꿀 수 있다.    BCD(Binary coded Decimal number): 10진수의 각 숫자를 4bit 2진수로 개별.. 2024. 10. 6.
cs231n - lecture09(CNN의 시각화 및 이해) [CNN의 시각화]   Visualize patches that maximally activate neurons : 어떤 뉴런이 어떤 특징을 학습했는지?를 시각화   위 이미지를 보면 빨간색 뉴런은 사람을 위주로 학습을 했고, 파란색 뉴런은 점을 기준으로 학습을 했고, 초록색은 빨간색을 기준으로 학습을 했다는 것을 시각적으로 알 수 있다. Visualizing Filters and Kernels : 어떤 필터가 이미지의 어떤 특징을 추출하는지?를 시각화 첫번 째 Conv Layer를 시각화 한것이다. Conv2, Conv3부터는 이미지에 대한 것이 아니라 이전 Layer에 대한 값이기 때문에 해석에 용이하지 않다.  Visualizing Representation Space :  CNN이 이미지의 특징을.. 2024. 10. 6.
numpy에서의 구조화된 배열 Structured array이란? 각각의 다른 데이터 타입을 가지는 한가지 데이터 여러개를 담을 수 있는 배열예를 들어 배열 하나의 요소에 이름, 나이, 몸무게를 넣고 싶을 때 사용하는 방식이다.  구조화된 배열을 만드는 방식 중첩 배열과 혼합 아이디를 Int로 갖고, matrix를 Float으로 갖는데 3x3 행렬 형태로 갖는다는 의미이다. 구조화된 배열 사용하기   이렇게 구조화된 배열을 numpy에서 쓰는 것은 효율적이지 않다. numpy는 숫자를 다루기 위해서 나온 라이브러리이기 때문에 다양한 자료형으로 된 배열을 연산하기에는 적합하지 않다. 따라서, 이러한 배열을 처리하기 위해서 padas가 나오게 되었다. 2024. 10. 5.
Sorting sort: 요소를 오름차순으로 정렬argsort: 요소를 오름차순으로 정렬했을 때 각각의 원본의 요소 인덱스를 출력     축(Axis) 기준으로 정렬axis = 0: 열마다 정렬 시킨다.axis = 1: 행마다 정렬 시킨다.    부분 정렬np.partition(배열, num): [0 ~ num-1]는 [num ~ last]보다 확실하게 작은 수로 구성되어 있음을 보장한다. 단, 각 구간 내의 정렬은 보장하지 않는다. 사용예시 - 나는 Top3를 뽑고 싶어 순서는 상관없어!라고 했을 때 부분 정렬 3을 사용하면 상위 3을 바로 추려낼 수 있다.   축 기준으로도 진행할 수 있다. axis = 1인 경우 행을 기준으로 행 마다 가장 작은 2개가 앞으로 오게 되고 나머지는 뒤로 밀려난다.axis = 0인 .. 2024. 10. 5.
Axis 1차원에서의 AxisAxis = 0행을 기준으로 2차원에서의 AxisAxis = 0열을 기준으로(열에서)Axis = 1행을 기준으로(행에서)import numpy as np# 2차원 배열 생성 (3x4 배열)arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])# axis=1일 때 (행을 기준으로 연산)max_in_rows = np.max(arr, axis=1)print(max_in_rows) # 각 행에서 최대값 추출: [4, 8, 12]# axis=0일 때 (열을 기준으로 연산)max_in_columns = np.max(arr, axis=0)print(max_in_columns) # 각.. 2024. 10. 5.
Fancy Indexing Fancy Indexing이란?: 주어진 배열 내에 여러 요소들에 대한 접근을 한번에할 수 있도록 해주는 방법이다.     [기존의 방식]    [Fancy Indexing]  이렇게 인덱스를 만들고 그 인덱스를 x의 인덱스에 넣어서 필요한 값만 가져오는 방식이다. 다차원에서의 Fancy Indexing  이렇게 배열 형태로 인덱스에 넣으면 배열 형태 그대로 배열의 요소들을 인덱싱해서 출력이 된다.   다차원에서의 Fancy Indexing - row, col  row의 요소 인덱스와 col의 요소 인덱스를 같이 인덱스로 넣을 수 있다. 차원이 다른 index인 경우 - 브로드캐스팅np.newaxis이란? NumPy에서 배열의 차원을 확장하는 데 사용하는 도구이다. 즉, 1차원 배열을 2차원 배열로, 2.. 2024. 10. 5.
비교, 마스크, Bool 연산 numpy에서의 비교 연산자 numpy에서 비교 연산자를 사용하면 Bool을 출력해준다. 조건에 부합하는 요소는 True, 부합하지 않으면 False를 출력한다.     비교 연산자와 내장 메소드를 함께 활용하면 더 많은 기능을 수행할 수 있다.  위의 사용 예시를 보면 비교연산자 통해서 조건에 부합하는 값을 모두 True(1)로 변경하고 count_nonzero를 이용해서 1의 개수를 세어 반환해서 조건에 부합하는 요소개 몇 개인지 출력한다.   주의할 내장 메소드로는 sum이 있다.   형태만 보면 6 미만의 요소들을 모두 합해준다고 생각할 수 있지만 그렇게 작동하지 않는다.  비교 연산자를 통해 6 미만의 요소들은 모두 1으로 변환해있는 상태에서 모든 요소를 더해준다.따라서 결과는 count_non.. 2024. 10. 5.
2024.10.04 Q&A Training NN part(1) 1. CNN 전이학습 위처럼 대형 Data Set에서 CNN을 이용해서 Feature map을 추출하고 Feature map을 기반으로 Classifier를 통해서 분류를 했을 때 1000개 Class가 나온다고 가정하자.  하지만 우리가 실제로 필요한 10개라고 했을 때 1000개의 클래스가 아닌 10개의 클래스가 필요하다. 그랬을 때는 모든 학습을 다시 하는 것이 아니라 뒤에 있는 Classifier만 다시 학습해서 대형 Data Set을 통해서 나온 Feature map은 유지하되, Classifier만 다시 학습시킨다.  이게 바로 CNN 전이 학습이다.    2. 활성화 함수를 사용하는 이유CNN이나 다른 신경망에서 선형적인 연산(곱셈, 덧셈)만으로는 복잡한(.. 2024. 10. 4.
cs231n - lecture08(Localization and Detection) [Localization and Detection] Classification vs Classification + Localization Classification은 이 이미지가 고양인지 강아지인지 분류하는 것이고, Classification + Localization는 이 사진에서 고양이가 어디에 있는지 Boxing을 해주는 것이다. Object Detection vs Instance Segmentation Object Detection은 고양이, 강아지, 오리가 어디에 있는지 Boxing해 주는 것이고, Instance Segmentation는 고양이, 강아지, 오리의 형상대로 경계를 따주는 것을 의미한다. 따라서, 우선 Localization, Object Detection에 대해서 다뤄보자! [C.. 2024. 10. 3.
2024.10.02 - ch2관련 문제 2024. 10. 2.
cs231n - lecture07(CNN) [대략적인 CNN 흐름도]   입력층: 데이터를 받아들이는 단계. 주로 이미지 같은 데이터가 들어옴. 합성곱층(Convolutional Layer): 필터를 통해 이미지를 분석하고, feature map(Activation Map)을 생성하는 단계. 활성화 함수(ReLU): 합성곱 연산 결과에 비선형성을 추가해 복잡한 패턴을 학습할 수 있게 하는 단계. 풀링층(Pooling Layer): feature map(Activation Map)의 크기를 줄여 데이터의 양을 줄이고, 중요한 정보만 남기는 단계. 완전 연결층(Fully Connected Layer): 지금까지 얻은 정보를 바탕으로 최종적으로 분류나 예측을 수행하는 단계. 출력층: CNN이 최종적으로 내리는 예측 결과가 나오는 단계. CNN의 원리C.. 2024. 10. 1.
Class(1) - 중첩 클래스와 내부 클래스 중첩 클래스 (Nested Class)inner 키워드 없이 클래스 내부에 선언된 클래스를 중첩 클래스라고 합니다.중첩 클래스는 외부 클래스와 독립적입니다. 즉, 중첩 클래스는 외부 클래스의 인스턴스에 접근할 수 없습니다.외부 클래스와 상관없이 단독으로 인스턴스화할 수 있습니다. 예시:class Outer { val outerValue = "Outer Class" // 중첩 클래스 class Nested { fun nestedFunction() = "Nested Class" }}fun main() { // 중첩 클래스는 외부 클래스의 인스턴스 없이도 사용 가능 val nested = Outer.Nested() println(nested.nestedFunc.. 2024. 10. 1.
Class(1) - 추상 클래스와 인터페이스 추상 클래스(abstract): 추상 클래스는 일부 기능을 미리 구현(abstract 키워드 필요!)할 수 있으며, 나머지 기능은 추상 메소드로 남겨놓아 상속받는 클래스에서 구현하도록 요구할 수 있다. : 완전한 구현과 추상적인 정의를 모두 가질 수 있다. :상속을 통해 기능을 재사용하고, 공통된 동작을 하위 클래스에 제공할 때 유용 // 추상 클래스abstract class Bar { abstract fun foo() // 기능 구현 불가능! 하위 클래스에서 구현해야함 fun bar(){ // 일반 메서드 println("Bar!!!") }}// 상속 받을 떄 () 필수 !!!!!!class Foo : Bar() { override fun foo() { .. 2024. 10. 1.
Class(1) - 상속 상속 (Inheritance)상속에는 클래스 상속과 인터페이스 상속이 있는데 우선 클래스 상속에 대해서만 알아보자. 클래스 상속은 단일 상속이므로 한 부모에게만 상속 받을 수 있다. 부모클래스 명칭super classbase classparent class 자식 클래스 명칭sub class derived classchild calss  부모 클래스를 선언하고 자식 클래스에 상속 하는 과정: 상속이 가능하게 하려면 부모 클래스가 될 클래스 앞에 open이라는 키워드를 작성해주어야한다.   [상속하기 전 3개의 클래스 선언] class Animal { var color: String = "" fun eat(){ println("냠냠") }}class Dog { var col.. 2024. 10. 1.
Class(1) - getter, setter 속성 (getter, setter)값을 읽어오는 것을 getter, 값을 설정해주는 것을 setter라고 한다. 기본적으로 코틀린에서는 프로퍼티를 생성하면 val, var에 따라서 자동으로 getter 또는 setter를 작성해준다. (직접 정의할 수도 있다.) val getter만 생성된다. -> val은 값을 할당할 수 없기 떄문이다.vargetter, setter 모두 생성된다.    getter 정의해보기 class Person() { val name: String = "Kim" get(){ //get() = field로 생략 가능 return field } var age: Int = 24 get(){ //get() = fiel.. 2024. 10. 1.
Class(1) - 클래스 선언과 생성자 클래스 및 객체 // 클랙스 선언 - 캡슐화class Person { // 프로퍼티 val name: String = "Kim" var age: Int = 24 var isMarried: Boolean = false //메서드 fun getName() = println("Your name is ${this.name}")}fun main() { val p = Person() //기본 생성자 호출 //dot-notation println(p.name) //Kim} 이렇게 클래스를 선언하고 main함수에서 클래스의 객체를 선언해서 해당 클래스에 있는 요소들에 접근할 수 있다.   하지만 클래스를 사용하는 이유는 커스텀 타입을 만들기 위해서이다. 즉, 여러 데이터.. 2024. 9. 30.
고급 프로그래밍 기법(1) - 제너릭, Attribute 1. 제네릭(Generic)제네릭 프로그래밍은 클래스나 메소드에서 특정 데이터형에 의존하지 않고, 다양한 자료형을 처리할 수 있도록 프로그래밍하는 기법입니다. 이를 통해 코드 재사용성을 높이고, 자료형에 따른 중복 코드를 줄일 수 있습니다.제네릭의 주요 특징:타입 매개변수: 제네릭 클래스나 메소드에서 사용할 자료형을 미리 정해놓지 않고, 필요한 시점에 구체적인 자료형을 지정할 수 있습니다. 타입 매개변수는 형태로 사용됩니다.장점: 다양한 자료형을 처리할 수 있어 재사용성이 높아지고, 자료형에 따른 중복 코드를 줄일 수 있습니다. 제네릭 클래스 예시:class SimpleGeneric { private T[] values; private int index; public SimpleGene.. 2024. 9. 30.
인터페이스(2) - 인터페이스, 다중상속 1. 인터페이스(Interface)란 무엇인가?인터페이스는 구현되지 않은 메소드, 프로퍼티, 인덱서, 이벤트로 구성된 설계의 표현입니다. 인터페이스는 구체적인 구현 없이 메소드 시그니처만 정의하며, 이 인터페이스를 구현하는 클래스가 그 메소드들을 구체적으로 구현해야 합니다.주요 특징:interface 키워드를 사용하여 선언.다중 상속이 가능함.모든 멤버는 public으로 접근 가능.인터페이스는 객체 자체를 가질 수 없으며, 구현되지 않은 기능만을 정의.인터페이스 선언 예시:interface IShape { void Draw(); double Area();}   2. 인터페이스의 구현인터페이스는 클래스를 통해 구현되며, 인터페이스에 정의된 모든 멤버를 구현해야 합니다. 만약 하나라도 구현하지 않.. 2024. 9. 30.
인터페이스(1) - 파생 클래스, 메소드 오버라이딩, 추상 클래스 1. 파생 클래스 (Derived Class)상속(Inheritance): 상속은 베이스 클래스의 모든 멤버를 파생 클래스로 전달하여, 코드의 재사용성을 높이는 기능입니다. C#에서는 단일 상속만 지원하며, 하나의 베이스 클래스로부터만 상속할 수 있습니다.파생 클래스의 정의 예시:class BaseClass { int a; void MethodA() { // ... }}class DerivedClass : BaseClass { int b; void MethodB() { // ... }}base 지정어: 베이스 클래스의 생성자나 메소드를 호출할 때 base 키워드를 사용합니다.만약 상속받은 클래스의 값을 사용하고 싶다면 base.a 이런식으로 사용하.. 2024. 9. 30.
클래스(2) - 메소드 / 연산자 오버로딩, 생성자, 인덱서, 프로퍼티 1. 메소드 중복 (Method Overloading) 메소드 시그니처(Signature): 메소드를 구분하는 정보로 메소드 이름, 매개변수 개수, 매개변수 자료형을 포함합니다. 반환형은 시그니처에 포함되지 않습니다.메소드 중복: 같은 이름의 메소드를 여러 개 정의할 수 있으며, 매개변수의 개수나 자료형이 다르면 다른 메소드로 취급됩니다. 이를 통해 같은 이름의 메소드를 다양하게 활용할 수 있습니다. 예시 코드:class MethodOverloadingApp { void SomeThing() { Console.WriteLine("SomeThing() is called."); } void SomeThing(int i) { Console.WriteLine("SomeT.. 2024. 9. 30.