[혼공머]심층 신경망

ai_lim·2022년 2월 2일
0

혼공머신

목록 보기
10/14
  • 심층 신경망
    2개 이상의 층을 포함한 신경망이다.

  • 렐루 함수
    이미지 분류 모델의 은닉층에 많이 사용하는 활성화 함수이다.

  • 옵티마이저
    신경망의 가중치와 절편을 학습하기 위한 알고리즘이다. 대표적으로 SGD,네스테로프 모멘텀,RMSprop,Adam 등이 있다.

7-2 심층 신경망

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)
  • fashion mnist 데이터셋 불러오기
  • train 데이터 전처리하기(정규화,reshape)
  • 검증세트 떼어주기

2개의 층

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

model = keras.Sequential([dense1,dense2])

model.summary()

  • 첫번째 차원은 샘플의 개수, 두번째 차원은 출력의 개수
  • 첫번째 차원을 None으로 설정한 이유는 샘플 개수를 고정하지 않고 어떤 배치의 크기에서도 유연하게 대응하기 위해서이다.
  • param = 가중치 + 절편 개수

층을 추가하는 다른 방법


model = keras.Sequential(
    [ keras.layers.Dense(100,activation='sigmoid',input_shape=(784,),name='hidden'),
                          keras.layers.Dense(10,activation='softmax',name='output')],
                         name='패션 MNIST 모델')

model.summary()

model=keras.Sequential()
model.add(keras.layers.Dense(100,activation='sigmoid',input_shape=(784,),name='hidden'))
model.add( keras.layers.Dense(10,activation='softmax',name='output'))

model.summary()

model.compile(loss='sparse_categorical_crossentropy',metrics='accuracy')
model.fit(train_scaled,train_target,epochs=5)

렐루함수

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

(train_input,train_target),(test_input,test_target)=keras.datasets.fashion_mnist.load_data()

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)

model.compile(loss='sparse_categorical_crossentropy',metrics='accuracy')
model.fit(train_scaled,train_target,epochs=5)

model.evaluate(val_scaled,val_target)

옵티마이저


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

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)

model.evaluate(val_scaled,val_target)

0개의 댓글