Deep Learning/혼공 머신 러닝 - 딥러닝

[DL] 심층 신경망

KimTory 2022. 1. 4. 23:44

[용어 정리]

 

① 심층 신경망 : 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