ML&DL(수정 중)
인공 신경망
nimij
2022. 3. 22. 01:19
In [1]:
from tensorflow import keras
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
32768/29515 [=================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26427392/26421880 [==============================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
8192/5148 [===============================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4423680/4422102 [==============================] - 0s 0us/step
In [2]:
print(train_input.shape, train_target.shape)
(60000, 28, 28) (60000,)
In [3]:
print(test_input.shape, test_target.shape)
(10000, 28, 28) (10000,)
In [4]:
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()
In [5]:
print([train_target[i] for i in range(10)])
[9, 0, 0, 3, 0, 2, 7, 2, 5, 5]
In [6]:
import numpy as np
print(np.unique(train_target, return_counts = True))
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8), array([6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000]))
로지스틱 회귀로 패션 아이템 분류하기¶
In [7]:
train_scaled = train_input/255.0
train_scaled = train_scaled.reshape(-1,28*28)
In [8]:
print(train_scaled.shape)
(60000, 784)
In [9]:
from sklearn.model_selection import cross_validate
from sklearn.linear_model import SGDClassifier
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
인공 신경망¶
In [10]:
import tensorflow as tf
In [11]:
from tensorflow import keras
In [12]:
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)
In [13]:
print(train_scaled.shape, train_target.shape)
(48000, 784) (48000,)
In [14]:
print(val_scaled.shape, val_target.shape)
(12000, 784) (12000,)
In [16]:
dense = keras.layers.Dense(10, activation='softmax', input_shape = (784,))
In [17]:
model = keras.Sequential(dense)
인공 신경망으로 패션 아이템 분류하기¶
In [24]:
model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
In [25]:
print(train_target[:10])
[7 3 5 8 6 9 3 3 9 9]
In [26]:
model.fit(train_scaled, train_target, epochs=5)
Epoch 1/5
1500/1500 [==============================] - 5s 2ms/step - loss: 0.7805 - accuracy: 0.7343
Epoch 2/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.4886 - accuracy: 0.8385
Epoch 3/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.4674 - accuracy: 0.8449
Epoch 4/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.4517 - accuracy: 0.8486
Epoch 5/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.4318 - accuracy: 0.8579
Out[26]:
<tensorflow.python.keras.callbacks.History at 0x7f01eaaea850>
In [27]:
model.evaluate(val_scaled, val_target)
375/375 [==============================] - 1s 1ms/step - loss: 0.4521 - accuracy: 0.8491
Out[27]:
[0.452136754989624, 0.8490833044052124]
In [ ]:
출처 : 혼자 공부하는 머신러닝+딥러닝 github/박해선