데스크톱, 서버 또는 모바일 디바이스에서 CPU나 GPU를 사용하여 연산을 구동할 수 있다.
분산환경에서 실행 가능
단순한 아이디어 테스트부터 서비스 단계까지 모두 이용 가능
GradientTape를 사용하여 자동으로 미분을 계산 가능
-> 딥러닝 역전파 과정에서 오차를 최소화하고자 편미분을 이용해 가중치를 업데이트한다.
->미분 계산을 자동화 하는 것이 GradientTape이며, 아래와 같이 사용한다.
import tensorflow as tf
with tf.GradientTape() as tape:
tape.watch(model.input)
model_vals = model(v)
버전 | 텐서플로 1.x | 텐서플로 2.x |
---|---|---|
차이점 | - 데이터를 이용해 훈련시키려면 그래프를 만들고 플레이스 홀더(placeholder)를 정의한 후 세션을 실행해야 한다. 즉, 세션 실행 시점에 입력 데이터셋을 플레이스 홀더에 넣고 처리하는 복잡한 과정이 필요. | 즉시 실행이 기본 모드로 설정되어 있어 플레이스홀더 , 세션, 실행 등의 과정이 필요하지 않다. 즉, 모델을 사용하여 데이터를 훈련하고 예측하는 과정이 단순해짐. |
❗코드비교
텐서플로 1.x
with tf.Session() as session:
session.run(tf.tables_initializer())
session.run(tf.tables_initializer())
model.fit(X_train, y_train, validation_data =(X_valid, y_valid), epochs =10,batch_size=64)
텐서플로 2.x
model.fit(X_train, y_train, validation_data =(X_valid, y_valid), epochs=10, bacth_size=64)
준비된 데이터를 사용해 모델 생성
-> 생성된 모델을 사용해 분류 및 예측으로 마무리 할 수도 있지만, tensorflow hub에 게시해 재사용할 수 있음
-> 사용자에게 웹이나 모바일로 서비스를 배포할 수 있는 환경도 제공.
데이터 호출에는 파이썬 라이브러리(pandas)를 이용하는 방법과 텐서플로를 이용하는 방법이 있다.
데이터가 이미지일 경우 : 분산된 파일에서 데이터를 읽은 후 전처리를 하고 배치 단위로 분활하여 처리.
데이터가 텍스트일 경우 : 임베딩 과정을 거쳐 서로 다른 길이의 시퀸스를 배치 단위로 분할 처리.
❗임의 데이터셋 사용
- np.random을 이용해 임의의 데이터들을 데이터셋으로 만든후 텐서로 변환해 사용.
import tensorflow as tf #텐서플로 라이브러리 호출 x = np.random.sample((100.3)) # (100, 3)형태의 무작위 난수 생성 datast = tf.data.Dataset.from_tensor_slices(x) # 일반이미지나 배열을 리스트 형식으로 데이터셋에 넣
❗텐서플로에서 제공하는 데이터셋 사용
- tensorflow_datasets라는 별도의 패키지를 사용한다
# tensorflow_datasets패키지 설치 pip install tensorflow-datasets
- 이후 tfds 이름으로 패키지를 호출한다.
# tensorflow_datasets패키지 설치 import tensorflow_datasets as tfds ds = tgds.load('mnist' , split = 'train', shuffle_files=True)
❗케라스에서 제공하는 데이터셋 사용
import tensorflow as tf # 케라스를 이용하여 mnist 데이터셋 내려받기 data_train, data_test = tf.keras.datasets.mnist.load_data() # 훈련데이터셋 정의 (images_train, labels_train) = data_train # 검증 데이터셋 정의 (images_test, labels_test) = data_test
❗인터넷에서 데이터셋을 로컬 컴퓨터에 내려받아 사용
import tensorflow as tf url = ' 주소' text_path = tf.keras.utils.get_file("파일",origin=url)