관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

텐서플로 2 - 텐서플로 자료 구조 1 : 스칼라와 벡터 본문

인공지능/딥러닝

텐서플로 2 - 텐서플로 자료 구조 1 : 스칼라와 벡터

huenuri 2024. 10. 1. 16:44

점심을 먹고 3시 넘어서 오후 공부를 시작해본다. 오후에는 많아야 3시간밖에 공부를 할 수 없을 것 같다. 그래도 할 수 있는데까지 최선을 다해볼 것이다.


 

 

 

텐서플로 자료 구조

파이썬 자료형 값들은 텐서플로 자료구조인 텐서로 변환되어 처리된다. 텐서플로에서 자료를 표현하는 기본 구조인 텐서에 대해 알아보기로 한다.

아래 그림은 0차원 텐서인 스칼라, 1차원인 벡터, 2차원인 행렬, 3차원 텐서와 4차원 텐서까지 차수가 1씩 증가함에 따라 데이터 구조가 확장된다. 차수(차원의 수)는 텐서를 구성하는 벡터의 개수를 나타낸다. 벡터는 어떤 축 방향으로 양이 존재하는 것을 표현한다. 따라서 각 차원은 각각 고유의 정보를 나타내는 축이라고 이해할 수 있다.

 

2차원 행렬의 경우 1차원 백터들을 다른 축 방향으로 나열하는 개념이다.


 

 

 

1. 스칼라(Scalar)

스칼라는 정수나 실수와 같은 상수를 나타낸다. 양을 나타내기는 하지만 방향성을 갖지 않는다. 벡터가 존재하지 않기 때문에 차수가 0이 된다. 텐서플로에서는 '랭크(rank)-0'텐서라고 부른다. 여기서 랭크는 텐서의 차수를 나타낸다. 

스칼라 텐서는 constant 함수에 상수 값을 입력해서 만들 수 있다. 변수 a에는 스칼라 1을, 변수 b에는 스칼라 2를 저장하여 이를 출력해본다.

 

 

 

정수 1과 2는 텐서로 변환(tf.Tensor)된 것을 알 수 있다. 배열을 나타내는 값이 존재하지 않기 때문에 0차원이라고 보면 된다.  정수 1과 2는 0차원 텐서인 스칼라로 저장되었다.

 

 

 

cast 함수를 사용해서 32비트 정수형을 float32로 변환했다.

 

 


 

 

 

 

2. 벡터(Vector)

벡터는 여러 개의 스칼라 값을 원소로 갖는 1차원 배열로 표현된다. 스칼라 여러 개가 동일한 축 방향으로 나열될 때, 원소로 구성되는 여러 개의 값들이 모여서 하나를 대표한다. 따라서 각 원소값의 크기뿐 아니라 원소들이 나열되는 순서도 의미가 있다.

아래 그림에서 원소가 되는 10, 20, 30은 각각 스칼라이고 이들이 모여서 1차원 텐서인 벡터가 된다. 벡터는 하나의 축을 갖기 때문에 차수가 1이고, '랭크-1' 텐서라고 부른다.

 

예제를 통해 텍서플로에서 벡터를 정의하는 방법을 알아본다. constant 함수에 1차원 배열을 입력하면 1차원 텐서인 벡터로 변환된다.

 

 

shape 속성을 보면 1개의 축에 3개의 원소가 있음을 알 수 있다. dtypee 속성을 보면 텐서로 변환된 뒤에도 원본 배열의 실수형 속성이 그대로 유지되고 있다.

 

 

2개의 벡터 모두 랭크가 1인 랭크-1 텐서라는 것을 알 수 있다.


 

 

 

원소 3개를 갖는 벡터 형태가 그대로 유지된다. 문자 옆에 한칸 띄고 콜론을 썼더니 칸이 너무 많이 띄어지는 것 같아 붙여보았다.

 

 

사칙연산이 제대로 잘 출력되고 있다.

 

 

파이썬 연산자로도 동일한 결과를 얻을 수 있다.  벡터를 구성하는 원소들의 합계는 reduce_sum 함수를 이용한다. 합계는 스칼라로 표현된다.


 

 

 

 

거듭제곱도 제곱근도 자유롭게 구할 수 있다. 텐서 배열의 경우 넘파이 배열의 브로드캐스팅 연산을 지원한다. 벡터에 숫자 1을 더하면 벡터의 형태를 유지한 상태에서 각 원소에 1을 더하게 된다.

 


 

 

 

학습을 마치고

예상했던 것보다 시간이 훨씬 많이 걸리고 있다. 아마도 난 공부 목표를 설정할 때 내가 할 수 있는 것보다 3배 이상 높게 잡는 것 같다. 학습일지를 쓰고 정리하며 코드를 일일이 작성해야 하는 시간은 제외시켰나 보다.

2시간도 남지 않은 시간동안 과연 텐서플로를 다 학습할 수 있을지 미지수이다. 그래도 최대한 빠르게 진행해볼 것이다. 코랩을 사용하는 것이 익숙하지 않아 많이 헤매고 있다.