juuuding

[Advanced Learning Algorithms] Neural Networks - TensorFlow implementation 본문

인공지능/코세라 머신러닝 특화과정

[Advanced Learning Algorithms] Neural Networks - TensorFlow implementation

jiuuu 2023. 11. 22. 14:00

 Inference in Code

 

[Coffee roasting 예제]

 training set X에 temperature & duration 입력하여 good coffee / bad coffee 를 구분해보자. neural network의 layer 개수는 2개, layer1은 unit 3개, layer2는 unit 1개로 이루어져 있다고 가정한다. 그 후 layer2를 거친 값인 a2가 임계값 0.5 이상이면 

"good coffee", 0.5 미만이면 "bad coffee"로 구분한다. model 생성을 위해 TensorFlow를 사용한다.

 

# layer1 적용
x=np.array([[200.0, 17.0]])
layer_1 = Dense(units = 3, activations = 'sigmoid')
a1 = layer_1(x)

# layer2 적용
layer_2 = Dense(units = 1, activations = 'sigmoid')
a2 = layer_2(a1)

if a2 >= 0.5:	# good coffee
	yhat = 1
else:	# bad coffee
	yhat = 0

 

 

 

 Data in TensorFlow

 

※ numpy가 먼저 생성되어 라이브러리에 적용되었기 때문에, numpy와 tensorflow의 데이터 표현 방식에는 불일치가 존재

 

 feature vector를 입력할 때는 다음과 같이 대괄호를 두 번 사용하여야 한다. 

x = np.array([[200.0, 17.0]])

 

 이유가 무엇일까? 이유를 알아보기 앞서 numpy가 vectors와 matrices를 저장하는 방법에 대해 알아보자.

 

 

 위의 행렬을 표현하기 위해서는 다음과 같은 코드가 사용된다. 

x = np.array([[1,2,3],
	      [4,5,6]])

 

 위의 행렬은 2행 3열의 행렬이다.

 

 다음의 4행 2열 행렬을 표현하기 위해서는 아래의 코드가 사용된다.

 

 

x = np.array([[0.1,0.2],
              [-3.0,-4.0],
              [-0.5,-0.6],
              [7.0,8.0]])

 

  이와 같은 행렬은 2차원 배열이며, 2차원은 대괄호 2개로 표현해야한다. 

 위와는 다르게 feature vector은 1차원 배열은 벡터이기 때문에 다음과 같이 표현이 된다.

 

 

x = np.array([200,17])

 

 linear / logistic regression의 input vector에서는 이렇게 작성하지만 tensorflow에서는 2차원 배열인 행렬을 사용하여 데이터를 표현한다. 그 이유는 tesorflow는 매우 큰 데이터 셋을 처리하도록 설계되어 있는데, 1차원 배열 대신 2차원 배열인 행렬 표현을 함으로써 내부 계산의 효율을 높이기 위해서다. 

 

 앞에서 tensorflow와 numpy의 데이터 표현 방식에는 차이가 있다고 했는데, tensorflow 데이터를 numpy 데이터로 바꾸려면 numpy() 함수를 사용하면 된다. 

 

x = np.array([[200.0, 17.0]])
layer_1 = Dense(units=3, activation='sigmoid')
a1 = layer_1(x) # tensorflow 방식으로 표현됨

# tensorflow -> numpy 방식으로 변환
a1.numpy()

 

 

 

 Building a neural network

 

 이때까지 neural network를 생성한 방식은 다음과 같다.

 

x= np.array([[200.0,17.0]])
layer_1 = Dense(units=3, activation = 'sigmoid')
a1=layer_1(x)

layer_2 = Dense(units=1, activation ='sigmoid')
a2=layer_2(a1)

 

[모델 생성]

 

layer_1 = Dense(units=3, activation='sigmoid')
layer_2 = Dense(units=1, activation='sigmoid')
model = Sequential([layer_1,layer_2])

x=np.array([[200.0,17.0],
            [120.0,5.0],
            [425.0,20.0],
            [212.0,18.0]])
y=np.array([1,0,0,1])
model.complie()

# tensorflow에 layer 1,2를 순차 연결하여 생성된 신경망 모델을 가져다 x,y 데이터를 기반으로 훈련 지시
model.fit(x,y)

# forward propagation으로 새로운 x를 가지고 추론 수행
model.predict(x_new)

 

 

위와 같이 표현한 코드를 다음과 같이 표현할 수 있다.

 

model = Sequential([layer_1 = Dense(units=3, activation='sigmoid'),
                    layer_2 = Dense(units=1, activation='sigmoid')])

model.complie()

x=np.array([[200.0,17.0],
            [120.0,5.0],
            [425.0,20.0],
            [212.0,18.0]])
y=np.array([1,0,0,1])

# tensorflow에 layer 1,2를 순차 연결하여 생성된 신경망 모델을 가져다 x,y 데이터를 기반으로 훈련 지시
model.fit(x,y)

# forward propagation으로 새로운 x를 가지고 추론 수행
model.predict(x_new)