Tensorflow는 구글에서 만든 "Deep Learning 프로그램을 쉽게 구현할 수 있도록 기능을 제공하는 라이브러리"이다.
기본적으로 C++로 구현 되나, 파이썬, Java, Go 등 다양한 언어를 지원한다.
이 중 파이썬을 최우선으로 지원하며, 편리한 기능들은 파이썬 라이브러리로만 구현되어 있기 때문에 Python을 사용하는 것을 추천한다.
Tensorflow를 사용해야하는 이유는 다음과 같다.(Tensorflow 공식 홈페이지)
- 손쉬운 모델 빌드 : 다양한 수준의 추상화를 지원, Keras API 등.
- 어디서든 강력한 ML 제작 : 플랫폼에 상관 없이 모델을 쉽게 학습하고 배포할 수 있음.
- 연구를 위한 강력한 실험 : Keras Functional API 및 Model Subclassing API와 같은 기능을 사용하여 유연하고 긴밀하게 복잡한 토폴로지 생성을 제어할 수 있고 즉시 실행 기능(손쉬운 프로토타입 제작, 빠른 디버깅을 구현), 강력한 부가 기능을 실험할 수 있는 생태계 지원
Tensorflow Estimator API
Tensorflow는 여러 개의 API 계층으로 구성된 프로그래밍 스택을 제공한다.
High-Level TensorFlow APIs
- 모델 개발자끼리 구현을 공유하는 과정을 간소화 해준다.
- Training, Evaluation, Prediction, Model export 이렇게 4가지 주 기능이 있다.
- 사전에 만든 Estimator를 사용하거나 사용자가 커스텀한 Estimator를 작성하여 사용할 수 있다.
- 그래프 구축, 변수 초기화, 데이터 로드, 예외 사항 처리, 체크포인트 파일을 만들어 오류 복원, TensorBoard용 요약본 저장
- tf 2.0부터 Keras가 고수준 API에 추가되었다.
Mid-Level TensorFlow APIs
- tf 2.0부터 Layer를 tf.layers 대신 tf.Keras.layers를 사용하여 구현하는 것을 권장.
- Dataset API(tf.data.Dataset)는 데이터를 로드하고 전처리하는 기능을 제공.
- Metric API(tf.keras.metrics)는 모델의 성능을 평가하기 위해 제공.
Low-Level Tensorflow APIs
- 가장 기본적인 API로써, 계산 그래프를 직접 작성하고 실행하는 데 사용.
- 실험에 대한 더 큰 제어가 필요한 연구일 경우 사용, 일반적으로 고수준 API를 사용하여 작업.
- tf.Session, tf.Graph, tf.Tensor 등의 클래스와 함수를 제공.
Tensorflow Distributed Execution Engine
- Tensorflow에서 분산 환경에서 모델을 효율적으로 실행하는 데 사용되는 기능, 이 엔진을 통해 여러 대의 컴퓨터 또는 장치를 사용하여 모델의 훈련과 추론을 병렬로 처리할 수 있도록 지원.
- 기능1 - 분산 훈련 : 여러 대 컴퓨터 또는 장치를 사용하여 모델을 병렬 훈련하는 기능(tf.distribute.MirroredStrategy,....)
- 기능2 - 분산 추론 : 여러 대 컴퓨터 또는 장치를 사용하여 모델을 병렬로 추론하는 기능(tf.distribute.Strategy,...)
- 기능3 - 분산 데이터셋 처리 : 분산 환경에서 대용량 데이터셋을 효율적으로 처리하는 기능(tf.distribute.Dataset)
- 대규모 데이터와 복잡한 모델을 다루는데 도움을 줌.
Keras
초기에는 독립적인 라이브러리로 개발되었으나, Tensorflow 2.0 이후 부터는 공식 API로 통합되었다.
사용하기 쉽고 독립적인 API를 제공하여 딥러닝 모델을 빠르게 구성하고 실험할 수 있도록 도와준다.
주요 특징
- 사용자 친화적인 인터페이스 : Sequential model, Functional API를 사용해 쉽게 다양한 종류에 모델 구성 및 층 추가.
- 다양한 모델 유형 지원 : 다양한 종류의 신경망 모델을 제공(NN, DNN,CNN, RNN,...).
- 다양한 층 제공 : 다양한 층(Dense, Conv, Recurrent, Pooling, Dropout,...)을 사용할 수 있음.
- 사전 정의된 손실 함수 및 최적화 알고리즘 : 일반적으로 사용되는 다양한 손실 함수와 최적화 알고리즘을 사전에 제공.
- 모델 훈련과 평가 : fit()으로 모델 훈련, evaluate()로 모델의 성능 평가.
- 모델 저장과 로드 : 학습한 모델을 저장하거나 나중에 불러와 사용하거나 공유할 수 있음.
tf.keras 모듈로 사용할 수 있다.
Tensor
텐서는 일관된 유형(dtype)을 가진 다차원 배열이다.
지원되는 모든 dtype은 tf.dtypes.DType에 정의되어 있다.
* 텐서는 Python 변수 처럼 변경할 수 없고 내용을 업데이트 할 수 없으며, 새로운 텐서를 만들 수만 있다.
주요 특징
- 랭크(Rank) : 배열의 차원수(scalar : 0, vector : 1, Metrix : 2, Tensor : 3+, ....)
- 쉐이프(shape) : 각 차원의 크기를 나타내는 튜플(Ex. RGB -> (높이, 너비, 채널))
- dtype : 텐서를 저장하는데 사용되는 데이터 타입(float32, float64, int32, int64,...)
# scalar
rank_0_tensor = tf.constant(4)
# -> tf.Tensor(4, shape=(), dtype=int32)
# vector
rank_1_tensor = tf.constant([2.0,3.0,4.0])
# -> tf.Tensor([2. 3. 4.], shape=(3,), dtype=float32)
# Metrix
rank_2_tensor = tf.constant([[1, 2],
[3, 4],
[5, 6]], dtype=tf.float16)
# -> tf.Tensor(
# [[1. 2.]
# [3. 4.]
# [5. 6.]], shape=(3, 2), dtype=float16)
# rank 3+
rank_3_tensor = tf.constant([
[[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]],
[[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29]],])
# -> tf.Tensor(
# [[[ 0 1 2 3 4]
# [ 5 6 7 8 9]]
#
# [[10 11 12 13 14]
# [15 16 17 18 19]]
#
# [[20 21 22 23 24]
# [25 26 27 28 29]]], shape=(3, 2, 5), dtype=int32)
Tensor를 Numpy 배열로 바꿀 수 있다.
# Tensor -> Numpy
# 방법1
np.array(rank_2_tensor)
# 방법2
rank_2_tensor.numpy()
Tensor의 dtype 중에는 복소수나 문자열이 포함될 수 있다.
Tensor는 요소별 산술 연산 및 행렬 연산이 가능하다.(함수 또는 연산자를 사용)
Tensor는 인덱싱과 슬라이싱이 가능하다.
tf.reshape를 통한 Tensor의 형상 변경도 가능하다.
x = tf.constant([[1],[2],[3]])
# -> (3,1)
reshaped = tf.reshape(x, [1, 3])
# -> (1,3)
Tensor는 Numpy에서 처럼 Boadcasting을 제공한다.
Tensor는 특수한 Tensor들이 존재한다.
- 비정형 Tensor(tf.RaggedTensor) : 어떤 축을 따라 다양한 수의 요소를 가진 텐서
ragged_list = [
[0, 1, 2, 3],
[4, 5],
[6, 7, 8],
[9]]
ragged_tensor = tf.ragged.constant(ragged_list)
print(ragged_tensor)
# -> <tf.RaggedTensor [[0, 1, 2, 3], [4, 5], [6, 7, 8], [9]]>
# -> shape : (4, None)
- 문자열 Tensor(tf.string) : 문자열로 이루어짐('b'는 바이트 문자열임을 나타냄.)
scalar_string_tensor = tf.constant("Gray wolf")
print(scalar_string_tensor)
# -> tf.Tensor(b'Gray wolf', shape=(), dtype=string)
- 희소 Tensor(tf.sparse.SparseTensor) : 매우 넓은 임베드 공간과 같이 데이터가 희소.
sparse_tensor = tf.sparse.SparseTensor(indices=[[0, 0], [1, 2]],
values=[1, 2],
dense_shape=[3, 4])
print(sparse_tensor, "\n")
# -> SparseTensor(indices=tf.Tensor(
# [[0 0]
# [1 2]], shape=(2, 2), dtype=int64), values=tf.Tensor([1 2], shape=(2,), dtype=int32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
# to dense
print(tf.sparse.to_dense(sparse_tensor))
# -> tf.Tensor(
# [[1 0 0 0]
# [0 0 2 0]
# [0 0 0 0]], shape=(3, 4), dtype=int32)
'AI > AI 라이브러리' 카테고리의 다른 글
[Tensorflow] 모델 컴파일, 학습, 예측 (0) | 2024.01.09 |
---|---|
[Tensorflow] 모델 만들기 (0) | 2024.01.09 |
[Pytorch] 연습 데이터로 라이브러리 익숙해지기2 (0) | 2024.01.03 |
[Pytorch] 연습 데이터로 라이브러리 익숙해지기1 (0) | 2024.01.02 |
[Pytorch] 모델 저장하고 불러오기 (0) | 2023.12.29 |