ETC/머신러닝, 딥러닝 실습

2-2. Hello TensorFlow (basic tensorflow)

개발자킹콩 2020. 10. 28. 02:27

모두를 위한 머신러닝 딥러닝 강의: hunkim.github.io/ml/

 

영상 필수시청: www.youtube.com/watch?v=XNDo6ad7ICA

  • 깃허브 코드다운
  • 주비터 노트북 사용법
  • 텐서플로우 version1로 다운그레이드 방법

영상에서 사용되는 코드주소: github.com/hunkim/DeepLearningZeroToAll

주비터 노트북 사용방법: copycoding.tistory.com/72

 

Anaconda 가상환경 설정: http://asq.kr/SaF3jqELi3EZ3

 

아나콘다? : url.kr/gZ9l2S

주비터 노트북? : blog.naver.com/PostView.nhn?blogId=hobbang143&logNo=221464304548

텐서플로우? : blog.naver.com/hobbang143/221463489187

 

 

 

 


 

 

Tensorflow가 무엇인가?

- data flow graphs를 사용하여 수에 대한 계산을 할 수 있는 소프트웨어 라이브러리

 

Data flow graph란?

- graph는 node와 edge가 존재하며

- data flow graph에서는 각 node들이 operation을 나타내고, edge는 data array(tensors)를 나타낸다.

 

이런 연산들을 통해서 내가 원하는 연산의 결과를 얻을 수 있는 것을 Data flow graph라고 하고,

이것을 할 수 있는 것 혹은 도와주는 것을 Tensorflow라고 한다.

Tensor는 데이터(벡터)를 의미하고 이 데이터들의 이동시키기에 Tensorflow라고 한다.

 

 


 

 

이제 hello TensorFlow를 출력해보자

Hello, TensorFlow! 라는 text가 저장된 node가 생성되었고 이를 hello에 대입하였다.

그 후, Data flow graph에서 정상적으로 연산이 진행되기 위해 run을 해야한다.

이 run을 하기 위해서는 Session을 만들고

그 안에 run 함수에 해당 node를 인자로 전달해줘야한다.

(출력에 나오는 'b'는 Bytes literal, string을 의미한다. )

 

 


 

 

Computational Graph

3과 4의 덧셈으로 7이 되는 Graph를 만들때 TensorFlow로 어떻게 구현하는가?

 

 

다음과 같이 node를 설정하고, 출력을 하게 되면 결과값이 아닌 graph의 node정보가 출력된다. 즉, Tensor라는 것과 그에 대한 정보만 출력되는 것이다.

여기서, 원하는 operator의 결과는 session을 통해서 run을 했을 때 얻어진다.

 

 

 

run안에 실행하고 싶은 Tensor를 전달하고 실행결과를 반환받는다.

 

 


 

Tensorflow의 구조

 

1. 우선 그래프를 Build한다. 

2. 그래프를 tf.Session().run(op)로 graph를 실행한다.

3. 그 결과로 그래프 안의 값들이 업데이트 되거나 어떤값을 return하여 원하는 값을 얻는 구조이다.

 

 

 

 


 

 

 

이제는 연산을 하는 그래프를 미리 만들어 놓고 값들을 전달하도록 하고싶다.

해당 node를 Placeholder로 만들어준다.

 

 

이렇게 placeholder로 만들게 되면 특정 값을 지정해주지 않고 Tensor를 만들 수 있게 된다.

그렇게 그래프가 완성되면 이제 이 그래프를 실행하려 한다.

근데 이때 각각 a와 b의 값을 dictionary형태로 전달해주면 된다.

물론 list형태로 값을 넣어도 가능하다.

 


 

 

 

  • Ranks: 행벡터(tensor)의 차원
  • Shapes: 모양,형태를 의미하며 위의 tensor는 [3,3]로 나타낸다. 3개로 이루어진 tensor가 3개 존재하기 때문이다.
  • Types: data type를 의미한다. 대부분 float32 혹은 int32 를 많이 사용한다.