초보 개발자

딥러닝 xor 본문

AI 웹개발 트랙 - 내배캠/4주차

딥러닝 xor

taehyeki 2022. 1. 7. 14:54
plt.figure(figsize=(16, 10))
sns.countplot(train_df['label'])
plt.show()​
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
x_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32)
y_data = np.array([[0], [1], [1], [0]], dtype=np.float32)

임포트 후 플로팅 포인트 32비트의 넘피어레이를 만들어 주었다.

model = Sequential([
  Dense(8, activation='relu'), #히든레이어
  Dense(1, activation='sigmoid'),
])

model.compile(loss='binary_crossentropy', optimizer=SGD(lr=0.1))

model.fit(x_data, y_data, epochs=1000, verbose=0)

 

y_pred = model.predict(x_data)

print(y_pred)

[[0.07801041]
 [0.9851884 ]
 [0.9874587 ]
 [0.00747052]]

 

Sequential API는 순차적인 모델 설계에는 편리한 API 이지만, 복잡한 네트워크를 설계하기에는 한계가 있기 때문에 실무에서는 Functional API를 주로 사용합니다.

 

import numpy as np
from tensorflow.keras.models import Model #시퀀셜대신 모델을씀
from tensorflow.keras.layers import Dense, Input # 덴스뿐만아니라 인풋도 가져옴
from tensorflow.keras.optimizers import Adam, SGD
input = Input(shape=(2,))
hidden = Dense(8, activation='relu')(input)
output = Dense(1, activation='sigmoid')(hidden)

model = Model(inputs=input, outputs=output)

model.compile(loss='binary_crossentropy', optimizer=SGD(lr=0.1))

model.summary()
model.fit(x_data, y_data, epochs=1000, verbose=0)

y_pred = model.predict(x_data)

print(y_pred)


[[0.02292162]
 [0.989807  ]
 [0.98963356]
 [0.00882056]]

 

사인 랭귀지

 

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder

임포트 후 데이터를 읽어들인다.

train_df = pd.read_csv('sign_mnist_train.csv')

train_df.head()
test_df = pd.read_csv('sign_mnist_test.csv')

test_df.head()

 

df를 float로 바꾸고 label에 값이 담겼으니 x에서 제외시켜주자. 그리고 values를 사용하면 넘파이 어레이로 변경시켜준다.

train_df = train_df.astype(np.float32)
x_train = train_df.drop(columns=['label'], axis=1).values
y_train = train_df[['label']].values

test_df = test_df.astype(np.float32)
x_test = test_df.drop(columns=['label'], axis=1).values
y_test = test_df[['label']].values

print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)

value하고 안하고의 차이

이미지를 보기 위해선 지금 28 x 28 인 픽셀을 일렬로 세워놨기 때문에 reshape를사용하여 이걸 다시 28 x 28 형태의 배열로 바꿔주어야 한다.

 

encoder = OneHotEncoder()
y_train = encoder.fit_transform(y_train).toarray()
y_test = encoder.fit_transform(y_test).toarray()

print(y_train.shape)

그 다음에 원 핫 인코딩을 시켜준다.

 

그다음 표준화를 시켜주려고한다. 이미지 데이터 픽셀은 0~255사이의 정수로 되어있다 기걸 255로 나누어 0~1사이의 소수점 데이터로 바꾸면된다.

이렇게하면 모든 데이터가 255로 나누어진다.

인풋에 784개의 데이터가 한번당 들어가니까 784를 적어주고

히든레이어를 3개 구성 

마지막 out에는 a-z까지 (jz)는 생략 24개가 분류되어 들어오므로 24를 적어주고 분류니까 softmax를 사용

또 여러개가 나오니까 categorical_crossentropy를 사용한다.

 

모델을 학습시킨다.

히스토리에 넣으면 

표로 나타낼 수도 있다.

'AI 웹개발 트랙 - 내배캠 > 4주차' 카테고리의 다른 글

파이썬 큐 Queue 간단 구현!!  (0) 2022.01.07
파이썬 스택 Stack 간단구현!  (0) 2022.01.07
머신러닝  (0) 2022.01.06
np.random.seed(int)  (0) 2022.01.06
df drop  (0) 2022.01.06