일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 자료구조
- Two Pointers
- hash table
- Union Find
- dfs
- DailyLeetCoding
- Leedcode
- sorting
- String
- Hashtable
- array
- greedy
- SinglyLinkedList
- 구현
- heap
- ArrayList vs LinkedList
- Medium
- leetcode
- 광연자동차운전면허학원
- python3
- Bellman-Ford
- stack
- Java
- hash
- A* Algorithm
- graph
- BFS
- VCS
- Easy
- LinkedList
- Today
- Total
Min IT's Devlog
[AI] 모두를 위한 딥러닝 강좌 Lec/Lab 1 필기 본문
Sung Kim 교수님의 Basic Machine/Deep Learning 강의를 듣고 정리했습니다.
ML Lec 01
Machine Learning
- 기존의 spam filter나 자율주행자동차의 경우 사람들이 모든 경우의 수를 명시적으로 프로그램하기에 너무나 많은 규칙이 있기 때문에 그냥 하기 어렵다.
=> 59' Arthur > 명시적으로 프로그래밍하는 것이 아니라 컴퓨터가 자료에서 학습하게 하면 되지 않을까라는 아이디어제시
Supervised Learning
=> label이 붙은 데이터를 가지고 학습시키고 새로운 데이터를 제시하여 해당 데이터에 대한 예측값을 올바르게 뽑아낼 수 있게 하는 것이 목표
=> Image labeling(이건 고양이 사진이다.)/ Email Spam Filter(이건 스팸이다.)/ predicting exam score( 몇시간 공부하면 몇점 맞더라)
Unsupervised Learning
=> 명확하게 나누기 어려운 경우 데이터만 주고 학습을 시킨다.
=> Google News(유사한 뉴스끼리 grouping 해줌)/ Word Clustering(비슷한 단어를 grouping 해주는 거)
주로 Supervised Learning에 대해서 이야기 할 것이고 해당 주제에는 크게 3가지 타입으로 나누어진다.
1) Regression - 연속적인 데이터를 예측할 때 주로 사용
2) Binary classification - 2개로 분류할 때 사용 ex) 단어를 봤을 때 긍정적인 단어인지 부정적인 단어인지.
3) Multi-label classification - 3개 이상으로 분류시 사용 ex) cifar10을 보면 10개의 class가 존재.
ML Lab 01
tensorflow = data flow graph를 이용해 수치적인 계산을 할 수 있도록 하는 것
Data flow graph
- Node(하나의 operation)
- edge(tensor or data)
=> 이들이 연속적으로 연결되어 원하는 결과를 얻을 수 있게 되는 것.
# 설치 ( anaconda에서..)
!pip install --upgrade tensorflow
# 설치 여부 확인
!import tensorflow as tf;
print(tf.__version__);
Tensorflow v1.0의 작동 흐름
1) 그래프(모델)을 build 한다
2) session 모듈로 그래프를 실행한다.
3) 그 결과로 어떤 값이 리턴된다거나 내부 변수(weight)가 수정된다
위의 인강의 실행환경은 1.0v으로 현재 2.12v임을 감안하면 너무 오래된 버전으로 2.0v부터는 keras가 내장되고 많이 달라졌기 때문에 강의에서 주어진 코드를 사용할 수 없다. 또한 현재 2.0버전에서도 이전 버전의 방식을 사용할 수 있도록 제공하고 있으나 3.0v부터는 더이상 제공되지 않을 가능성이 높기에 최신버전 기준으로 실습을 진행했다.
마음 편하게 수업을 듣고 버전에 크게 신경을 안쓴다면 아래 제시된 방식대로 하면 된다.
node1 = tf.constant(3.0, tf.float32);
node2 = tf.constant(4.0);
node3 = tf.add(node1, node2)
print("node1:", node1, "node2", node2)
print("node3:", node3)
# result
# node1: tf.Tensor(3.0, shape=(), dtype=float32) node2 tf.Tensor(4.0, shape=(), dtype=float32)
# node3: tf.Tensor(7.0, shape=(), dtype=float32)
원래는 기존에 session이라는 모듈이 1v에 있었으나 2v에 들어와서부터는 node3의 node를 미리 빌드해놓지 않고 함수를 통해 실행시켰다.
@tf.function
def forward(n1,n2):
return n1 + n2
print("node3:", forward(node1, node2))
# result
# node3: tf.Tensor(7.0, shape=(), dtype=float32)
이런 식으로 함수를 정의하여 텐서의 연산결과를 도출해낼 수도 있다.
a = tf.Variable(0, dtype=tf.float32, shape=tf.TensorShape(None))
b = tf.Variable(0, dtype=tf.float32, shape=tf.TensorShape(None))
@tf.function
def forward(A, B):
a.assign(A);
b.assign(B);
return a+b;
print(forward(3,4.5))
print(forward([1,3],[2,4]))
# result
#tf.Tensor(7.5, shape=(), dtype=float32)
#tf.Tensor([3. 7.], shape=(2,), dtype=float32)
또한 강의 내에서는 사용자가 유동적으로 값을 넘겨줄 때 placeholder라는 것을 사용했으나 v2.0이상부터는 tf.Variable로 정의한 후에 assign을 이용하여 해당 tensor에 값을 할당해줄 수 있다.
Tensor의 3대 요소
1) Rank(ndim)
- 랭크는 차원 수를 의미하며 각각 0(Scaler), 1(Vector), 2(Matrix), 3(3-tensor)등으로 붙여진다.
- 쉽게 해당 tensor의 rank를 알 수 있는 방법은 처음에 연속적으로 나오는 대괄호([)의 갯수를 세는 방법이 있다.
2) Shapes(size)
- shape이라고 하면 와닿지 않을 수 있는데 쉽게 말하면 각 dimension의 size를 의미한다고 보면 된다.
- [D0, D1]의 방식으로 표기하며 보통 D0는 sample의 수 D1부터는 feature, time과 같은 것을 표현하며 계속해서 늘어날 수 있다.
3) Type(dtype)
- 말그대로 datatype이며 float32와 int32를 주로 사용한다.
'AI > 인강' 카테고리의 다른 글
[AI] 모두를 위한 딥러닝 강좌 Lec/Lab 2 필기 (0) | 2023.04.07 |
---|