20240619_텐서플로우2 기초문법 및 텐서 자료형을 사용하는 이유
in 파이썬
텐서플로우의 기초문법과 텐서 자료형을 사용하는 이유에 대해 알아봤다.(딥러닝을 편하게 하려고 사용한다)
텐서 자료형
- 뉴럴 네트워크에서 다음 노드의 값을 구하기 위해서는 이전 노드들의 (input값 * 가중치(w))의 합을 해야 한다.
- 파이썬 코드로 해당 식을 작성하면 아마 이런 식이 될 것이다.
- (x1w1)+(x2w2)+…. (이런 노가다를 하지 않기 위해 텐서라는 자료형을 사용한다.)
- 텐서 자료형은 수학의 행렬과 같다고 생각하면 된다고 한다.
텐서 생성
# 리스트 담기 (1*3 행렬)
tf.constant([3,4,5])
# 리스트 담기 (2*2 행렬)
tf.constant([[1,2],[4,7]])
텐서의 연산 메서드
- add(x,y) : 덧셈
- substract(x,y) : 뺄셈
- divide(x,y) : 나누기
- multiply(x,y) : 요소별 곱셈
- matmul(x,y) : 행렬곱셈
multiply,matmul 비교
- 다음 두 변수의 연산 ``` a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
multiply(a,b) = [[ 5 12] [21 32]] matmul(a,b) = [[19 22] [43 50]]
- multiply
- ![](/assets\img\python\Clipboard_2024-06-19-20-58-56.png)
- matmul
- ![](/assets\img\python\Clipboard_2024-06-19-21-01-13.png)
### zeros
- 텐서 자료형에 데이터를 모두 0으로 채워넣는 메서드
``` py
tf.zeros(3) # 1x3행렬에 0으로 데이터를 가득 채우기
tf.zeros([2,4]) # 2x4행렬에 0으로 데이터를 가득 채우기
tf.zeros([2,2,3]) # 2x3 행렬에 0으로 데이터를 가득 채운 리스트를 2개 생성하기
tf.zeros([4,2,3]) # 2x3 행렬에 0으로 데이터를 가득 채운 리스트를 2개 생성하기
# 여기서 [2,2,3]을 tensor의 shape(모양)이라고 한다.
shape
- shape를 보고 몇차원의 행렬(데이터)구나 하고 알아야 한다고 함.
읽는법
- 뒤에서 부터 읽으면 된다.
- ex) [4,2,3] : 3개짜리 데이터를 가진 2줄짜리 데이터가 4개 있음
tf.Tensor(
[[[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 0.]
[0. 0. 0.]]], shape=(4, 2, 3), dtype=float32)
# dtype : 텐서의 데이터타입 , 정수는 int / 실수는 float
# tf.cast()로 자료형을 변경할 수 있다.
Variable
- 딥러닝상의 가중치(weight)와 동일한 값.
- 가중치는 꼭 이 메서드로 만들어줘야 한다.
tf.Variable()
tf.Variable(1.3) # 초기값을 설정해 줄 수 있다.
# <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=1.3>
tf.Variable(1.0).numpy() # 가중치의 값을 불러오는 메서드 numpy()
tf.Variable(1.0).assing(2) # 변수를 재할당하는 메서드 assign()