ㅁ Python
o 매트랩은 행렬에서 돌때 속도가 많이 느려진다. 그래서 행렬은 C로 돌렸다.
o 파이썬은 매트릭스 연산을 빨리 돌려준다. 파이썬에서 행렬이 돌면 알아서 C로 변환하여 구동된다.
o 파이썬은 Java처럼 변수형이 없다.
o 변수를 왜쓰는가?
- 변수를 쓰는 이유는 한번 쓰고 버리지 않는 값이기 때문이다.
- 변수의 정의는 많지만, 제일 공감하는 정의는 "데이터를 저장하기 위해 메모리 공간에 붙여진 이름"이다.
- 데이터를 저장하는 것이 목적이다. 주민등록번호, 사번처럼 고유한 넘버가 있는데 이름을 부르는 것 처럼.
- 메모리 공간의 이름을 변수라고 한다.
o constant 상수의 정의
- 데이터가 변하지 않는다는 것은 특성을 이야기하는 것이지 정의는 아니다.
- 상수의 정의는 변수와 같다. 데이터를 저장하기 위해 메모리 공간에 붙여진 이름
o const, final 등으로 C와 JAVA에 상수선언할때 쓴다.
- 데이터를 못바꿔서 상수가 아니라 접근 할 수 없어서 바꿀 수가 없다.
- 선언하여 이름을 가지고 있는 상수가 있을 것이고 값만 있는 상수가 있을 것이다.
- 값만 있는 상수는 liternal이다.
o Python은 타입이 없어서 초반에 파이썬을 잘 쓰지 않았다.
o 파이썬의 기본 문법에는 배열이 없고 리스트로 되어 있다.
o 물어보는 연산자, 메서드는 True, False로 나온다.
o 대소비교에는 숫자값만 쓸 수 있다.
o Python에서는 True, False 계산이 가능하다. 이것은 언어마다 다르니까 확인 한번 더 해야한다.
o 파이썬에서는 리스트는 타입을 석어서 받을 수 있다. 배열은 하나만 가능하지만.
- ''와 ""는 똑같이 스트링으로만 받는다. 다른 언어는 char로도 받을 수 있다.
o 반복문인데 for를 못쓰는 경우가 있음
- for(초;종;증)인데, 종료를 모르면 쓸 수가 없다.
- 순서가 없는 데이터는 set이 있다. 그래서 sequence 객체가 필요하다.
ㅁ 객체지향
o object -> Class -> Instance
- 오브젝트 : 사물, 목적어(O) }OOP 객체지향 프로그램 한국말로는 "객체"
- Class : 클래스
- 인스턴스 : 한국말로 해도 "객체"
- 오브젝트와 인스턴스는 둘다 같은 걸로 해석이 되고, 표준어이다.
- 원서에서 오브젝트 정의는 바라보는 대상, 내가 구현해야할 대상이다(프로젝트 등)
- 차를 구현한다고 했을때 차의 속성이 무엇인가? 바퀴가 몇개이고, 마력은 얼마고 차종이 뭔지 알아야해
- 그리고 차의 기능은 앞으로 뒤로 좌우회전하는 기능을 생각해야한다. 이것이 오브젝트 모델링이다.
- 이렇게 생각한 것을 빼내는 게 클래스 정의다.
- 머릿속으로 생각했던 속성들을 변수 또는 상수로 표현하고 기능은 메소드로 표현
- 객체지향에서도 클래스는 변수와 메소드의 집합이다. 단순하게 생각
- 내 머릿속에 안들어와도 객체지향의 언어를 알고 있고, 내가 만든 클래스를 보여주면 어떤식으로 생각했는지 바로 알 수 있게 하는 것이 클래스 정의다.
- C같은 절차지향은 어떻게하는것인가? 절차지향은 이 단계까지 오면 코드가 다 나오므로 끝이지만 객체지향은 아니다.
- 개발자는 본인이 개발한 클래스를 사용할 수 없다.
- 객체지향은 우리가 만든 클래스를 실행코드로 보지 않는다. 컴퓨터에서 실행되는 모든 프로그램은 메모리에 있다.
- 만들 클래스는 메모리에 올라가있다. 내가 만든 클래스를 메모리에 올려야하는데, 메모리에 올리는 작업을 생성이라 함
- 클래스는 붕어빵을 찍어내는 틀의 역할만 하고, 클래스를 만들긴하는데 클래스 자체를 사용할 수 없다.
- 붕어빵 찍어내는 틀을 씹어먹을 수 없잖아??
- 메모리에 생성된 클래스를 인스턴스라고 한다.
o 메모리에 올라가는 데이터는 유니크한 주소를 받는다. 클래스도 주소를 받는다.
- 주소값이 인스턴스가 아니라 호텔방 번호를 알려주는 것이고, 호텔방에 들어가면 소파, 침대 등을 인스턴스라고 한다.
- 전문적으로 주소를 받는걸 레퍼런스 타입이라고 한다.
- 객체 지향은 포인터를 안할까? C같은 언어는 특정 메모리 주소를 알게되면 포인터 연산으로 주소를 움직일 수 있다.
- 객체지향에서는 주소 따라가면 인스턴스만 나온다. 주소를 통해서만 인스턴스를 찾아간다.
o 코드에 .이 적혀있으면 . 앞에는 무조건 주소값이 나온다. 주소를 따라가면 인스턴스가 나온다.
- 인스턴스 뚜껑을 열면 클래스가 있고 클래스를 열면 변수와 메소드가 있다.
o 클래스 내에서 처음 변수는 무조건 셀프가 들어간다.
o 메모리를 인스턴스 할 때 무조건 소괄호를 붙인다. 왜 붙이는 것일까?
- 자바에선 Car cv = new Car();로 표현한다.
- new car, Car(); 2개를 하나로 표현한 것이다.
- 변수와 메소드는 첫글자가 소문자, 클래스는 첫글자가 대문자, 상수는 풀네임 대문자로 대부분 표시한다.
- 이건 단어가 하나일때이고, 두개인 경우는 두번째 첫글자는 무조건 대문자이다.
- 변수 메소드가 두단어면 첫글자가 소문자 두번째 단어의 첫글자는 대문자가 된다.
o 그럼 생성자를 배울때 질문을 해야한다.
- 생성자는 Class랑 똑같은 메소를 가진다고 설명되어있다. 근데 메소드는 소문자로 표현해야하는데 이상하지 않나?
- 생성자는 개발자가 호출하지 못하고 인스턴스가 생성될 때 자동으로 호출된다.
- Car(); <- 이름 소괄호 세미콜론을 생성하는 내용인데, new 뒤에는 클래스가 나와야한다.
- 근데 메소드임에도 어쩔 수 없이 클래스랑 똑같이 적을 수 밖에 없어서 그렇다. 메소든데 클래스처럼 적는 이유다.
o 생성자의 기능은 인스턴스 변수를 초기화하는 것
- 인스턴스 변수는 클래스가 선언되자마자 튀어나오는 것
o 파이썬은 new도 type도 없다.
- 파이썬은 메소드를 호출하면 __init_이 생성자이고, self.a가 인스턴스 변수다.
o 생성된 인스턴스에 주소를 보고 메소드를 찾아간다.
o 객체가 오브젝트를 이야기하는 건지 인스턴스를 말하는건지 문맥상에서 구별 가능 해야한다.
o 오브젝트 모텔링이 쓰레기면 클래스도 쓸레기고 인스턴스도 쓰레기다.
o 객체지향언어를 사용해서 시스템을 만들었는데 차세대를 4 ~ 5년 마다 한다면? 설계가 잘못된 것이다.
- 객체지향언어는 이렇게 유지보수 하지 않는다.
o 파이썬 자체는 별론데 라이브러리가 좋다.
ㅁ Masic Mathematics for DL
o 머신러닝을 하면서 파이썬을 쓸텐데 파이썬 쓸 때 유의사항이 몇가지가 있다.
o 자연상수 [e] 는 y = exp(x)로 사용한다.
o 스칼라 : 1.0 , -0.9 같은 일반적인 수치
o 벡터 : 스칼라를 직선위에 나열해 놓은 것, 1차원 배열처럼 이해하면되고, 가로 세로 모두 가능
o 행렬 : 스칼라를 괄호안에 나열한 것
o 텐서 : 스칼라를 여러 차원으로 나열한것, 스칼라, 벡터, 행렬 포함
o transpose() : 2행 6열을 6행 2열로 바꾸는 것
- transpose()를 3차원으로도 돌릴 수 있는데, 너무 복잡하다....
o 행렬의 원소간 곱셈 : 아다마르 곱
- print(a*b)로 계산을 하는 것인데, 각 원소의 값을 행렬끼리 곱하는 것이다.
- DL할때 행렬 곱셈을 할때 a*b하면 전혀 다른 값이 나오니까 항상 유의해서 써야한다.
o numpy를 쓴다고 했을때 행렬곱은 다음와 같이 써야한다.
- print(np.dot(a,b))
- 앞에 있는 행렬의 '열' 과 뒤에 있는 '행'이 같아야 연산 가능하다.
- 결과는 앞 행렬의 '행'과 뒤 행렬의 '열'로 나온다.
o 전치행렬 : 행렬의 행과 열로 바꾸는것 $$ A^T $$로 표시한다.
- transpose()와 유사하다. 하지만 이게 편해서 이걸로 사용한다.
'Develop > AI' 카테고리의 다른 글
인공지능(신경망, 딥러닝) 교육 정리(single Layer Perceptron) (0) | 2023.01.02 |
---|---|
인공지능(신경망, 딥러닝) 교육 정리(Differential, 미분) (0) | 2023.01.01 |
인공지능(신경망, 딥러닝) 교육 정리(Logistic Regression) (0) | 2023.01.01 |
인공지능(신경망, 딥러닝) 교육 정리 (Linear Regression) (0) | 2022.12.28 |
인공지능(신경망, 딥러닝) 교육 정리 [Linear Classifier] (0) | 2022.12.28 |
최근댓글