늦어따... 샤따 내리기 전에 얼른 제출하자...
타깃은 0~9까지의 숫자 레이블로 구성되어 있다.
레이블 | 패션 아이템 |
---|---|
0 | 티셔츠 |
1 | 바지 |
2 | 스웨터 |
3 | 드레스 |
4 | 코트 |
5 | 샌달 |
6 | 셔츠 |
7 | 스니커즈 |
8 | 가방 |
9 | 앵클 부츠 |
전체 데이터를 한꺼번에 훈련하는 것보다 샘플을 하나씩 꺼내어 훈련하는 방법이 더 효율적
-> 확률적 경사하강법
가장 기본적인 인공신경망은 확률적 경사하강법을 사용하는 로지스틱 회귀와 같다.
- 10개의 뉴런과 100개의 입력 연결 -> 1000개의 가중치. 뉴런마다 1개의 절편
-> 총 1010개- 이진분류일 때는 sigmoid 함수를 사용함
- compile()에서 loss, metrics 로 측정 지표 지정했음
- categorical_crossentropy = 원-핫 인코딩일 때
binary_crossentropy = 이진 분류
mean_square_error = 회귀 문제
인공 신경망에 층을 더 추가한다.
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)
dense1 = keras.layers.Dense(100, activation='sigmoid', input_shape=(784,))
dense2 = keras.layers.Dense(10, activation='softmax')
model = keras.Sequential([dense1, dense2])
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 = keras.Sequential()
model.add(keras.layers.Dense(100, activation='sigmoid', input_shape=(784, )))
model.add(keras.layers.Dense(10, activation='softmax'))
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'))
(train_input, train_target), (test_input, test_target) =\
keras.datasets.fashion_mnist.load_data()
train_scaled = train_input / 255.0
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')
model.fit(train_scaled, train_target, epochs=5)
모델이 학습하지 않아 사람이 지정해주어야 하는 파라미터 = 하이퍼파라미터
추가할 은닉층의 개수 = 하이퍼파라미터
은닉층의 뉴런 개수 = 하이퍼파라미터
미니배치 개수 = 하이퍼파라미터
epochs = 하이퍼파라미터
케라스는 다양한 종류의 경사하강법 알고리즘을 제공하는데, 이들을 옵티마이저라고 부름.
optimizer 매개변수의 값을 변경해주면 됨.
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')
model.fit(train_scaled, train_target, epochs=5)
- add()로 전달
- 입력 차원을 일렬로 펼치는건 Flatten 클래스
- relu -> 이미지 처리 작업에 사용되는 활성화 함수
linear -> 선형 활성화 함수, 활성화 함수 적용하지 않는다는 것
tahn -> 하이퍼볼릭 탄젠트 함수- SGD -> 기본 경사하강법, 모멘텀, 네스테로프 모멘텀 알고리즘 구현할 클래스. 일정한 학습률을 사용
Adagrad, RMSprop, Adam은 적응적 학습률 옵티마이저