Min IT's Devlog

[AI] 모두를 위한 딥러닝 강좌 Lec/Lab 1 필기 본문

AI/인강

[AI] 모두를 위한 딥러닝 강좌 Lec/Lab 1 필기

egovici 2023. 4. 6. 03:30

https://www.youtube.com/watch?v=BS6O0zOGX4E&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&ab_channel=SungKim 

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
Comments