[용어 정리]
① 심층 신경망 : 2개 이상의 층을 포함한 신경망이며, 다층 인공 신경망 또는 딥러닝 같은 의미로도 쓰임
② ReLU 함수 : 이미지 분류 모델의 은닉층에 많이 사용되는 활성화 함수
→ Sigmoid 함수는 층이 많을수록 활성화 함수의 양쪽 끝에서 변화가 작기 때문에, 학습이 어려운 반면에
ReLU 함수는 이러한 문제는 없다.
④ Optimizer(최적화) : 신경망의 가중치와 절편을 학습하기 위한 알고리즘
→ 원리 : Train Data Set을 이용하여 모델을 학습 할 때 데이터의 실제 결과와 Model이 예측한 결과의 폭을
줄이는 역할
→ 종류 : SGD, RMSprop, Adam 등...
[TensorFlow 함수]
① add : 케라스 모델에 층을 추가하는 메서드
② summary : 케라스 모델의 정보를 출력하는 메서드
③ SGD : 확률적 경사 하강법 옵티마이저 클래스
⒜ learning_rate : 학습률을 지정하며, Default Value는 0.01
⒝ momentum : 0 이상의 ㄱ밧을 지정하면 모멘텀 최적화를 수행
⒞ nesterov : True 설정 시, 네스테로프 모멘텀 최적화를 수행
④ Adagrad : Adagrad 옵티마이저 클래스
⑤ RMSprop, Adam: RMSprop 옵티마이저 클래스 - Adam 옵티아미저 클래스
[DATA SET LOAD]
from tensorflow import keras
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
from sklearn.model_selection import train_test_split
# 정규화 작업
# 픽셀값을 0~255 범위에서 0~1 사이로 변환
train_scaled = train_input / 255.0
# 784 크기의 1차원 배열로 reshape
train_scaled = train_scaled.reshape(-1, 28*28)
# 검증 data, target data
train_scaled, val_scaled, train_target, val_target =
train_test_split(train_scaled, train_target, test_size=0.2, random_state=42)
[Neural Create]
from sklearn.model_selection import train_test_split
# 정규화 작업
train_scaled = train_input / 255.0
train_scaled = train_scaled.reshape(-1, 28*28)
train_scaled, val_scaled, train_target, val_target =
train_test_split(train_scaled, train_target, test_size=0.2, random_state=42)
# 은닉층, 100개의 뉴런, 활성화 함수 : sigmoide
dense1 = keras.layers.Dense(100, activation='sigmoid', input_shape=(784,))
# 출력층, 10개의 뉴런(target class), 활성화 함수 : softmax
dense2 = keras.layers.Dense(10, activation='softmax')
# Sequential Neural 생성
model = keras.Sequential([dense1, dense2])
model.summary()
# result
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 100) 78500
_________________________________________________________________
dense_1 (Dense) (None, 10) 1010
=================================================================
Total params: 79,510
Trainable params: 79,510
Non-trainable params: 0
# ------
[ReLu 함수]
# 신경망 생성 및 층 추가
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28, 28)))
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))
model.summary()
# ----------
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
_________________________________________________________________
dense_4 (Dense) (None, 100) 78500
_________________________________________________________________
dense_5 (Dense) (None, 10) 1010
=================================================================
Total params: 79,510
Trainable params: 79,510
Non-trainable params: 0
# ----------
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
train_scaled = train_input / 255.0
# 0.2는 train data set에서 20% 가져옴
train_scaled, val_scaled, train_target, val_target =
train_test_split(train_scaled, train_target, test_size=0.2, random_state=42)
model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
model.fit(train_scaled, train_target, epochs=5) # 반복 횟수 5회 지정
# 검증 / evaluate
model.evaluate(val_scaled, val_target)
# result
375/375 [==============================] - 1s 2ms/step - loss: 0.3669 - accuracy: 0.8782
[0.3669053614139557, 0.878166675567627]
# ------
[옵티마이저]
model.compile(optimizer='sgd', loss='sparse_categorical_crossentropy', metrics='accuracy')
sgd = keras.optimizers.SGD()
model.compile(optimizer=sgd, loss='sparse_categorical_crossentropy', metrics='accuracy')
sgd = keras.optimizers.SGD(learning_rate=0.1)
sgd = keras.optimizers.SGD(momentum=0.9, nesterov=True)
adagrad = keras.optimizers.Adagrad()
model.compile(optimizer=adagrad, loss='sparse_categorical_crossentropy', metrics='accuracy')
rmsprop = keras.optimizers.RMSprop()
model.compile(optimizer=rmsprop, loss='sparse_categorical_crossentropy', metrics='accuracy')
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28, 28)))
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics='accuracy')
model.fit(train_scaled, train_target, epochs=5)
# epochs 5회 / result
Epoch 1/5
1500/1500 [==============================] - 4s 2ms/step - loss: 0.5249 - accuracy: 0.8155
Epoch 2/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.3929 - accuracy: 0.8589
Epoch 3/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.3529 - accuracy: 0.8726
Epoch 4/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.3259 - accuracy: 0.8793
Epoch 5/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.3076 - accuracy: 0.8876
# ------------
model.evaluate(val_scaled, val_target
# result
375/375 [==============================] - 1s 2ms/step - loss: 0.3345 - accuracy: 0.8805
[0.3345348834991455, 0.8805000185966492]
# ------
'Deep Learning > 혼공 머신 러닝 - 딥러닝' 카테고리의 다른 글
[DL] 합성곱 신경망 / 정의 (0) | 2022.01.04 |
---|---|
[DL] 신경망 모델 훈련 (0) | 2022.01.04 |
[DL] 인공 신경망 / 정의 (0) | 2022.01.04 |
[DL] 소프트맥스 (softmax) (0) | 2022.01.03 |
[DL] 22.01.02 메모 (0) | 2022.01.02 |