- TensorFlow - 구글 머신러닝 플랫폼
- 1. 텐서 기초 살펴보기
- 2. 간단한 신경망 만들기
- 3. 손실 함수 살펴보기
- 4. 옵티마이저 사용하기
- 5. AND 로직 연산 학습하기
- 6. 뉴런층의 속성 확인하기
- 7. 뉴런층의 출력 확인하기
- 8. MNIST 손글씨 이미지 분류하기
- 9. Fashion MNIST 이미지 분류하기
- 10. 합성곱 신경망 사용하기
- 11. 말과 사람 이미지 분류하기
- 12. 고양이와 개 이미지 분류하기
- 13. 이미지 어그멘테이션의 효과
- 14. 전이 학습 활용하기
- 15. 다중 클래스 분류 문제
- 16. 시냅스 가중치 얻기
- 17. 시냅스 가중치 적용하기
- 18. 모델 시각화하기
- 19. 훈련 과정 시각화하기
- 20. 모델 저장하고 복원하기
- 21. 시계열 데이터 예측하기
- 22. 자연어 처리하기 1
- 23. 자연어 처리하기 2
- 24. 자연어 처리하기 3
- 25. Reference
- tf.cast
- tf.constant
- tf.keras.activations.exponential
- tf.keras.activations.linear
- tf.keras.activations.relu
- tf.keras.activations.sigmoid
- tf.keras.activations.softmax
- tf.keras.activations.tanh
- tf.keras.datasets
- tf.keras.layers.Conv2D
- tf.keras.layers.Dense
- tf.keras.layers.Flatten
- tf.keras.layers.GlobalAveragePooling2D
- tf.keras.layers.InputLayer
- tf.keras.layers.ZeroPadding2D
- tf.keras.metrics.Accuracy
- tf.keras.metrics.BinaryAccuracy
- tf.keras.Sequential
- tf.linspace
- tf.ones
- tf.random.normal
- tf.range
- tf.rank
- tf.TensorShape
- tf.zeros
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
1. 텐서 기초 살펴보기¶
■ Table of Contents
1) 텐서란?¶
텐서 (Tensor)는 다차원 배열 (Multi-dimensional Array)입니다.
텐서 (Tensor)는 벡터 (Vector)와 행렬 (Matrix)을 일반화한 것이며, 3차원 이상으로 확장할 수 있습니다.
텐서 (Tensor)는 TensorFlow의 가장 주요한 객체이며, TensorFlow의 작업은 주로 텐서의 연산으로 이루어집니다.
즉, TensorFlow는 텐서 (Tensor)를 정의하고 연산을 수행하도록 하는 프레임워크 (Framework)입니다.
2) 텐서의 차원 - 랭크 (Rank)¶
텐서의 랭크 확인하기¶
import tensorflow as tf
scalar = tf.constant(1)
vector = tf.constant([1, 2, 3])
matrix = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
tensor = tf.constant([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]])
print(tf.rank(scalar))
print(tf.rank(vector))
print(tf.rank(matrix))
print(tf.rank(tensor))
tf.Tensor(0, shape=(), dtype=int32)
tf.Tensor(1, shape=(), dtype=int32)
tf.Tensor(2, shape=(), dtype=int32)
tf.Tensor(3, shape=(), dtype=int32)
텐서 (Tensor) 객체의 랭크 (Rank)는 차원의 수 (n-dimension)입니다.
tf.rank()는 텐서의 랭크를 반환합니다.
텐서 scalar, vector, matrix, tensor는 각각 랭크 0, 1, 2, 3를 가집니다.
3) 텐서 만들기¶
tf.constant() 사용하기¶
a = tf.constant(1)
b = tf.constant([2])
c = tf.constant([[1, 2], [3, 4]])
print(a)
print(b)
print(c)
tf.Tensor(1, shape=(), dtype=int32)
tf.Tensor([2], shape=(1,), dtype=int32)
tf.Tensor(
[[1 2]
[3 4]], shape=(2, 2), dtype=int32)
tf.constant()는 상수 텐서를 만듭니다.
tf.zeros() 사용하기¶
a = tf.zeros(1)
b = tf.zeros([2])
c = tf.zeros([2, 3])
print(a)
print(b)
print(c)
tf.Tensor([0.], shape=(1,), dtype=float32)
tf.Tensor([0. 0.], shape=(2,), dtype=float32)
tf.Tensor(
[[0. 0. 0.]
[0. 0. 0.]], shape=(2, 3), dtype=float32)
tf.zeros()는 모든 요소가 0인 텐서를 만듭니다.
tf.zeros()에 만들어질 텐서의 형태 (shape)를 입력합니다.
텐서의 형태에 대해서는 4) 텐서의 데이터 타입과 형태를 참고하세요.
tf.ones() 사용하기¶
a = tf.ones(3)
b = tf.ones([4])
c = tf.ones([2, 2, 2])
print(a)
print(b)
print(c)
tf.Tensor([1. 1. 1.], shape=(3,), dtype=float32)
tf.Tensor([1. 1. 1. 1.], shape=(4,), dtype=float32)
tf.Tensor(
[[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]], shape=(2, 2, 2), dtype=float32)
tf.ones()는 모든 요소가 1인 텐서를 만듭니다.
tf.ones()에 만들어질 텐서의 형태 (shape)를 입력합니다.
텐서의 형태에 대해서는 4) 텐서의 데이터 타입과 형태를 참고하세요.
tf.range() 사용하기¶
a = tf.range(0, 3)
b = tf.range(1, 5, 2)
print(a)
print(b)
tf.Tensor([0 1 2], shape=(3,), dtype=int32)
tf.Tensor([1 3], shape=(2,), dtype=int32)
tf.range()는 파이썬 range()와 비슷하게, 주어진 범위와 간격을 갖는 숫자들의 시퀀스를 만듭니다.
tf.linspace() 사용하기¶
a = tf.linspace(0, 1, 3)
b = tf.linspace(0, 3, 10)
print(a)
print(b)
tf.Tensor([0. 0.5 1. ], shape=(3,), dtype=float64)
tf.Tensor(
[0. 0.33333333 0.66666667 1. 1.33333333 1.66666667
2. 2.33333333 2.66666667 3. ], shape=(10,), dtype=float64)
tf.linspace()는 numpy.linspace()와 비슷하게, 주어진 범위를 균일한 간격으로 나누는 숫자의 시퀀스를 반환합니다.
NumPy 다양한 함수들 페이지를 참고하세요.
4) 텐서의 자료형과 형태¶
예제1¶
a = tf.constant(1)
b = tf.constant([2])
c = tf.constant([3, 4, 5])
print(a.dtype, a.shape)
print(b.dtype, b.shape)
print(c.dtype, c.shape)
<dtype: 'int32'> ()
<dtype: 'int32'> (1,)
<dtype: 'int32'> (3,)
dtype, shape 속성은 각각 텐서 (Tensor)의 자료형과 형태를 반환합니다.
텐서 a, b, c는 모두 정수형 (int32)의 데이터를 갖고, 각각 ( ), (1,), (3,)의 형태를 가짐을 알 수 있습니다.
예제2¶
d = tf.constant([1., 2.])
e = tf.constant([[1, 2., 3]])
f = tf.constant([[1, 2], [3, 4]])
print(d.dtype, d.shape)
print(e.dtype, e.shape)
print(f.dtype, f.shape)
<dtype: 'float32'> (2,)
<dtype: 'float32'> (1, 3)
<dtype: 'int32'> (2, 2)
텐서 d는 실수형 (float32)의 데이터를 갖고, (2,)의 형태를 가집니다.
텐서 e는 실수형 (float32)의 데이터를 갖고, (1, 3)의 형태를 가집니다.
(정수와 실수를 모두 포함하는 텐서의 자료형은 실수형이 됩니다.)
텐서 f는 정수형 (int32)의 데이터를 갖고, (2, 2)의 형태를 가집니다.
5) 간단한 수학 연산¶
예제¶
a = tf.add(1, 2)
b = tf.subtract(10, 5)
c = tf.square(3)
d = tf.reduce_sum([1, 2, 3])
e = tf.reduce_mean([1, 2, 3])
print(a)
print(b)
print(c)
print(d)
print(e)
tf.Tensor(3, shape=(), dtype=int32)
tf.Tensor(5, shape=(), dtype=int32)
tf.Tensor(9, shape=(), dtype=int32)
tf.Tensor(6, shape=(), dtype=int32)
tf.Tensor(2, shape=(), dtype=int32)
TensorFlow는 텐서 (Tensor)를 생성하고 연산하는 다양한 수학적 함수를 제공합니다.
6) NumPy 호환성¶
텐서 (Tensor)는 NumPy 어레이와 비슷하지만,
텐서는 GPU, TPU와 같은 가속기에서 사용할 수 있고,
텐서는 값을 변경할 수 없습니다.
텐서를 NumPy 어레이로¶
a = tf.constant([1, 2, 3])
print(a)
print(a.numpy())
tf.Tensor([1 2 3], shape=(3,), dtype=int32)
[1 2 3]
텐서의 numpy() 메서드를 사용해서 텐서를 NumPy 어레이로 변환할 수 있습니다.
NumPy 어레이를 텐서로¶
import numpy as np
b = np.ones(3)
print(b)
print(tf.multiply(b, 3))
[1. 1. 1.]
tf.Tensor([3. 3. 3.], shape=(3,), dtype=float64)
반대로, 다양한 TensorFlow 연산은 자동으로 NumPy 어레이를 텐서로 변환합니다.