본문 바로가기

분류 전체보기640

Class(2) - Object Object란?싱글톤 객체를 정의하거나 익명 객체를 생성하며, 동반 객체를 통해 클래스이 정적 멤버처럼 사용되는 특수한 객체를 만드는 키워드이다. 즉, object를 사용해서 3개의 기능을 얻을 수 있다. 싱글톤, 동반 객체, 무명 객체 이렇게 3개의 기능이 있다.  1. object - singleton클래스는 원래 한개로 여러개의 객체를 만들 수 있다. 하지만 class 키워드 대신에, object를 사용하면 객체가 한개만 만들 수 있다. object Button { var clicked = 0 fun onClick() { clicked++ }} 이렇게 생성할 수 있다. object를 사용할 때는 객체가 하나만 생성이 되기 때문에 따로 객체를 생성하지 않고 사용할 수 있다.. 2024. 10. 11.
2024.10.11 Q&A [lecture09]  1. Deconvolution이란? : Deconvolution 분류결과를 통해서 이미지를 생성하는 것이다. 즉, 원래는 이미지를 CNN처리를 하면 이미지에 맞는 분류 결과가 온다. 이를 반대로 진행해서 분류 결과를 통해서 분류 결과에 맞는 이미지를 생성하는 것이다.  예를 들어 고양이와 강아지로 분류를 한 모델이 있다고 가정하고, 우리는 고양이에 대해서 관심이 있는 상태라고 생각해보자.그러면 강아지 관련된 뉴런의 경사는 0으로 만들고, 고양이에 대한 경사는 1로 만들어서 역전파를 진행한다. 이렇게 진행하면 아래와 같은 고양이와 닮은 약한 이미지가 생성된다.  2.  Deconvolution의 목적 위의 과정을 진행하면 결국 결과 값으로는 해당 모델이 고양이라고 생각하고 있는 이미.. 2024. 10. 11.
익명 함수 람다식은 익명함수의 하나이다. 그러면 익명함수는 뭘까?익명함수란 말 그대로 이름이 없는 함수이다. 즉 함수와 선언 방식이 비슷하다.  기본 구조: 일반 함수에서 함수명만 없애면 익명함수이다.변수명 = fun(변수1: 타입, 변수2: 타입): 반환 타입 = 함수 식   실제로 만들어보자. //[일반적인 함수]fun myPureFunc(a: Int, b: Int): Int{ return a+b}//[람다식]val myLambda:(Int, Int) -> Int = {a: Int, b: Int -> a+b}//[익명 함수]val myAnonymous = fun(a: Int, b: Int): Int = a + b 2024. 10. 11.
확장함수(Extension Funtions) 확장함수기존 클래스에 새로운 기능을 추가하는 방법이다.클래스를 수정하지 않고 새로운 메소드를 정의할 수 있게 해준다.  확장 함수의 기본 문법fun 클래스명.함수명(파라미터들): 반환타입 { // 함수의 본문}    사용 예시fun main(){ println("010-1234-5678".extract { it.isDigit() })}fun String.extract(cond: (Char) -> Boolean): String { val sb = StringBuilder() this.forEach { if (cond(it)) sb.append(it) } return sb.toString()} cond: (Char) -> Boolean은 문자 하나를 받아서 Boolean.. 2024. 10. 11.
람다식(2) - it, _ 사용 람다식의 타입 생략람다식을 선언했을 때 타입을 선언할 수 있는 경우가 있다.  타입을 생략하지 않은 경우val myLambda:(Int, Int) -> Int = {a: Int, b: Int -> a+b} 람다식 자체의 타입을 생략하는 경우 (일반적으로 많이 사용하는 경우)val myLambda = {a: Int, b: Int -> a+b} 람다식 내부 입력 변수 타입을 생략하는 경우val myLambda:(Int, Int) -> Int = {a, b -> a+b}    일반적인 함수와 람다식 사용의 차이 //일반적인 함수fun myFun(i: Int): Int = i * 10fun main() { val times = ::myFun println(times(2)) //20} //람다식fun .. 2024. 10. 10.
람다식(1) - 기본적인 선언과 호출, 고차함수와의 사용 람다식이란?람다식이란, 이름이 없는 함수를 간결하게 표현하는 방식이다. 기본 구조변수명: 입력 타입 -> 반환 타입 = {매개변수 -> 함수본문}  적당한 예시로 더하는 일반적인 함수를 람다식으로 변경해보자.//[일반적인 함수]fun myPureFunc(a: Int, b: Int): Int{ return a+b}//[람다식]val myLambda:(Int, Int) -> Int = {a: Int, b: Int -> a+b}// 타입 생략 가능val myLambda:(Int, Int) -> Int = {a, b -> a+b} 이렇게 일반적인 함수를 간단하게 함수이름 없이 람다식으로 간단하게 표현할 수 있다. 람다식의 호출 람다식을 직접 활용해서 호출하는 방법fun main() { val myLa.. 2024. 10. 10.
고차함수(2) - 응용편 고차 함수란 일급 함수라고 했다. 즉, 변수가 함수 역할을 할 수 있다. 일급 함수라는 점을 이용해서, 변수에 함수를 참조해서 변수를 통해서 해당 함수를 사용해보자. 일급 함수를 이용한 고차함수의 활용경우 - 1val strToLower: (String) -> String = String::lowercase//String 클래스의 lowercase 메소드를 사용해서 해당 메소드이 인자로 String을 전달하고 결과를 String으로 받아오는 변수val s: String = "My Lovely Baby"println(strToLower(s)) //my lovely baby 이렇게 변수가 함수 역할을 할 수 있다는 점을 이용해서 String 클래스의 lowercase 메소드를 참조하여 해당 변수를 이용해서 .. 2024. 10. 10.
고차함수(1) - 선언과 사용 고차함수란?일급 함수이면서 일급객체를 사용할 수 있는 것이다. 일급 함수란 함수가 변수 역할을 하는 것이고, 일급 객체란 함수의 실 인자로 사용할 수 있으며, 함수의 반환 값으로도 사용할 수 있는 것이다.   일반 함수와 고차함수의 차이// 일반 함수fun multiply(a: Int, b: Int): Int { return a * b} 일반 함수는 위와 같이 변수만 인자로 받아서 그 변수들을 통해 연산을 해서 값을 반환한다.  fun multiply(a: Int, b: Int, hfunc:(Int, Int) -> Int): Int { return hfunc(a, b)} 하지만 고차함수는 함수를 인자로 받을 수 있다. 즉, 인자로 전달 받은 함수와 전달 받은 변수의 값들을 이용해서 값을 반환한.. 2024. 10. 10.
Kotiln - 함수 함수의 기본 형태fun 함수이름(매개변수: 매개변수 타입) : 반환 타입 { //함수 동작}   Top-level function과 member functionclass Shape { fun calculateArea_method(w: Int, h: Int, ): Int { // member function = method return w * h }}fun calculateArea_top_level(w: Int, h: Int, ): Int { // top-level function return w * h}  Top-level function: 클래스 밖에 생성된 함수Member function: 클래스에 속한 함수 가변 인자: 인자의 개수가 달라질 수 있다. fun acc.. 2024. 10. 10.
개인_실습(DataFrame) 2024. 10. 10.
데이터 프레임 특정 열 삭제 하는 방법 df = df.drop('열 이름', axis=1) 2024. 10. 10.
[pandas] Missing value 다루기 Missing value란?: 다양한 원인으로 있는줄 알았지만 없는 데이터. 즉, NaN 또는 None Missing value 관련 내장 메소드  Missing value 탐지 Missing value가 존재하는지 - isnull()Missing value 가 없는지 - notnull()Missing value 삭제 Missing value가 있는 행을 삭제 - dropna() Missing value가 있는 열을 삭제 - dropna(aixs = 'columns') 행 또는 열이 모두 Missing value일 때, 삭제 - dropna(aixs = 'columns', how = 'all')행 또는 열의 Missing value 개수가 n개 미만일 때, 삭제 - dropna(aixs = 'column.. 2024. 10. 10.
데이터 프레임 인덱싱하는 방법 행과 열에 있는 데이터 접근데이터 프레임 명.loc[행 이름, 열 이름]조건에 해당하는 행의 데이터에 접근데이터 프레임 명.loc[조건] 조건에 해당하는 행의 데이터애서 특정한 열에 접근데이터 프레임 명.loc[조건, 열의 이름] 2024. 10. 10.
Week6 - 실습 문제 풀이) 랜덤 정수 값을 이용해서 데이터를 만들어야하기 때문에, 행의 이름들과 열의 이름들을 따로 만들어주고 데이터 프레임을 제작해야했다.따라서 반복문을 이용해서 rows, cols의 리스트를 생성하고, 아래의 생성 방식으로 데이터 프레임을 생성하였다. df = pd.DataFrame(데이터 프레임의 데이터, index = '행의 이름들', columns = '열의 이름들')    문제 풀이)  axis = 1은 열끼리의 연산을 진행하는 것이다. 즉, C1, C2 ... C10까지의 연산이다. 따라서 각 행의 열들의 값의 평균을 구하고 'mean'이름의 열에 평균들을 추가했다.     우선 pass 컬럼을 만들고 모두 Y로 초기화주었다.그리고 이중 반복문을 이용해서 각 행을 인덱싱하고, 해당 행의 각.. 2024. 10. 10.
4.7 Arithmetic logic shift unit S들의 값에 따라서 산술 연산 부터 로직 연산까지 사용할 수 있는 회로이다. 2024. 10. 9.
4.6 shift micro-operations shift micro-operations   오버플로우Shift는 곱하기 2 또는 나누기의 효과를 가져온다. 따라서 쉬프트를 하면 부호는 변경되지 않는다. 따라서 Logical Shift, Circular Shift를 했을 때, 최 상위 비트인 부호비트는 변경되면 안된다.  따라서, Shift를 하기 전에, 최상위 비트와 이전 비트의 값이 다르다면 오버플로우가 발생한 것으로 간주한다! 2024. 10. 9.
4.5 Logic micro-operations 논리 마이크로 연산은 비트간의 연산이다. 예를 들어 R1 = 1 0 1 0, R2 = 1 1 0 0일 때, P: R1 P가 1일 때 R1은 0 1 1 0이다.    16 different binary logic operations   Hardware implementation: S1, S2 총 2개의 Input의 조합으로 AND, OR, XOR, NOT 연산을 선택할 수 있다.   Logic micro-operations의 응용 2024. 10. 9.
4.4 Arithmetic micro-operations(산술 마이크로 - 연산) 우리가 앞서 했던 레지스터간의 데이터 전달도 마이크로 연산이다. 데이터 전달 이외의 Arithmetic, Logic, Shift 마이크로 연산이 있다. 이번 장에서는 산술 마이크로 연산에 대해서 알아보자.     ADDSUBTRACT M = 0일 때, B(i) ⊕ 0 = B(i)이기 때문에 위에 있는 ADD의 회로와 같은 역할을한다.M = 1일 때, B(i) ⊕ 1 = B(i)'이기 때문에  A(i) + B(i)' + C0이다. 즉, A(i) + B(i)의 1의 보수 + 1 ==  A(i) + B(i)의 2의 보수이다.따라서 M = 1일 때는 A(i) - B(i)이다.  INCREMENT  Total Arithmetic Circuit  Decrement A에서 Y의 값은 1인데, 왜 Out은 A -1 일.. 2024. 10. 9.
4.3 Bus and memory transfer BusBus라는 것은 공통 라인의 set이라고 보면된다. 즉, 여러 장치를 공유하는 통로라고 생각하면된다. Bus는 복수개의 레지스터의 데이터 전송을 효율적으로 나타내기 위해서 사용한다. 예를 들어, 컴퓨터 안에서 CPU, RAM 등 다른 장치들이 서로 데이터를 주고받을 떄, 각각의 장치가 따로따로 연결되어 있으면 매우 복잡해진다. 그래서 여러 장치들을 하나의 Bus를 사용해서 데이터를 주고 받는다. 이렇게 Bus는 일종의 공유하는 도로 같은 역할을 하며, 이 도로를 통해서 다양한 장치들이 데이터를 동시에 주고 받을 수 있다.   Bus의 회로도(Mux)   S1 S0MUX 0(f)MUX 1(f)MUX 2(f)MUX 3(f)Register10 0A0A1A2A3A20 1B0B1B2B3B31 0C0C1C2C.. 2024. 10. 9.
4.2 Register transfer Clock pulse가 상승이고, Load가 1일 때 R1에서 R2로 데이터를 전달한다. (병렬 연결로 구현가능)   위의 상황을 Register transfer language로 작성하면 아래와 같다.  Register transfer language에 대해서 자세하게 살펴보자. Register transfer language Register에 대한 표현알파벳과 숫자의 조합으로 나타낼 수 있다.예) MAR, R2, R1레지스터의 파트(비트 수, 상위 & 하위 비트)에 대한 표현비트 수의 예시 - R2(0-7)상위 비트 예시 - R2(H)하위 비트 예시 - R2(L)데이터의 전송에 대한 표현➡️⬅️동시에 일어나는 연산에 대한 표현, 2024. 10. 9.
4.1 Register transfer language 컴퓨터 구조에서 레지스터 전송은 매우 중요한 개념이다. 레지스터는 데이터를 일시적으로 저장하는 고속의 작은 메모리이며, CPU의 작업 처리 과정에서 필수적인 역할을 한다. 레지스터 간의 데이터 이동을 효율적으로 표현하는 것은 시스템의 성능을 최적화하는 데 중요한 요소이다.레지스터 전송을 효과적으로 표현하는 방법에는 마이크로 연산(Micro-Operation)이 사용된다. 마이크로 연산은 레지스터 간의 데이터 이동, 연산, 메모리 접근 등의 기본 작업 단위를 의미하며, 이는 CPU가 실행하는 명령어를 더 세부적으로 나누어 처리할 수 있도록 돕는다. 이와 같은 내용은 컴퓨터의 동작 원리와 밀접하게 연결되어 있으며, 5장에서 배울 컴퓨터 구조를 이해하는 데 중요한 기초 개념이다. 4장에서는 이러한 레지스터 전.. 2024. 10. 9.
cs231n - lecture10(RNN) Recurrent Neural Networks (RNN)  기본적인 NN: Input Layer와 Output Layer는 순서가 없지만, 각각에 대해서는 순서가 있다고 처리를 할 수 있다 Image Captioning: 이미지를 보고 그에 맞는 설명을 자동으로 생성하는 기술. Sentiment Classification: 문장의 감정을 분석하여 긍정적인지 부정적인지를 분류하는 기술. Machine Translation: 한 언어로 된 문장을 다른 언어로 번역하는 기술. Video classification: 비디오의 각 프레임을 분석하여 그 내용을 분류하는 기술. 비디오에서 중요한 것은 예측이 현재 시점의 프레임만 하는 것이 아니라 과거의 모든 프레임에 대한 처리가 되어야한다. RNN 작동 원리  RN.. 2024. 10. 9.
[pandas] Series, DataFrame에서의 산술 연산 1. 기본적인 산술 연산 규칙 (Ufunc Rule)시리즈나 데이터프레임에서 산술 연산을 할 때, 기본적으로 **Ufunc (Universal Functions)**의 규칙이 적용됩니다. 즉, 같은 크기와 모양을 가진 두 데이터 구조가 있다면 각각 대응되는 값들끼리 연산이 수행됩니다.   2. 인덱스 정렬 (Index Alignment) 시리즈 간 또는 데이터프레임의 열 간 연산을 할 때, 인덱스 정렬이 먼저 수행됩니다. 두 데이터 구조의 인덱스 합집합을 구한 뒤, 각 인덱스에 대해 연산이 수행되며, 만약 한 쪽에만 존재하는 인덱스가 있다면 그 결과는 NaN (Not a Number)으로 표시됩니다.     3. 데이터프레임 간 연산: 브로드캐스팅 (Broadcasting)데이터프레임 간 연산에서도 기본.. 2024. 10. 8.
[pandas] 데이터 인덱싱과 접근 1. Series에서의 데이터 접근 및 값 변경 아래와 같은 Series가 있을 때를 가정하고 여러 데이터 접근 방식에 대해서 살펴보자. [index]를 통한 접근 및 변경  슬라이싱을 통한 값 접근 1) 명시적 인덱스: 사용자가 배열을 생성할 때 같이 작성해주는 인덱스. 예를 들면 'a', 'b', 'c'와 같은 인덱스 명시적 인덱스로 슬라이싱을 진행하면 끝 인덱스의 요소를 포함한다.   2) 암시적 인덱스: 배열을 생성하면 자동으로 작성되는 0, 1, 2, 3과 같은 인덱스 암시적 인덱스로 슬라이싱을 진행하면 끝 인덱스의 요소를 포함하지 않는다.    마스킹(조건)을 통한 값 접근  데이터의 특정한 조건을 통해 해당 조건에 true인 값을 추출한다.  팬시 인덱싱(특정 인덱스 추출)을 통한 값 접근 .. 2024. 10. 8.
[pandas] 주요 객체의 생성 - Series, DataFrame 1. Series: numpy 배열 중 1차원 배열과 동등한 객체이다.  기본적인 생성, 접근, 슬라이싱은 Numpy와 동일하다. [Series 생성]  [Dictionary로 Series 생성]  Dictionary로 Series를 생성하고 사용할 수 있다. [Series 명시적 인덱스] Numpy 배열과 다른 점이 있는데 index를 다양한 자료형으로 사용, 변형이 가능하다는 것이다.Numpy 배열은 배열을 생성하면 index가 0부터 1, 2, 3, ... 이런 식으로 암시적으로 인덱스가 자동 생성이 된다.    하지만 pandas 배열은 배열을 생성할 때 기본적으로 암시적 index가 생성되지만, 명시적으로 사용자가 직접 각각의 인덱스를 지정할 수 있다. 위의 사진처럼 생성할 때 사용자가 직접 인.. 2024. 10. 8.