본문 바로가기
python/tensorflow

[TensorFlow] 인공지능 : 심층 신경망 구현 / Logistic Regression / 분류모델

by 래끼 2022. 2. 16.
728x90
반응형

 

작년에 학교에서 전공으로 인공지능 수업 들었을때 했던 과제인데

필요한 분들 있으실까봐 공유합니다!

 

 

문제

털과 날개에 따라 포유류, 조류, 기타를 바탕으로 데이터를 20개 이상 생성하여 심층 신경망을 구현하고, 결과를 분석한다.

1. 데이터는 개별적으로 생성한다.

2. 심층신경망의 입력층, 은닉층 3개(첫번째, 두번째, 세번째 은닉층 노드 개수 각각 10개, 20개, 10개), 출력층으로 되어 있는 모델을 생성하고 그밖의 사항들은 자유롭게 지정한다.

3. 최적화 방법은 Gradient Descent Optimization 을 사용한다.

 

 


 

 

 

1. 먼저 tensorflow를 import하고 버전을 확인한다

import tensorflow as tf
print(tf.__version__)

 

2. 버전을 1.15버전으로 낮춰주는 작업을 한다

# 2.x 버전일 경우 현재 tensorflow 제거
!pip uninstall tensorflow

# 1.15 버전으로 tensorflow 설치
!pip install tensorflow==1.15

 

3. numpy 라이브러리를 import 해주고 데이터를 20개 넣어주었다

import numpy as np
x_data=np.array([[0,0],[1,0],[1,1],[0,0],[0,1],
                 [0,0],[1,0],[1,1],[0,0],[0,1],
                 [0,0],[1,0],[1,1],[0,0],[0,1],
                 [0,0],[1,0],[1,1],[0,0],[0,1]])
y_data=np.array([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,0,1],
                 [1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,0,1],
                 [1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,0,1],
                 [1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,0,1]])

 

4. 은닉층을 3개 만들고 각 노드 개수를 10,20,10 으로 만드는 작업을 해준다

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

W1 = tf.Variable(tf.random_uniform([2,10], -1., 1.))
b1 = tf.Variable(tf.zeros([10]))
L1 = tf.add(tf.matmul(X, W1), b1)
L1 = tf.nn.relu(L1)

W2 = tf.Variable(tf.random_uniform([10,20], -1., 1.))
b2 = tf.Variable(tf.zeros([20]))
L2 = tf.add(tf.matmul(L1, W2), b2)
L2 = tf.nn.relu(L2)

W3 = tf.Variable(tf.random_uniform([20,10], -1., 1.))
b3 = tf.Variable(tf.zeros([10]))
L3 = tf.add(tf.matmul(L2, W3), b3)
L3 = tf.nn.relu(L3)

W4 = tf.Variable(tf.random_uniform([10,3], -1., 1.))
b4 = tf.Variable(tf.zeros([3]))

 

5. 최정적으로 model을 만들고 최적화 방법으로 gradient descent optimizer 를 사용했다

model = tf.add(tf.matmul(L3,W4),b4)

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y,logits=model))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(cost)

 

6. 학습을 100번 반복했다

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

for step in range(100):
  sess.run(train_op, feed_dict={X: x_data, Y: y_data})

  if (step + 1) % 10 == 0:
    print(step + 1, sess.run(cost, feed_dict={X: x_data, Y: y_data}))

이런 결과가 나왔다

 

7. 예측값고 실제값을 확인한다. 결과가 모두 일치했고 정확도가 100으로 출력됬다

prediction = tf.argmax(model, axis=1)
target = tf.argmax(Y, axis=1)
print('예측값: ', sess.run(prediction, feed_dict={X: x_data}))
print('실제값: ', sess.run(target, feed_dict={Y: y_data}))

 

 

8.마지막으로 정확도를 확인한다.

is_correct = tf.equal(prediction, target)
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))
print('정확도: %.2f' % sess.run(accuracy * 100, feed_dict={X: x_data, Y: y_data}))

정확도로 100%가 나왔다.

728x90
반응형

댓글