본문 바로가기

멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차/DL

4/11 월

728x90

월요일!

 

오늘은 딥러닝과 신경망에 대해 배운다!

 

Perceptron은 Neuron 한 개

 

Deep Learning : 한 개의 Logistic Regression을 표현하는 node가 서로 연결되어 있는 신경망 구조를 바탕으로 한 개의 입력층, 한 개 이상의 은닉층(많을수록 학습이 잘 됨. 1~3개가 적당), 한 개의 출력층으로 이루어짐

 

feed forward(propagation). XOR 문제는 node 한 개(perceptron)로는 학습이 안 됨

 

1. Perceptron. GATE 연산(AND, OR, XOR 연산자)을 Logistic Regression과 Tensorflow 1.5 Ver.으로 구현

import numpy as np
import tensorflow as tf
from sklearn.metrics import classification_report
import warnings
warnings.filterwarnings('ignore')

# Training Data Set
x_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float64)

# # AND GATE 연산에 대한 t_data
# t_data = np.array([0, 0, 0, 1], dtype=np.float32) # [[0.][0.][0.][1.]]

# # OR GATE 연산에 대한 t_data
# t_data = np.array([0, 1, 1, 1], dtype=np.float64) # [[0.][1.][1.][1.]]

# XOR GATE 연산에 대한 t_data. exclusive OR
t_data = np.array([0, 1, 1, 0], dtype=np.float64) # accuracy 0.75. loss도 떨어지지 않는다

# Placeholder
X = tf.placeholder(shape=[None,2], dtype=tf.float32)
T = tf.placeholder(shape=[None,1], dtype=tf.float32)

# Weight, bias
W = tf.Variable(tf.random.normal([2,1]))
b = tf.Variable(tf.random.normal([1]))

# Hypothesis, model, predict model, Logistic Regression Model
logit = tf.matmul(X,W) + b
H = tf.sigmoid(logit)

# cross entropy(loss func)
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logit, labels=T))

# train
train = tf.train.GradientDescentOptimizer(learning_rate=1e-2).minimize(loss)

# Session & 초기화
sess = tf.Session()
sess.run(tf.global_variables_initializer())

# 반복 학습
for step in range(30000):
    _, loss_val = sess.run([train, loss], feed_dict={X:x_data, T:t_data.reshape(-1,1)})
    
    if step % 3000 == 0:
        print('loss value : {}'.format(loss_val))
# evaluation(모델평가)
predict = tf.cast(H >= 0.5, dtype=tf.float32)
predict_val = sess.run(predict, feed_dict={X:x_data})
print(predict_val)

print(classification_report(t_data, predict_val.ravel()))

 

2. Perceptron. GATE 연산(XOR 연산자)을 DNN과 Tensorflow 1.5 Ver.으로 구현

import numpy as np
import tensorflow as tf
from sklearn.metrics import classification_report
import warnings
warnings.filterwarnings('ignore')

# Training Data Set
x_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float64)

# XOR GATE 연산에 대한 t_data. exclusive OR
t_data = np.array([0, 1, 1, 0], dtype=np.float64) # [[0.][1.][1.][0.]]. accuracy 1.00

# Placeholder
X = tf.placeholder(shape=[None,2], dtype=tf.float32)
T = tf.placeholder(shape=[None,1], dtype=tf.float32)

# Weight, bias
W2 = tf.Variable(tf.random.normal([2,10])) # Input Layer
b2 = tf.Variable(tf.random.normal([10]))
layer2 = tf.sigmoid(tf.matmul(X,W2) + b2)

W3 = tf.Variable(tf.random.normal([10,6])) # Hidden Layer
b3 = tf.Variable(tf.random.normal([6]))
layer3 = tf.sigmoid(tf.matmul(layer2,W3) + b3)

W4 = tf.Variable(tf.random.normal([6,1])) # Hidden Layer
b4 = tf.Variable(tf.random.normal([1]))

# Hypothesis, model, predict model, Logistic Regression Model
logit = tf.matmul(layer3,W4) + b4 # Output Layer
H = tf.sigmoid(logit)

# cross entropy(loss func)
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logit, labels=T))

