이 포스트는 Github 접속 제약이 있을 경우를 위한 것이며, 아래와 동일 내용을 실행 결과와 함께 Jupyter notebook으로도 보실 수 있습니다.
You can also see the following as Jupyter notebook along with execution result screens if you have no trouble connecting to the Github.

3-1. Train Data 확인

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

x_train = [[1., 2.],
          [2., 3.],
          [3., 1.],
          [4., 3.],
          [5., 3.],
          [6., 2.]]
y_train = [[0.],
          [0.],
          [0.],
          [1.],
          [1.],
          [1.]]

x_test = [[5.,2.]]
y_test = [[1.]]


x1 = [x[0] for x in x_train]
x2 = [x[1] for x in x_train]

colors = [int(y[0] % 3) for y in y_train]
plt.scatter(x1,x2, c=colors , marker='^')
plt.scatter(x_test[0][0],x_test[0][1], c="red")

plt.xlabel("x1")
plt.ylabel("x2")
plt.show()

  • tf.data.Dataset으로 학습시킬 data 담기 (Batch Size는 한번에 학습시킬 Size)
  • features,labels는 실제 학습에 쓰일 Data (연산을 위해 Type를 맞추기)
    dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(len(x_train))       #.repeat()
    

3-2. 가중치 설정

W = tf.Variable(tf.zeros([2,1]), name='weight')
b = tf.Variable(tf.zeros([1]), name='bias')

3-3. Sigmoid 함수를 가설로 선언

  • tf.1.x 의 tf.div가 tf.divide로 변경됨
    def logistic_regression(features):
      hypothesis  = tf.divide(1., 1. + tf.exp(tf.matmul(features, W) + b))
      return hypothesis
    

3-4. 가설 검증할 Cost 함수 정의

  • tf 1.x에서 tf.log가 tf.math.log로 변경됨 ```python def loss_fn(hypothesis, features, labels): cost = -tf.reduce_mean(labels * tf.math.log(logistic_regression(features)) + (1 - labels) * tf.math.log(1 - hypothesis)) return cost

optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)


## 3-5. 추론 값은 0.5 기준, 0과 1의 값을 리턴
- 가설을 통해 실재 값과 비교한 정확도를 측정합니다
```python
def accuracy_fn(hypothesis, labels):
    predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
    accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, labels), dtype=tf.int32))
    return accuracy

3-6. GradientTape를 통해 경사값 계산

def grad(hypothesis, features, labels):
    with tf.GradientTape() as tape:
        loss_value = loss_fn(logistic_regression(features),features,labels)
    return tape.gradient(loss_value, [W,b])

3-7. 학습 실행

  • 새로운 Data를 통한 검증 수행: [5,2] 로 테스트 수행 (그래프상 1이 나와야 정상) ```python EPOCHS = 1001

for step in range(EPOCHS): for features, labels in iter(dataset): grads = grad(logistic_regression(features), features, labels) optimizer.apply_gradients(grads_and_vars=zip(grads,[W,b])) if step % 100 == 0: print(“Iter: {}, Loss: {:.4f}”.format(step, loss_fn(logistic_regression(features),features,labels))) test_acc = accuracy_fn(logistic_regression(x_test),y_test) print(“Testset Accuracy: {:.4f}”.format(test_acc)) ```