본문 바로가기

카테고리 없음

[코딩] 07-2 심층 신경망(f. 혼자 공부하는 머신러닝 딥러닝)

반응형
데이터 및 준비
from tensorflow import keras

import numpy as np
(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
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)

 

sigmoid 및 softmax 층 추가 및 컴파일
#층 추가
model = keras.Sequential() #Sequential 클래스의 객체를 먼저 만들고
model.add(keras.layers.Dense(100, activation = 'sigmoid', input_shape = (784,)))
model.add(keras.layers.Dense(10, activation = 'softmax'))
model.summary()

#층 추가(2) - 이렇게 작성하면 Sequential 객체가 길어짐
# 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.compile(loss = 'sparse_categorical_crossentropy', metrics = 'accuracy')
model.fit(train_scaled, train_target, epochs = 5)

summary

입력층 : 784개

은닉층 : 784*100 + 100 = 78,500개

출력층 : 100*10 + 10 = 1,010개

총 파라미터 : 79,510개

relu 및 flatten 사용
#relu 및 flatten 사용
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape = (28,28)))
    #입력값의 차원을 짐작할 수 있음
model.add(keras.layers.Dense(100, activation = 'relu'))
    #relu : max(0,z) → z가 0보다 크면 z값 출력, 0보다 작으면 0값 출력
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
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)

 

 

렐루함수

max(0,z) : 0보다 크면 z값, 0보다 작으면 0값

시그모이드 함수는 오른쪽과 왼쪽 끝으로 갈수록 그래프가 누워있기 때문에 올바른 출력을 만들기 어려움.

따라서 렐루함수 사용

 

옵티마이져 종류

반응형