/ ML

[tensoflow 2.0] 2. 텐서플로 사용하기

텐서플로 사용하기

텐서플로(Tensorflow) 소개

tensorfow는 머신러닝 플랫폼으로 다른 플랫폼으로 케라스도 있지만 tensorflow 2.0으로 들어가며 케라스가 깊게 연관되어 힘들게 케라스를 사용하기 더 쉽게 되었다.

이 강의에서는 텐서 플로우 1.0과 2.0 다 다룬다. 다행히 텐서플로우는 1과 2가 그렇게 많이 차이가 없어서 안정화된 1.0 버전을 배우고 2.0으로 마이그래이션 하는 과정을 함께 진행한다.

딥러닝 과정에서 영상인식 숫자인식 과정을 진행할 예정

[tensorflow1 → tensorflow2]

데이터 셋을 만드는 과정까지는 동일하다.

# x and y data
x_train = [1,2,3,4]
y_train = [1,2,3,4]

텐서 플로우2는 케라스를 사용하기 때문에 텐서 플로우 1보다 코드가 많이 짧아졌다.

선형 회귀를 위해서 텐서 플로우 1에서는 다음과 같은 코드를 만들어 텐서를 구성해야 했다.

  • W = tf.Variable(tf.random_normal([1), name = 'weight')
  • B = tf.Variable(tf.random_normal([1), name = 'bias')
  • x = tf.placeholder(tf.flat32, shape = [None]
  • y = tf.placeholder(tf.flat32, shape = [None]

다음으로 가설을 구성해야 했다.

  • hypothesis = x * w + b

손실 함수를 구성해야 한다.

  • cost = tf.reduce_mean(tf.squre(hypothesis - y))

경사 하강법을 사용하기 위해서 Optimizer를 구성해야 했다.

  • GradientDecentOptimizer()

텐서 플로우 2에서는 아래와 같이 사용한다.

keras는 기본적으로 다차원 레이어를 기본으로 하고 있기 때문에 Sequentail()을 만들어 생성

# keras의 다차원 계층 모델인 Sequential를 레이어를 만든다.
model = tf.keras.models.Sequential()
# 입력이 1차원이고 출력이 1차원임을 뜻함 - Dense는 레이어의 종류
model.add(tf.keras.layers.Dense(1, input_dim = 1)

# Optimizer - Stochastic gradient descent - 확률적 경사 하강법
sgd = tf.keras.optimizers.SGD(learning_rate=0.01)

# cost/loss funcion
# loss를 mean_squared_error 방식을 사용한다는 의미로 mse 라고 써도 인식한다.
model.compile(loss='mean_squared_error',optimizer=sgd)

#fit the line
# 텐서 플로우 1과 다르게 세션을 만들어서 돌릴 필요가 없다.
# 간단하게 만들어서 학습을 시작한다.
model.fit(x_train,y_train,epochs=2000)

학습한 모델에 데이터를 넣어보면 다음과 같이 나온다.

# x 값이 5면 예상값이 얼마인지 확인하는 부분
print(model.predict(np.array([5])))
=> [[4.9985623]]