티스토리 뷰
728x90
개요
- 구글이 만든 Deep Learning에 초점을 맞춘 라이브러리
- GPU 지원
- 분산 컴퓨팅을 지원: 여러 대의 컴퓨터에서 동시에 학습 가능하고 예측도 가능
- 플랫폼에 중립적인 포맷으로 내보낼 수 있음
- 리눅스를 사용하는 파이썬 환경에서 Tensorflow 모델을 훈련시키고 이 모델을 안드로이드에서 실행할 수 있음
API
- 거의 모든 운영체제를 지원하고 Tensorflow Lite를 이용하면 안드로이드 와 iOS 같은 모바일 운영체제에서도 실행되고
- https://www.tensorflow.org/resources Python API를 많이 이용하지만 C++, Java, Go(golang), Swift API도 제공됨
모델 및 데이터 세트 | TensorFlow
저장소와 기타 리소스를 탐색하여 TensorFlow 커뮤니티에서 만든 모델 및 데이터 세트를 찾아보세요.
www.tensorflow.org
설치
#CMD 창에 입력
pip install tensorflow
# 버전 확인
# CMD 창에 python 입력 후 아래 코드 실행
import tensorflow as tf
print(tf.__version__)
연산
- 가장 저 수준의 연산은 C++ 코드로 만들어져 있음
- 연산들이 여러 종류의 커널에서 수행: CPU, GPU, TPU 등
- TPU는 Deep Learning 연산을 위해 특별하게 설계된 ASIC Chip
실습
1. Tensor 생성
- numpy 의 ndarray 와 유사한 방식으로 생성
- immutable data(변경이 불가능한 데이터)는 tf.constant 로 생성
import tensorflow as tf
tf.constant(42)
t = tf.constant([[1, 2, 3], [4, 5, 6]])
print(t)
print(t[:, 1]) #1번째 열: 하나의 열이라서 1차원 배열
print(t[:, 1:]) #1번째 열 부터 모든 열
print(t[:, 1, tf.newaxis]) #데이터를 분할한 후 새로운 축으로 만들어서 출력
#1차원 배열이 2차원 배열로 변환.
2. 연산
- tensorflow 나 numpy 에서 배열을 가지고 산술 연산을 하는 경우 실제로는 함수가 호출된디/.
- + 는 숫자 두 개를 더하는 기능을 가지고 있는데 tensorflow 나 numpy 에서는 __add__를 정의해서 이 메서드를 호출하도록 한다.
- 이름이 다른 함수도 있다. ex)np.mean => tf.reduce_mean
- tf.float32 는 제한된 정밀도를 갖기 때문에 연산을 할 때 마다 결과가 달라질 수 있음
- 동일한 기능을 하는 함수나 클래스를 Keras 가 별도로 소유하고 있는 경우도 있음
Keras는 Tensorflow 의 저수준 API(Core 에 가까운 쪽)
#numpy 의 ndarray 와 거의 동일한 방식으로 연산을 수행하고 함수 나 메서드의 이름도 거의 일치
print(t + 10) #broadcast 연산
print(tf.square(t))
tf.transpose(t) @ t
3. Tensor 와 numpy 의 ndarray
- 2개의 데이터 타입은 호환이 되서 서로 변경이 가능
- Tensor를 ndarray 로 변환하고자 하는 경우는 numpy() 메서드를 호출하거나 numpy 의 array 함수에 Tensor를 대입.
- ndarray를 가지고 Tensor를 만들고자 할 때는 contant 나 variable 같은 함수에 대입.
ar = np.array([2, 3, 4])
print(tf.constant(ar))
print(tf.constant(ar).numpy())
print(np.array(tf.constant(ar)))
4. 타입 변환
- Data Type이 성능을 크게 감소시킬 수 있다.
- Tensorflow 는 타입을 자동변환하지 않는다.
- 타입이 다른데 연산을 수행하고자 하는 경우에는 tf.cast 함수를 이용해서 자료형을 변경해야 한다.
- Tensorflow 가 형 변환을 자동으로 하지 않는 이유는 사용자가 알지 못하는 작업은 수행을 하면 안된다는 원칙 때문
#자료형이 달라서 에러가 발생
print(tf.constant(2.0) + tf.constant(40))
t1 = tf.constant(40)
#형 변환 한 후 연산 수행
print(tf.constant(2.0) + tf.cast(t1, tf.float32))
5. 변수
- 일반적인 데이터는 직접 변경을 하지 않기 때문에 constant 로 생성해서 사용. 역전파 알고리즘을 수행하게 되면 가중치가 업데이트된다. 이때 가중치는 수정되어야 하기 때문에 constant로 생성되면 할 수 없다.
- 수정되어야 하는 데이터는 tf.Variable 을 이용해서 생성
- 데이터를 수정하고자 하는 경우는 assign 함수를 이용
- assign_add 나 assign _sub를 이용해서 일정한 값을 더하거나 빼서 수정할 수 있다.
- 배열의 일부분을 수정할 때는 assign 함수나 scatter_update() 나 scatter_nd_update ()를 이용
#변수 생성
v = tf.Variable([[1, 2, 3], [4, 5, 6]])
print(v)
print(id(v))
#기존 데이터를 복제해서 연산을 수행한 후 그 결과를 가리키도록 한 것
#참조하는 위치가 변경됨
v = v * 2
print(v)
print(id(v))
#내부 데이터 수정
v = tf.Variable([[1, 2, 3], [4, 5, 6]])
print(v)
print(id(v))
#이 경우는 id 변경없이 데이터를 수정
v.assign(2 * v)
print(v)
print(id(v))
Data 구조
- SparseTensor: 0이 많은 Tensor를 효율적으로 나타내는데 tf.sparse 패키지에서 이 Tensor에 대한 연산을 제공
- TensorArray: Tensor의 list
- RaggedTensor: list 의 list
- stringtensor: 문자열 텐서인데 실제로는 바이트 문자열로 저장됨
- set
- queue
Tensorflow 함수
- 일반 함수는 python 의 연산 방식에 따라 동작하지만 Tensorflow 함수를 만들게 되면 Tensorflow 프레임워크가 자신의 연산 방식으로 변경해서 수행을 하기 때문에 속도가 빨라질 가능성이 높음
- Tensorflow 함수를 만드는 방법은 함수를 정의한 후 tf.function 이라는 decorator를 추가해도 되고 tf.function 함수에 함수를 대입해서 리턴받아도 된다.
- 함수를 변경하는 과정에서 Tensorflow 함수로 변경이 불가능하면 일반 함수로 변환한다.
- tf.random: 모듈을 이용해서 난수를 생성
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- it도서큐레이션
- 제주코딩베이스캠프
- 더오름
- 알고리즘
- 파이썬
- 웹개발
- numpy
- 전자회로
- Python
- 티스토리챌린지
- 백준
- 오블완
- SSAFYcial
- 인프런강의
- SSAFY
- django
- dataframe
- 웹프로그래밍
- PANDAS
- ssafy기자단
- 생성형 AI
- 알고리즘이론
- 인프런
- 웹
- 위니브
- 코딩테스트
- 백준알고리즘
- 인프런강의후기
- 위니브엠베서더
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
글 보관함
250x250