# train
train = tf.train.GradientDescentOptimizer(learning_rate=1e-2).minimize(loss)

# Session & 초기화
sess = tf.Session()
sess.run(tf.global_variables_initializer())

# 반복 학습
for step in range(30000):
    _, loss_val = sess.run([train, loss], feed_dict={X:x_data, T:t_data.reshape(-1,1)})
    
    if step % 3000 == 0:
        print('loss value : {}'.format(loss_val))
# evaluation(모델평가)
predict = tf.cast(H >= 0.5, dtype=tf.float32)
predict_val = sess.run(predict, feed_dict={X:x_data})
print(predict_val)

print(classification_report(t_data, predict_val.ravel())) # accuracy 1.00

 

3. Perceptron. GATE 연산(XOR 연산자)을 DNN과 Tensorflow 2.x Ver.으로 구현

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense
from tensorflow.keras.optimizers import SGD
from sklearn.metrics import classification_report
import warnings
warnings.filterwarnings('ignore')

# Training Data Set
x_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float64)

# XOR GATE 연산에 대한 t_data. exclusive OR
t_data = np.array([0, 1, 1, 0], dtype=np.float64)

# Tensorflow 구현
model = Sequential()

model.add(Flatten(input_shape=(2,))) # input layer
model.add(Dense(units=128, activation='sigmoid')) # 첫 번째 hidden layer. W 잡아주지 않음
model.add(Dense(units=32, activation='sigmoid')) # 두 번째 hidden layer
model.add(Dense(units=16, activation='sigmoid')) # 두 번째 hidden layer
model.add(Dense(units=1, activation='sigmoid')) # output layer

model.compile(optimizer=SGD(learning_rate=1e-2), loss='binary_crossentropy')

model.fit(x_data, t_data.reshape(-1,1), epochs=30000, verbose=0)
# evaluation(모델평가)
predict_val = model.predict(x_data)
predict_val = (tf.cast(predict_val > 0.5, dtype=tf.float32)).numpy().ravel()

print(classification_report(t_data, predict_val)) # accuracy 0.50
# 파라미터 조절을 더 해야 해요!!!
# 정상적으로 학습이 진행되어야 해요!!!

 

1. 3/15 화 2. 3/16 수 3. 3/17 목 4. 3/18 금 5. 3/21 월
ML
환경 설정

(아나콘다, 주피터 노트북),
Pandas,

Numpy,
ndarray
ML
Numpy,

행렬곱연산,
전치행렬,
iterator,
axis,
Pandas,
Series,
DataFrame
ML
Pandas,

DataFrame,
함수들
ML
Pandas,

데이터 분석,
데이터 전처리
ML
Pandas,

데이터 전처리,
수행평가
6. 3/22 화 7. 3/23 수 8. 3/24 목 9. 3/25 금 10. 3/28 월
ML
데이터 시각화,

Matplotlib,
기술통계
ML
기술통계
ML
기술통계,

머신러닝
ML
미분,

Regression
ML
머신러닝 기법들,
Regression
11. 3/29 화 12. 3/30 수 13. 3/31 목 14. 4/1 금 15. 4/4 월
ML
Regression 구현

(Python, Scikit-Learn)
ML
Outlier,

Z-score,
MinMaxScaler,
다변수
 ML
Tensorflow,

Classification
ML
Binary Classification,
Logistic Regression
ML
평가지표(Metrics)
16. 4/5 화 17. 4/6 수 18. 4/7 목 19. 4/8 금 20. 4/11 월
ML
평가 시 주의사항

(Over-fitting,
Regularization,
Over-Sampling)
ML
Multinomial Classification,

SGD Classifier,
Softmax,
batch
ML
Multinomial Classification

Tensorflow 2.0
Keras
ML
KNN

Deep Learning
Perceptron,
Nueral Network

* 다층 Layers(은닉층)!

728x90

'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > DL' 카테고리의 다른 글

4/18 월  (0) 2022.04.18
4/15 금  (0) 2022.04.15
4/14 목  (0) 2022.04.14
4/13 수  (0) 2022.04.13
4/12 화  (0) 2022.04.12