from tensorflow import keras
(train_input, train_target), (test_input, test_target) = \
keras.datasets.fashion_mnist.load_data()
print(train_input.shape, train_target.shape)
print(test_input.shape, test_target.shape)
(60000, 28, 28) (60000,)
(10000, 28, 28) (10000,)
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 10, figsize=(10,10))
for i in range(10) :
axs[i].imshow(train_input[i], cmap='gray_r')
axs[i].axis('off')
plt.show()
print([train_target[i] for i in range(10)])
[9, 0, 0, 3, 0, 2, 7, 2, 5, 5]
train_scaled = train_input / 255.0
train_scaled = train_scaled.reshape(-1, 28*28)
print(train_scaled.shape)
(60000, 784)
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import cross_validate
sc = SGDClassifier(loss='log', max_iter=5, random_state=42)
scores = cross_validate(sc, train_scaled, train_target, n_jobs=-1)
print(np.mean(scores['test_score']))
0.8195666666666668 // 검증 set
from sklearn.model_selection import train_test_split
train_scaled, val_scaled, train_target, val_target = train_test_split(
train_scaled, train_target, test_size=0.2, random_state=42
)
print(train_scaled.shape, train_target.shape)
print(val_scaled.shape, val_target.shape)
(38400, 784) (38400,)
(9600, 784) (9600,)
dense = keras.layers.Dense(10, activation='softmax', input_shape=(784,))
model = keras.Sequential(dense)
compile(loss, metrics) : 손실함수, 정확도 등 설정
keras 손실함수
이진분류 : binary_crossentropy
다중분류 : categorical_crossentropy
model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
print(train_target[:10])
[9 4 9 0 4 9 3 6 4 7] // target 값 정수임
model.fit(train_scaled, train_target, epochs=5)
model.evaluate(val_scaled, val_target)
-> 검증 정확도 85%
사이킷런
모델 : SGDClassifier(loss)
훈련 : sc.fit()
평가 : sc.score()
케라스
층생성 : Dense()
모델 : Sequential(dense), compile(loss)
훈련 : fit()
평가 : evaluate()