2021. 9. 15. 23:26ㆍai/Deep Learning
# 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 |