6장. 텐서플로우

Updated:

텐서플로우(Tensorflow)

  • 유연하고, 효율적이며, 확장성이 있는 딥러닝 프레임워크 대형 클러스터 컴퓨터부터 스마트폰까지 다양한 디바이스에서 동작
  • 지원하는 언어 : Python 2/3, C/C++ 등

텐서(Tensor)

  • Tensor = Multidimensional Arrays = Data
  • 딥러닝에서 텐서는 다차원 배열로 나타내는 데이터 예를 들어, RGB 이미지는 삼차원 배열로 나타나는 텐서

플로우(Flow)

  • 플로는 데이터의 흐름을 의미 텐서플로우에서 계산은 데이터 플로우 그래프로 수행 그래프를 따라 데이터가 노드를 거쳐 흘러가면서 계산

텐서 + 플로우

tensorflow

  • 딥러닝에서 데이터를 의미하는 텐서(tensor)와 데이터 플로우 그래프를 따라 연산이 수행되는 형태(Flow)의 합

텐서플로우 사용법

상수 선언 하기

  • value: 반환되는 상수값
  • shape: Tensor의 차원 => tuple의 형식으로 입력한다
  • dtype: 반환되는 Tensor 타입
  • name: 상수 이름
import tensorflkow as tf

# 상수형 텐서 선언
tensor_a = tf.constant(value, dtype=None, shape=None, name=None)

# 모든 원소 값이 0인 Tensor 생성
tensor_b = tf.zeros(shape, dtype=tf.float32, name=None)

# 모든 원소 값이 1인 Tensor 생성
tensor_c = tf.ones(shape, dtype=tf.float32, name=None)

시퀀스 선언 하기

  • start: 시작 값
  • stop: 끝 값
  • num: 생성할 데이터 개수
  • delta: 증가량
  • name: 시퀀스 이름
import tensorflow as tf

# start에서 stop까지 증가하는 num 개수 데이터
tensor_d = tf.linspace(start, stop, num, name=None)

# start에서 stop까지 delta씩 증가하는 데이터
tensor_e = tf.range(start, limit=None, delto=None, name=None)

난수 선언 하기

import tensorflow as tf

# 정규 분포 생성
tensor_f = tf.random.normal(shaape, mean = 0.0, stddev=1.0, dtype=tf.float32, seed=None, name='normal')

# 균증분포 생성
tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name='uniform')

변수 선언 하기

import tensorflow as tf

# 정규분포 생성
tensor_f = tf.Variable(value, name=None)

# 일반적인 퍼셉트론의 가중치와 bias 생성
weight = tf.Variable(10)
bias = tf.Variable(tf.random.normal([10,10]))

텐서 연산자

import tensorflow as tf

# 단항 연산자
tf.negative(x)    # -x x가 숫자일때 
tf.logical_not(x) # !x x가 boolean일때
tf.abs(x)         # x의 절대값

# 이항 연산자
tf.add(x,y)       # x + y
tf.subtract(x,y)  # x - y
tf.multiply(x,y)  # x * y
tf.truediv(x,y)   # x / y
tf.math.mod(x,y)  # x % y
tf.math.pow(x,y)  # x ** y

딥 러닝 구현

  • Epoch: 한번의 epoch는 전체 데이터 셋에 대해 한 번 학습을 완료한 상태
  • Batch: batch(보톤 mini-batch라고 표현)는 나눠진 데이터 셋을 뜻하며 iteration는 epoch를 나누어서 실행하는 횟수

데이터 준비

import tensorflow as tf
import numpy as np

data = np.random.sample((100,2))
labels = np.random.sample((100,1))
# numpy array로부터 데이터셋 생성
dataset = tf.data.Dataset.from_tensor_slices((data,labels))
dataset = dataset.batch(32)
  • Dataset API를 사용하여 딥러닝 모델 용 dataset을 생성

karas

  • keras는 딥러닝 모델을 만들기 위한 고수준의 API 요소를 제공하는 모델 수준의 라이브러리

  • karas API

    • 동일한 코드로 CPU와 GPU에서 실행
    • 사용하기 쉬운 API를 가지고 있어 딥러닝 모델의 프로토타입을 빠르게 구현
    • 합성곱 신경망, 순환 신경망을 지원하면 이 둘을 자유롭게 조합하여 가능
    • MIT 라이선스를 따르므로 상업적인 프로젝트에도 자유롭게 사용할 수

딥러닝 모델 생성 함수

  • 인공신경망 모델을 만들기 위한 함수
tf.keras.models.Sequential()
  • 신경망 모델의 layer 구성에 필요한 함수
tf.keras.layers.Dense(units, activation)
  • units: 레이어 안의 Node의 수
  • activation: 적용할 activation 함수

딥러닝 모델 구축

import tensorflow as tf

model = tf.keras.models.sequential([
  tf.keras.layers.Dense(10, input_dim=2, activation='sigmoid'),
  tf.keras.layers.Dense(10, activation = 'sigmoid')
  tf.keras.layers.Dense(1, activation= 'sigmoid')
])  
  • tf.keras.layers를 추가하여 hidden layer를 쌓음

딥러닝 모델 학습 및 평가

model.compile(loss='mean_squared_error', optimizer='SGD')
model.fit(dataset, epochs=100)

dataset_test = tf.data.Dataset.from_tensor_slices((data_test, labels_test))
dataset_test = dataset.batch(32)

model.evaluate(dataset_test)
predicted_labels_test = model.predict(data_test)

Leave a comment