Multi layer (NN기초) 코드

2021. 9. 15. 23:26ai/Deep Learning

728x90
# tensorflow 1.15버전

# # tensorflow 1.15버전을 이용해 AND, OR, XOR Gate에 대한 진리표를 학습시켜보아요!

 

import numpy as np
import tensorflow as tf
from sklearn.metrics import classification_report

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

# AND Gate
# t_data = np.array([[0], [0], [0], [1]], dtype=np.float64)

# OR Gate
# t_data = np.array([[0], [1], [1], [1]], dtype=np.float64)

# XOR Gate
t_data = np.array([[0], [1], [1], [0]], dtype=np.float64)



# 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
logit = tf.matmul(X,W) + b
H = tf.sigmoid(logit)

# loss
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(300000):
    
    tmp, loss_val = sess.run([train, loss], feed_dict={X:x_data,
                                                       T:t_data})
    if step % 30000 == 0:
        print('loss : {}'.format(loss_val))
        

# evaluation

acc = tf.cast(H > 0.5, dtype=tf.float32)
result = sess.run(acc, feed_dict={X:x_data})

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

# 아하... AND Gate연산은 Logistic Regression(Perceptron)으로 구현할 수 있구나!!
# 아하... OR Gate연산은 Logistic Regression(Perceptron)으로 구현할 수 있구나!!
# 어라... XOR Gate연산은 Logistic Regression(Perceptron)으로 구현할 수 없어요!!

 


# multi layer를 이용해서 XOR 문제를 학습해 보아요!

# %reset
import numpy as np
import tensorflow as tf
from sklearn.metrics import classification_report

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

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

# Weight & bias
W1 = tf.Variable(tf.random.normal([2,10]))
b1 = tf.Variable(tf.random.normal([10]))
layer2 = tf.sigmoid(tf.matmul(X,W1) + b1)

W2 = tf.Variable(tf.random.normal([10,8]))
b2 = tf.Variable(tf.random.normal([8]))
layer3 = tf.sigmoid(tf.matmul(layer2,W2) + b2)

W3 = tf.Variable(tf.random.normal([8,1]))
b3 = tf.Variable(tf.random.normal([1]))

# hypothesis
logit = tf.matmul(layer3,W3) + b3
H = tf.sigmoid(logit)

# loss
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):
    
    tmp, loss_val = sess.run([train, loss], feed_dict={X:x_data,
                                                       T:t_data})
    if step % 3000 == 0:
        print('loss : {}'.format(loss_val))
       

# evaluation

acc = tf.cast(H > 0.5, dtype=tf.float32)
result = sess.run(acc, feed_dict={X:x_data})

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


tf 2. 0 ver xor 

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 Adam

from sklearn.metrics import classification_report

 

# Training Data Set (XOR)

x_data = np.array([[0,0], [0,1], [1,0], [1,1]], dtype=np.float64)

t_data = np.array([[0], [1], [1], [0]], dtype=np.float64)

 

# model

model = Sequential()

 

# layer추가

model.add(Flatten(input_shape=(2,)))

 

model.add(Dense(10, activation='sigmoid'))

model.add(Dense(8, activation='sigmoid'))

model.add(Dense(20, activation='sigmoid'))

 

model.add(Dense(1, activation='sigmoid'))

 

# compile

model.compile(optimizer=Adam(learning_rate=1e-2),

              loss='binary_crossentropy',

              metrics=['acc'])

 

# 학습

model.fit(x_data,

          t_data,

          epochs=30000,

          verbose=0)

 

predict_val = model.predict(x_data)

 

result = tf.cast(predict_val > 0.5, dtype=tf.float32).numpy().ravel()

 

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

'ai > Deep Learning' 카테고리의 다른 글

CNN 기초, 이미지 처리  (0) 2021.09.17
MNINST (Deep Learning 역사 ver) [he's intializer]  (0) 2021.09.17
Deep Learning 역사  (0) 2021.09.16
MNIST Multi layer ver 코드  (0) 2021.09.16
MLP [ Multi layer perceptron (NN기초) ]  (0) 2021.09.15