Tensorflow 1.xx버전은 머신러닝을 공부하기에는 좋지만,
실무에서 사용하기에는 코드가 너무 naive했다.
이를 보완하기 위해 Tensorflow 2.xx버전이 2019.06에 등장했다.
- Eager Execution
1.xx 버전에서는 노드를 다 만들고 나서 세션을 만들고,
세션을 실행해야 코드가 실행되는 Lazy Execution을 지원했는데,
2.xx 버전에서는 작성과 실행이 바로 이어질 수 있게 즉시 실행을 지원하기 시작했다.
당연히 Session과 placeholder가 없어졌다. - Keras
프랑소와 숄레가 창시한 keras를 탑재하게 되었다. - CPU ver. GPU ver.이 따로 존재하지 않는다.
1.xx 버전에서는 따로 존재했었다.
Eager Execution 확인하기
W = tf.random.normal([1], dtype=tf.float32)
print(W.numpy())
# > 출력
# [0.31445926]
tensorflow version 1.xx 에서는 weigth를 저장할 노드를 만들때 tf.variable을 이용했고
세션 만들어 노드를 실행하기전에 초기화가 필요했지만 간결하게 바뀌었다.
Tensorflow 2
- model.add() layer 추가
- model.compile() loss의 종류와 optimizer종류를 설정
- model.fit() 학습
- model.evalute() 평가
- model.predict() 예측
- model.save() 모델 저장
MNIST Data Set 학습해보기
import
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.optimizers import SGD, Adam
Data Load, Split, Scaling
df = pd.read_csv('./data/mnist/train.csv')
train_x_data, test_x_data, train_t_data, test_t_data = \
train_test_split(df.drop('label', axis=1, inplace=False),
df['label'],
test_size=0.3,
random_state=1,
stratify=df['label'])
scaler = MinMaxScaler()
scaler.fit(train_x_data)
norm_train_x_data = scaler.transform(train_x_data)
norm_test_x_data = scaler.transform(test_x_data)
kaggle에서 받은 mnist데이터셋을 사용했는데,
이 데이터는 이상치나 결치값이 없기 때문에 따로 처리해주지는 않았다.
Data 확인해보기
# 이미지 시각화
fig = plt.figure(figsize=(6,6))
img_data = df.drop('label', axis=1, inplace=False).values
for n in range(25):
arr = fig.add_subplot(5, 5, n+1)
arr.imshow(img_data[n].reshape(28,28),
cmap='Greys', # 흑백이미지 표현
interpolation='nearest') # 보간법
plt.tight_layout()
plt.show
Model Building
model = Sequential()
model.add(Flatten(input_shape=(norm_train_x_data.shape[1],)))
# == model.add(Flatten(input_shape=(785,))), 튜플
# Dense Layer == Fully Connected Layer, FC Layer
model.add(Dense(units=10,
activation='softmax')) # units는 class의 개수.(multinomial classification)
print(model.summary()) # 모델의 현재 상태
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
_________________________________________________________________
dense (Dense) (None, 10) 7850
=================================================================
Total params: 7,850
Trainable params: 7,850
Non-trainable params: 0
_________________________________________________________________
None
model.compile(optimizer=SGD(learning_rate=1e-3),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
history = model.fit(norm_train_x_data, train_t_data,
epochs=100,
batch_size=100,
verbose=1,
validation_split=0.2)
Epoch 1/100
236/236 [==============================] - 1s 3ms/step - loss: 2.2553 - accuracy: 0.1730 - val_loss: 2.1288 - val_accuracy: 0.2724
Epoch 2/100
236/236 [==============================] - 0s 1ms/step - loss: 2.0296 - accuracy: 0.3562 - val_loss: 1.9253 - val_accuracy: 0.4515
.............
Epoch 99/100
236/236 [==============================] - 0s 1ms/step - loss: 0.4632 - accuracy: 0.8817 - val_loss: 0.4666 - val_accuracy: 0.8784
Epoch 100/100
236/236 [==============================] - 0s 1ms/step - loss: 0.4619 - accuracy: 0.8819 - val_loss: 0.4654 - val_accuracy: 0.8787
Evalutaion
print(model.evaluate(norm_test_x_data, test_t_data))
394/394 [==============================] - 0s 739us/step - loss: 0.4760 - accuracy: 0.8763
[0.4759805202484131, 0.8762698173522949]
loss : 0.4759805202484131
accuracy : 0.8762698173522949
'Programming > Tensorflow' 카테고리의 다른 글
[Tensorflow 1.15] 이미지 Convolution, Pooling의 결과 확인하기 (0) | 2022.04.14 |
---|---|
[Tensorflow 1.15 ] Convolution 연산 - Sample Case (2) | 2022.04.14 |
[Tensorflow] MNIST DNN으로 구현해보기 (0) | 2022.04.12 |
[Tensorflow] 학습한 모델 저장하기 (0) | 2022.04.07 |
[tensorflow] Tensorflow 1.15 ver - 기초, Linear Regression (0) | 2022.04.06 |