본문 바로가기

분류 전체보기564

cs231n - lecture02(이미지 분류, KNN, Linear Classification) 이미지 분류(Image Classification) 이미지는 기본적으로 3차원 배열로 구성된다. 즉, 높이 x 넓이 x RGB(0~255) 이렇게  3차원 배열로 구성된다.하지만 이미지를 보는 시각에 따라서 이미지는 다르게 보일 수 있다. 예를 들면 밝기의 차이, 형태의 차이, 물체에 가려진 유무, 배경과 같은 색상의 이미지 객체, 여러 이미지 객체 등 시각에 따라서 다르게 보인다. 각기 다른 시각에서 나오는 이미지들을 3차원 배열로 구성했을 때 숫자값의 큰 격차가 생기게 된다. 이를 Sematice gap이라고 한다.   우선, 기본적인 Image Classification 함수는 아래와 같다.def predict(image): # Some magic here return class_labe.. 2024. 9. 22.
1.7 Sequential circuit - 순차회로의 설계 이전에 우리는  순차회로 분석을 통해 이 회로에는 어떤 기능이 있는지를 알 수 있었다. 이번에는 순차회로 설계를 해보자. 순차회로 설계는 분석의 역순이다.즉, 분석에서는 "회로 -> function -> table -> diagram -> 성능" 이었다면,설계에서는 "성능 -> diagram -> table -> function -> 회로" 순으로 성능을 보고 회로를 만들어보자. 0. 성능JK F-F을 이용한 회로이다.Binary Conter이다. (Binary Conter는 2 bit 카운터라는 뜻이다. 즉, F-F이 2개 필요하다는 이야기다)00, 01, 10, 11 순으로 증가되고 11에서 증가하면 00으로 돌아간다. 이 과정은 반복된다.X = 0일 때 값은 변경되지 않는다.1. 다이어 그램 그리기.. 2024. 9. 22.
1.7 Sequential circuit - 순차회로의 분석 순차회로(Sequential circuit)란?출력이 현재의 입력뿐만 아니라 이전 상태에도 의존하는 디지털 회로이다.  이제 우리는 이 순차회로도가 주어지면 그 회로도를 보고 어떤 입력들이 왔을 때, 어떤 값을 출력하는지에 대한 분석을 해보려고 한다. [분석 방법]1. 회로도를 보고 각 플립플랍과 출력에 대한 function 도출하기2. 도출된 function을 바탕으로 State table 도출하기3. State table을 바탕으로 State diagram 만들기 아래 JK flip-flop 순차회로를 바탕으로 분석을 해보자!    1. function 도출하기우선, 각 플립플랍과 출력에 대한 function을 도출해야하지만 현재 출력은 없기 때문에 각 플립플랍에 대한 function만 도출해보자. .. 2024. 9. 22.
1.6 Flip-flop(SR, D, JK, T) - 암기 플립 플랍이란? 1비트의 데이터를 저장하거나 기억할 수 있는 기본적인 메모리 소자이다. 플립플롭은 클럭(C) 신호에 따라 입력 값에 기반한 상태를 저장하거나 출력으로 내보내며, 상태가 바뀌기 전까지 그 값을 유지하는 특징이 있다. 즉, 아무리 입력값을 넣어도, 클럭(C)이 변경되지 않는다면 출력 값은 변경되지 않는다. SR flip-flop(Set Reset): input(S, R)이 주어진 상태에서 C가 상승하거나 하강할 때 Q가 변경된다. 이러한 점을 이용한다면 C가 변하지 않는 동안 이전 Q를 기억할 수 있게되는 저장장치가 된다. 단점이 있는데 S=R=1인 경우는 성립될 수 없다. (입력과 초기화를 동시에 누른다고 생각해보자)         D flip-flop(Data, Direct): input.. 2024. 9. 22.
1.6 Flip-flop을 하기전 래치에 대해서 https://blog.naver.com/tb_elec_engineer/221034769694 디지털논리회로 11장 래치와 플립플롭※학부생으로 공부하면서 작성한 것이기 때문에 틀린 내용이 있을 수 있습니다 보실 때 그 점 유의하시면서...blog.naver.com 정리를 잘 해놓으신 분이 있어서 가져왔다.   SR Latch  즉, SR 래치의 의미는 데이터를 기억하고 저장하는 역할을 하는 회로라는 것이다. 디지털 시스템에서 데이터를 기억하는 기본 단위로 사용되며, 이를 바탕으로 더 복잡한 저장 장치와 회로가 만들어진다.  S는 Set을 의미하기 때문 S가 1이 되면  Q+는 1이 된다. R은 Reset을 의미하기 때문에 R이 1이 되면 Q+는 0이된다.    D Latch D 래치(D Latch)는 1.. 2024. 9. 21.
1.4 Map simplification(4) - Don't care conditions Don't care conditions이란?기존 function을 카르노 맵에 작성한다면 항상 1이 되는 값만 카르노 맵에 작성했다. 하지만 Don't care conditions는 1이 되어도 되고, 0이 되어도 된다.   예시 문제F(w, x, y, z) = ∑(1, 3, 7, 11, 15)Don'care conditions, d(w, x, y, z) = ∑(0, 2, 5) 이렇게 주어지면 카르노맵에는 1, 3, 7, 11, 15부분에는 1을 필수로 작성하고 0, 2, 5부분에는 X를 작성해주어야한다. X는 1로 사용해도 되고 사용하지 않아도 된다.  중요한건 X를 활용해서 최대한 식을 최소화하는 것이다.  위의 맵을 간소화 하면 A'B'D + CD가 된다. 하지만 아래 Don'care conditi.. 2024. 9. 21.
1.4 Map simplification(3) - NAND, NOR Sum of products를 NAND만 있는 논리회로로 변경하기  NAND(Not AND)(XY)' = X' + Y'즉, 이 말의 의미는 X와 Y의 AND의 ' 도 NAND, X'와 Y'의 OR도 NAND라는 의미이다.따라서 위 오른쪽 사진은 모두 NAND로 이루어진 회로이다.  Products of sum 를 NOR만 있는 논리회로로 변경하기 NOR(Not OR)(X + Y)' = X'Y'즉, 이 말의 의미는 X와 Y의 OR의 ' 도 NOR, X'와 Y'의 AND도 NOR라는 의미이다.따라서 위 오른쪽 사진은 모두 NOR로 이루어진 회로이다. 문제에서 NAND게이트로 만들어라-> SOP를 구하고 SOP를 기반으로 NAND게이트를 만들어라 문제에서 NOR게이트로 만들어라-> POS를 구하고 POS를 기.. 2024. 9. 21.
1.4 Map simplification(2) - 카르노 맵 카르노 맵 사용법 최소항이 1인 곳에 1을 넣어주고 나머지는 0을 넣어준다.셀을 묶는다.셀은 2, 4, 8 단위로 묶을 수 있다.묶을 때 셀의 개수는 최대한 많이, 묶음은 최소한 적게 만들어주어야한다.묶음끼리 OR연산을 해준다.  문제 예시   빨간 부분A: A에만 있고, A'에는 없다. 따라서 AB: B에도 있고 B'에도 모두 걸쳐져있다. 이렇게 되면 B에 해당하는 것이 아무것도 없다.C: C'에만 있고, C에는 없다. 따라서 C'결론: AC'노란 부분A: A에도 있고 A'에도 모두 걸쳐져있다. 이렇게 되면 A에 해당하는 것이 아무것도 없다.B: B에만 있고, B'에는 없다. 따라서 BC: C에만 있고, C'에는 없다. 따라서 C결론: BC 따라서 해당 부분을 모두 OR 연산처리 하면 BC + AC' .. 2024. 9. 21.
1.4 Map simplification(1) - minterm Minterm(최소항): 모든 항이 들어가는 조합(AND) SOP(Some of Products): OR로 연결된 AND [예시]F = Y' + XY + X'Y'Z' POS(Product of Sums): AND로 연결된 OR [예시]F = Y'(X + Y)(X' + Y' + Z') Sum of minterms: OR로 연결된 mintermF(x, y, z) = y’ + xy + x’yz’                 = y’(x + x’) + xy(z + z’) + x’yz’                 = xy’ + x’y’ + xyz + xyz’ + x’yz’                 = xy’(z + z’) + x’y’(z + z’) + xyz + xyz’ + x’yz’             .. 2024. 9. 21.
1-3. Boolean algebra Boolean function: Boolean algebra에서 사용하는 수학 수식 Truth table(진리표): 논리 회로나 논리 연산에서 모든 가능한 입력 조합에 대한 출력 결과를 보여주는 표 Logic circuit: Boolean function 또는 True table(진리표)를 바탕으로 여러 논리 게이트를 통해서 만들 수 있다.   [Boolean algebra의 기본 성질]  Law of Addition과 Law of Multiplication은 서로 dual 관계이다.dual관계란 OR연산이 AND연산이 되고, AND연산이 OR연산이 되는 것, 0이 1이 되고, 1이 0이 되는 관계를 의한다.  [Distributive Law]x + yz = (x + y)(x + z)에 대해서 살펴보자x.. 2024. 9. 21.
1-2. Logic gates [XOR]  [XNOR] 2024. 9. 21.
cs231n - lecture01(컴퓨터 비전의 역사) 시대에 따른 컴퓨터 비전의 역사  [기원전 5억 4천 3백만 년] 생물의 종이 굉장이 다양해지는 '진화의 빅뱅'의 가장 유력한 이론이 바로 5억 4천만년 전 최초의 눈이 생겨났다는 것이다. 눈이 생겨났다는 건 아래의 상황을 초래한다.1. 생물의 삶이 능동적으로 바뀌고 그 결과, 일부 포식자들은 먹이를 찾아 다니고 먹이들은 포식자로부터 달아나는 상황 발생2. 먹이들은 살아남기 위해서 빠르게 진화한다.3. 기존의 종들이 진화하면서 생물의 종이 굉장히 다양해진다. Vision은 지능을 가진 동물들의 가장 큰 감각 체계로 발전했다. Vision은 우리가 생존하고, 일하고, 움직이고, 어떤 것들을 다루는 여러 행위를 가능하게 해준다. 따라서, Vision은 굉장히 중요하다.  [1959년 - Hubel & Wie.. 2024. 9. 21.
Kotlin_Basic03 - when(2) when을 사용할 때 우리는 꼭 필수적으로 사용한 코드가 있다. 바로 else이다.하지만 변수의 범위를 명확하게 만들면 else는 필요없다. (물론 사용해도 됨) 그 예시로는 enum과 sealed classe가 있다.enum과 sealed class를 각각 사용한 예시1. enum class 사용 예시enum class는 상수들을 정의할 때 사용되며, 상태나 값을 구분할 때 매우 유용하다.enum class Direction { NORTH, SOUTH, EAST, WEST}fun describeDirection(direction: Direction): String { return when (direction) { Direction.NORTH -> "You are heading N.. 2024. 9. 20.
Kotlin_Basic03 - when(1) 코틀린에서 when 문법은 조건에 따라 여러 분기처리를 할 수 있는 강력한 제어 구조이다.when은 switch 문과 비슷하지만 더 유연하고 강력하게 사용할 수 있다. 주로 값을 매칭하거나 조건을 검사할 때 사용된다.기본 형태val value = 2val result = when (value) { 1 -> "One" 2 -> "Two" 3 -> "Three" else -> "Unknown"}print(result) // Twovalue가 1일 경우 "One", 2일 경우 "Two", 3일 경우 "Three"를 반환하고, 그 외의 값은 "Unknown"을 반환한다.else는 기본적인 값을 처리할 때 사용되며, 반드시 포함해야 한다(모든 경우의 수를 처리하지 않을 경우). 여러 조건 처.. 2024. 9. 20.
Kotlin_Basic03 - null 처리 우리는 변수에 값이 null일수도 있고 아닐 수도 있는 경우를 위해서 nullable 타입을 사용해왔다. 다만 이 타입을 사용한 변수를 사용할 때는 늘 이 변수가 null 값을 가질 수 있다는 생각에 안전조치를 해야했다. val str1: Any = "hello"val str2: Any = nullfun checkTypecast(s: Any?): Sting? { val newStr = s as? String ?: return null if(newStr.isNotEmpty()){ return newStr.lowercase() } return ""} 이렇게 위와 같이 as 연산자를 이용하든, 변수를 사용하든 ?를 붙여줘야 했다. 하지만 이런 수고를 덜어줄 수 있는 방법이 있다. .. 2024. 9. 20.
Kotlin_Basic03 - if 식 if문은 흔히 많이 들어본 분기문이다.  그러면 if 식은 뭘까? if식은 if문과 마찬가지로 조건에 따라 블록 내부의 코드가 실행되는 것은 같다. 다만, 코드 블록 값이 어떤 변수에 저장된다는 점이 다르다 val a = 9val b = 8val max = if(a >= b) a else b 이런 식으로 진행하면 a가 b보다 크거나 같을 경우 a가 max에 입력되고 아니면 b가 입력된다. 위 처럼 간단하면 블록 없이 해도 괜찮지만, 복잡하다면 블록을 만들어서 진행하면된다.val a = 9val b = 8val max = if(a >= b) { a } else { b}  하지만 여기서 주의할 점은 블록 내부 마지막 코드가 변수에 저장되기 때문에 마지막 코드는 꼭 저장할 변수 또는 수를 작성해야한.. 2024. 9. 20.
Kotlin_Basic03 - 연산자 오버로딩 연산자 오버로딩을 사용하는 이유: 기본적으로 코틀린은 기본 타입(int, float, double, ...)에 대해서만 연산자가 적용되어 있기 때문에 커스텀 타입에 연산자를 사용하기 위해서 사용한다.: 🚨 유의할 점은 operator 키워드는 꼭 붙여줘야한다. 🚨 예시1 - times(곱셈)커스텀 타입 생성하기class Point(val x: Int, val y: Int) {}  커스텀 타입에서 곱셈 오버로딩하기//[방법 1 - 클래스 내부]class Point(val x: Int, val y: Int) { operator fun times(p: Point): Point { return Point(this.x * p.x, this.y * p.y) // [설명] .. 2024. 9. 20.
파일에서 데이터 불러오기 2024. 9. 20.
유용한 파이썬 함수들 - len(), map(), filter(), zip(), reduce(), enumerate() len(): 리스트, 문자열 등 자료의 길이 반환 map(): 리스트 내 각 요소들에게 동일하게 간단한 연산을 적용할 때 사용: 주로 이름 없는 람다 함수로 연산을 정의하고, 이를 각 요소에 적용하도록 하는 형태가 많이 사용됨# 기본 형태list(map(변경할 타입, 리스트 명))list(map(lambda 변경할 형태(람다함수), 리스트명))# 활용a = [1, 2, 3, 4, 5]list(map(str, a)) # ['1', '2', '3', '4', '5']b = [1, 2, 3, 4, 5]list(map(lambda x:x+1, b)) # [2, 3, 4, 5, 6] filter(): 리스트 내 요소 들을 특정 기준으로 필터링(즉, 특정 기준을 만족하는 요소만 추출하도록)할 때 사용 # 활용a =.. 2024. 9. 19.
컬렉션 - Dict, Set Dictionary: key, value를 쌍으로 이루는 데이터 콜렉션 타입 # 기본 형태person = dic()person['kim'] = 1person['park'] = 2# 또는person = {'kim': 1, 'park': 2} [딕셔너리 내 원소 접근] person = {'kim': 1, 'park': 2}print(person['kim']) # 1  [딕셔너리의 자료 존재 여부 검사]person = {'kim': 1, 'park': 2}print('kim' in person) #Trueprint('choi' in person) #False  [딕셔너리 내장 메소드]다음은 파이썬 딕셔너리 내장 메소드의 정리이다.1. `keys()`     딕셔너리의 모든 키를 반환한다.2. `values().. 2024. 9. 19.
순서열 -List, tuple 순서열: 여러 개의 데이터를 순차적으로 나열해놓은 자료구조 List: 순차적 데이터의 저장을 위해 사용되는 자료구조 / 순서 O, 수정 O a = [1, 2, 3, 4, 5]# 또는a = list((1, 2, 3, 4, 5))  [리스트 내 원소 접근]: 데이터의 위치 번호를 사용하여 리스트 내 원소 데이터로 접근하는 방법a = [1, 2, 3, 4]a[0] # 1  🚨 음수 인덱스?: 음수 인덱스는 List의 길이에서 뺀 값으로 접근한다.a = [1, 2, 3, 4]a[-1] # 4# a[-1] == a[len(a)-1] == a[4-1] = a[3]  ❓슬라이싱: List의 범위 내 모든 데이터를 접근# 기본 형태list[start:end:inteval] # -> (start   # 사용 방법a =.. 2024. 9. 19.
실습예제 3 보호되어 있는 글 입니다. 2024. 9. 18.
실습예제2 보호되어 있는 글 입니다. 2024. 9. 18.
실습예제 1 보호되어 있는 글 입니다. 2024. 9. 18.
6-3. 배열 분할 - vsplit, hsplit https://colab.research.google.com/drive/1bk-zEuO0F5ObM6_b-cVuZmQ-QVyBgnWL?usp=sharing 2024. 9. 18.
6-2. 배열 간의 병합 - append, vstack, hstack, concatenate https://colab.research.google.com/drive/1bWAZHKc4OApTX36SXIkqgKj1ziLmU2HV?usp=sharing 2024. 9. 18.
6-1. 배열의 원소 추가 및 삭제 - insert, delete https://colab.research.google.com/drive/1u_j5N9yZ9DmVePfWId6G3Pox8P_8Cjjd?usp=sharing np6-1.ipynbColab notebookcolab.research.google.com 2024. 9. 18.
5-2. 전치행렬 https://colab.research.google.com/drive/1MR94WFnt8S0rat0842jha6N3vZ3Ylsup?usp=sharing 2024. 9. 17.
5. 배열의 형태 변경 - reshape, resize, ravel https://colab.research.google.com/drive/1oYCocVqsIoH4pqZ20hdice2w-e5mYTyI?usp=sharing 2024. 9. 17.
4. 배열의 정렬 https://colab.research.google.com/drive/1mah70iE0KQMzbU8V0BWkNFvWLgMIJqOK?usp=sharing 2024. 9. 17.