17. deep neural

akanana·2023년 1월 19일
0

개인공부

목록 보기
29/30
post-thumbnail

심층 신경망

심층 신경망을 통해 딥러닝의 성능을 더 높혀보자

Mnist 정보 받기

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
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)

우선 Mnist 정보를 받아왔다

은닉층 추가하기

dense1 = keras.layers.Dense(100,activation='sigmoid', input_shape=(784,))
dense2 = keras.layers.Dense(10,activation='softmax')

model = keras.Sequential([dense1, dense2])
model.summary()
"""
Model: "sequential_4"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense_8 (Dense)             (None, 100)               78500     
                                                                 
 dense_9 (Dense)             (None, 10)                1010      
                                                                 
=================================================================
Total params: 79,510
Trainable params: 79,510
Non-trainable params: 0
_________________________________________________________________
"""


각각의 밀집에서 뉴런의 개수가 784->100->10으로 줄어들도록 밀집층을 구성하였다

dense1 = keras.layers.Dense(100,activation='sigmoid', input_shape=(784,))
dense2 = keras.layers.Dense(10,activation='softmax')

model = keras.Sequential()
model.add(dense1)
model.add(dense2)
model.summary()

위와 같은 방식으로도 밀집층을 추가 할 수 있다

모델 훈련

model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
model.fit(train_scaled, train_target, epochs=5)
"""
Epoch 1/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.5697 - a
ccuracy: 0.8057
Epoch 2/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.4114 - 
accuracy: 0.8518
Epoch 3/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.3771 - 
accuracy: 0.8641
Epoch 4/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.3534 - 
accuracy: 0.8732
Epoch 5/5
1500/1500 [==============================] - 2s 2ms/step - loss: 0.3379 - 
accuracy: 0.8776
"""

층이 추가되고 성능이 향상했음을 알 수 있다

렐루

이태까지 우리는 시그모이드 함수를 통해 값을 나타내었으나, 시그모이드 함수기울기 소실등의 문제점을 가지고 있다
이를 보완하기 위해 렐루 함수가 만들어졌다
음수일때는 0을 반환, 양수일때는 자기 자신을 반환하는 함수이다

출처

렐루 함수로 심층 신경만 구성하기

flatten0 = keras.layers.Flatten(input_shape=(28,28))
dense1 = keras.layers.Dense(100,activation='relu')
dense2 = keras.layers.Dense(10,activation='softmax')
model = keras.Sequential()
model.add(flatten0)
model.add(dense1)
model.add(dense2)

이때 Flatten을 이용하여 데이터를 1차원으로 구성 가능하다

옵티마이저?

  • adam?

0개의 댓글