반응형
블로그 목적
- 텐서플로우(TensorFlow) 에 대한 기초지식을 배움으로서 아직 낯설은(?) 텐서플로우와 좀더 친해지자.
텐서플로우의 기초지식을 알아보자
- 텐서(Tensor)
- 텐서(Tensor) 란 무엇인가?
- 물리학에서 나온 개념으로 벡터와 유사하나 일반화된 개념
- 그리고, 텐서플로우의 기본 자료형이라 알고있으면 됨.
- 다차원 배열의 일반화 or 아무 차원이나 가질 수 있는 값들의 집합.
- 텐서의 구성요소 3가지
- Rank
- 텐서플로우에서는 Rank 라는 용어를 통해서 구조를 표현함.
- 다시말해서, 랭크는 그 차원의 수를 말함
- 랭크의 동의어는 order 또는 degree, n-dimension
- 참고로 텐서플로우의 랭크는 수학에서 사용하는 행렬의 랭크와는 다름.
- Rank 의 형태
-
랭크 수학 개체 예제(python) 0 Scalar(magnitude only) s = 100 1 Vector(magnitude and direction) v = [1.1, 1.2, 1.3] 2 Matrix(table of numbers) m = [ [1,2,3,4], [5,6,7,8] ] 3 3-Tensor(cube of members) t = [ [ [1],[2],[3] ],[ [4],[5],[6] ] ] n n-Tensor(you get the idea) ... - 설명
- 위의 표에서 알 수 있는 것처럼, 텐서플로의 각 랭크는 각각 다른 수학 개체(entity)에 해당됩니다.
- 0 Rank Tensor
- 스칼라를 의미
- 1 Rank Tensor
- 1-D(1차원) 벡터와 동일함.
- 2 Rank Tensor
- 2-D(2차원) 행렬과 동일함.
- 3 Rank Tensor
- 3-D(3차원) 배열과 동일함.
- 0 Rank Tensor
- 위의 표에서 알 수 있는 것처럼, 텐서플로의 각 랭크는 각각 다른 수학 개체(entity)에 해당됩니다.
-
- Shape
- 형태(shape)는 각 차원에 있는 원소 개수로 표현됨.
- 즉, 텐서가 몇개의 행과 열을 갖는지를 의미함.
- 텐서플로우는 그래프 계산 과정에서 자동으로 텐서 형태를 추론함.
- 추론된 형태는 랭크를 알고 있는 경우도 있고 그렇지 않는 경우도 있음.
- 만약에 랭크를 알고 있는 경우라도 각 차원의 원소 개수를 알고 있는 경우도 있고 그렇지 않는 경우도 있음.
- Shape의 형태
-
랭크 형태 차원 예제 0 [] 0-차원 스칼라인 0-차원 텐서. 1 [D0] 1-차원 형태가 [5]인 1-차원 텐서. 2 [D0,D1] 2-차원 형태가 [3, 4]인 2-차원 텐서. 3 [D0,D1,D2] 3-차원 형태가 [1, 4, 3]인 3-차원 텐서. n [D0,D1,.....Dn-1] n-차원 형태가 [D0, D1, ... Dn-1]인 텐서.
- 형태(shape)는 각 차원에 있는 원소 개수로 표현됨.
- Type
- 텐서 값이 어떤 타입인지를 의미함.
- Type의 형태
-
데이터 타입 이름 Python 데이터 타입 설명 DT_FLOAT tf.float32 32bit 부동소수점 숫자 DT_DOUBLE tf.float64 64bit 부동소수점 숫자 DT_INT8 tf.int8 8bit 정수 DT_INT16 tf.int16 16bit 정수 DT_INT32 tf.int32 32bit 정수 DT_INT64 tf.int64 64bit 정수 DT_UINT8 tf.uint8 8bit 부호 없는 정수 DT_UINT16 tf.uint16 16bit 부호 없는 정수 DT_STRING tf.string 가변길이 바이트 배열이며, 텐서의 각 요소는 바이트의 배열 DT_BOOL tf.bool 참/거짓 값 DT_COMPLEX64 tf.complex64 2개의 32bit 부동소수점 숫자로 구성된 복소수로 각각 실수부와 허수부로 이루어짐 DT_COMPLEX128 tf.complex128 2개의 64bit 부동소수점 숫자로 구성된 복소수로 각가 실수부와 허수부로 이루어짐 DT_QINT8 tf.qint8 양자화 연산에 사용되는 8bit 정수 DT_QINT32 tf.qint32 양자화 연산에 사용되는 32bit 정수 DT_QUINT8 tf.quint8 양자화 연산에 사용되는 8bit 부호 없는 정수
-
- Rank
- 텐서(Tensor) 란 무엇인가?
- 그래프(Graph)
-
- 그래프 구조는 아래 구성요소로 이루어짐.
- 노드(Node)
- 연산을 의미함
- ex) 곱하기, 나누기 등등
- 연산을 의미함
- 엣지(Edge)
- 텐서(Tensor)를 의미함
- 노드(Node)
- 텐서플로우는 그래프 구조를 통해서 데이터를 분석함.
- Data Flow Graph Computation 이라고 불리고 노드에 지정된 연산을 시행하는 구조로 이루어짐.
- 실습 및 예시
- 아나콘다 프롬프트
- 가상환경 접속 및 Jupyter notebook 실행
- 예시
- 가상환경 접속 및 Jupyter notebook 실행
-
- 코드
- 실행 화면(Jupyter notebook)
-
- 설명
- 정상적으로 결과값이 65가 나옴을 확인할 수 있음.
- 설명
- 코드
- 그래프 구조는 아래 구성요소로 이루어짐.
- 연산자
- 생성된 데이터의 산술연산(덧셈,뺄셈등등)을 위한 매개변수
-
텐서플로우 연산 축약형 연산자 설명 tf.add() a+b a와 b를 더함 tf.multiply() a*b a와 b를 곱함 tf.subtract() a-b a에서 b를 뺌 tf.divide() a/b a를 b로 나눔 tf.pow() a**b a의 b의 제곱을 계산함 tf.mod() a%b a를 b로 나눈 나머지 tf.logical_and() a&b a와b의 논리곱을 구함 tf.greater() a>b a>b 의 참 거짓 반환 tf.greater_equal() a>=b a>=b 의 참 거짓 반환 tf.less_equal() a<=b a<=b 의 참 거짓 반환 tf.less() a<b a<b 의 참 거짓 반환 tf.negative() -a a의 반대 부호 값을 반환 tf.logical_not() ~a a의 각 원소의 반대의 참 거짓값을 반환 tf.abs() abs(a) a의 각 원소의 절대값을 반환 tf.logical_or() a|b a와b의 논리합을 구함
- 변수
- 모델 학습 시 매개변수의 업데이터와 유지를 위해 사용함.
- 즉, 알고리즘 학습 시 반복에 따라 값이 변하는 것을 표현하는 데이터 형
- 변수는 프로그램에 의해 변화하는 공유된 지속 상태를 표현하는 방법
-
tf.Variable 클래스에서 처리됨.
-
하나의 tf.Variable 은 하나의 텐서를 표현하며, 텐서값은 텐서에 연산을 수행하여 변경시킬 수 있음.
-
그리고, 특정한 연산은 이 텐서값을 읽고 수정함.
-
tf.keras 같은 좀 더 고수준의 라이브러리는 모델 파라미터를 저장하는데 tf.Variable을 사용함
-
-
-
변수의 생성 및 사용
- 코드
- 실행화면
-
- 설명
- 생성
- 위와같이 변수를 생성하려면 단순하게 초기값을 설정하면됨.
- 사용
- assign_add 함수를 통해서 변수에 1을 더함.
- 해제
- tf.Variable에 마지막 참조가 범위(scope)에서 벗어났을때 메모리가 해제됨.
- 생성
- 설명
- 코드
- 모델 학습 시 매개변수의 업데이터와 유지를 위해 사용함.
결론
- 지금까지 텐서플로우의 기초지식인 텐서/그래프/연산자/변수에 대해서 알아봄.
- 기초지식을 알아보면서, 예전에 잠시 텐서플로우를 공부했던 기억이 있는데, 이번에 다시 새로 시작하면서
- 텐서플로우v1 -> 텐서플로우v2 가 되면서 바뀐것이 있음을 알게됨.
- 세션도 사라짐
- 플레이스 홀더도 사라짐.
- 암튼 조금씩 공부하다보면, 또 바뀐것도 알겠지.
- 역시 IT는 공부만이 살길 같음. 이번에 느낀것은 예전에 공부해서 알았던 지식이 버전업이 되면서 거짓이 될수도...
- 텐서플로우v1 -> 텐서플로우v2 가 되면서 바뀐것이 있음을 알게됨.
- 아무튼 오늘도, 텐서플로우 관련 기초지식에 대해서 정리 및 지식 획득! 감사합니다.
728x90
300x250
'좋아하는 것_매직IT > 24.tensorflow' 카테고리의 다른 글
12.tensorflow, 텐서(Tensor)에 대해서 알아보자. (0) | 2020.12.31 |
---|---|
11.tensorflow, 텐서보드(TensorBoard) 에 대해서 알아보자. (0) | 2020.12.31 |
9.tensorflow, 텐서플로우(TensorFlow) 환경을 구축해보자. (0) | 2020.12.31 |
8.tensorflow, 텐서플로우(TensorFlow) 란 무엇인가? (0) | 2020.12.31 |
7.tensorflow, 머신러닝관련 알고리즘을 정리해보자. (0) | 2020.12.31 |