Keras-모델 편집
이전에는 Sequential 및 Functional API를 사용하여 모델을 만드는 방법에 대한 기본 사항을 공부했습니다. 이 장에서는 모델을 컴파일하는 방법에 대해 설명합니다. 컴파일은 모델 생성의 마지막 단계입니다. 컴파일이 완료되면 훈련 단계로 넘어갈 수 있습니다.
컴파일 과정을 더 잘 이해하는 데 필요한 몇 가지 개념을 배우겠습니다.
손실
머신 러닝에서 Loss함수는 학습 과정에서 오류 또는 편차를 찾는 데 사용됩니다. Keras는 모델 컴파일 과정에서 손실 기능이 필요합니다.
Keras는 losses 모듈과 그들은 다음과 같습니다-
- mean_squared_error
- mean_absolute_error
- mean_absolute_percentage_error
- mean_squared_logarithmic_error
- squared_hinge
- hinge
- categorical_hinge
- logcosh
- huber_loss
- categorical_crossentropy
- sparse_categorical_crossentropy
- binary_crossentropy
- kullback_leibler_divergence
- poisson
- cosine_proximity
- is_categorical_crossentropy
위의 모든 손실 함수는 두 가지 인수를 허용합니다.
y_true − 텐서로서의 진정한 레이블
y_pred − 같은 형태의 예측 y_true
아래 명시된 손실 기능을 사용하기 전에 손실 모듈을 가져옵니다.
from keras import losses
옵티 마이저
머신 러닝에서 Optimization예측과 손실 함수를 비교하여 입력 가중치를 최적화하는 중요한 프로세스입니다. Keras는 몇 가지 최적화 프로그램을 모듈, 최적화 프로그램으로 제공 하며 다음과 같습니다.
SGD − 확률 적 경사 하강 법 최적화 프로그램.
keras.optimizers.SGD(learning_rate = 0.01, momentum = 0.0, nesterov = False)
RMSprop − RMSProp 최적화 프로그램.
keras.optimizers.RMSprop(learning_rate = 0.001, rho = 0.9)
Adagrad − Adagrad 최적화 프로그램.
keras.optimizers.Adagrad(learning_rate = 0.01)
Adadelta − Adadelta 최적화 프로그램.
keras.optimizers.Adadelta(learning_rate = 1.0, rho = 0.95)
Adam − Adam 최적화 프로그램.
keras.optimizers.Adam(
learning_rate = 0.001, beta_1 = 0.9, beta_2 = 0.999, amsgrad = False
)
Adamax − Adam의 Adamax 최적화 프로그램.
keras.optimizers.Adamax(learning_rate = 0.002, beta_1 = 0.9, beta_2 = 0.999)
Nadam − Nesterov Adam 최적화 프로그램.
keras.optimizers.Nadam(learning_rate = 0.002, beta_1 = 0.9, beta_2 = 0.999)
아래에 지정된 최적화 프로그램을 사용하기 전에 최적화 모듈을 가져옵니다.
from keras import optimizers
지표
머신 러닝에서 Metrics모델의 성능을 평가하는 데 사용됩니다. 손실 함수와 유사하지만 훈련 과정에서는 사용되지 않습니다. Keras는 모듈로 많은 메트릭을 제공합니다.metrics 그리고 그들은 다음과 같습니다
- accuracy
- binary_accuracy
- categorical_accuracy
- sparse_categorical_accuracy
- top_k_categorical_accuracy
- sparse_top_k_categorical_accuracy
- cosine_proximity
- clone_metric
손실 함수와 유사하게 메트릭은 아래 두 인수도 허용합니다.
y_true − 텐서로서의 진정한 레이블
y_pred − 같은 형태의 예측 y_true
아래 지정된대로 메트릭을 사용하기 전에 메트릭 모듈을 가져옵니다.
from keras import metrics
모델 컴파일
Keras 모델은 방법을 제공합니다. compile()모델을 컴파일합니다. 인수 및 기본값compile() 방법은 다음과 같습니다
compile(
optimizer,
loss = None,
metrics = None,
loss_weights = None,
sample_weight_mode = None,
weighted_metrics = None,
target_tensors = None
)
중요한 인수는 다음과 같습니다-
- 손실 함수
- Optimizer
- metrics
모드를 컴파일하는 샘플 코드는 다음과 같습니다.
from keras import losses
from keras import optimizers
from keras import metrics
model.compile(loss = 'mean_squared_error',
optimizer = 'sgd', metrics = [metrics.categorical_accuracy])
어디,
손실 기능은 다음과 같이 설정됩니다. mean_squared_error
최적화 프로그램은 다음과 같이 설정됩니다. sgd
메트릭은 다음과 같이 설정됩니다. metrics.categorical_accuracy
모델 훈련
모델은 다음을 사용하여 NumPy 배열로 학습됩니다. fit(). 이 적합 함수의 주요 목적은 훈련에서 모델을 평가하는 데 사용됩니다. 모델 성능을 그래프로 표시하는데도 사용할 수 있습니다. 다음과 같은 구문이 있습니다.
model.fit(X, y, epochs = , batch_size = )
여기,
X, y − 데이터를 평가하는 튜플입니다.
epochs − 훈련 중에 모델을 평가할 필요가 없습니다.
batch_size − 훈련 인스턴스.
이 개념을 사용하기 위해 numpy random data의 간단한 예를 들어 보겠습니다.
데이터 생성
아래에 언급 된 명령을 사용하여 x와 y에 대해 numpy를 사용하여 임의의 데이터를 생성 해 보겠습니다.
import numpy as np
x_train = np.random.random((100,4,8))
y_train = np.random.random((100,10))
이제 임의의 유효성 검사 데이터를 만들고
x_val = np.random.random((100,4,8))
y_val = np.random.random((100,10))
모델 생성
간단한 순차 모델을 만들어 보겠습니다.
from keras.models import Sequential model = Sequential()
레이어 추가
모델을 추가 할 레이어 만들기-
from keras.layers import LSTM, Dense
# add a sequence of vectors of dimension 16
model.add(LSTM(16, return_sequences = True))
model.add(Dense(10, activation = 'softmax'))
모델 컴파일
이제 모델이 정의되었습니다. 아래 명령을 사용하여 컴파일 할 수 있습니다.
model.compile(
loss = 'categorical_crossentropy', optimizer = 'sgd', metrics = ['accuracy']
)
fit () 적용
이제 데이터를 훈련하기 위해 fit () 함수를 적용합니다.
model.fit(x_train, y_train, batch_size = 32, epochs = 5, validation_data = (x_val, y_val))
다층 퍼셉트론 ANN 생성
우리는 Keras 모델을 생성, 컴파일 및 훈련하는 방법을 배웠습니다.
학습 한 내용을 적용하고 간단한 MPL 기반 ANN을 만들어 보겠습니다.
데이터 세트 모듈
모델을 만들기 전에 문제를 선택하고 필요한 데이터를 수집하고 데이터를 NumPy 배열로 변환해야합니다. 데이터가 수집되면 수집 된 데이터를 사용하여 모델을 준비하고 훈련 할 수 있습니다. 데이터 수집은 기계 학습에서 가장 어려운 단계 중 하나입니다. Keras는 교육 목적으로 온라인 기계 학습 데이터를 다운로드 할 수있는 특수 모듈, 데이터 세트를 제공합니다. 온라인 서버에서 데이터를 가져 와서 데이터를 처리하고 학습 및 테스트 세트로 데이터를 반환합니다. Keras 데이터 셋 모듈에서 제공하는 데이터를 확인해 보겠습니다. 모듈에서 사용 가능한 데이터는 다음과 같습니다.
- CIFAR10 작은 이미지 분류
- CIFAR100 작은 이미지 분류
- IMDB 영화 리뷰 감정 분류
- Reuters Newswire 주제 분류
- 손으로 쓴 숫자의 MNIST 데이터베이스
- Fashion-MNIST 패션 기사 데이터베이스
- 보스턴 주택 가격 회귀 데이터 세트
사용하자 MNIST database of handwritten digits(또는 minst)를 입력합니다. minst는 60,000, 28x28 그레이 스케일 이미지 모음입니다. 10 자리 숫자입니다. 또한 10,000 개의 테스트 이미지가 포함되어 있습니다.
아래 코드는 데이터 세트를로드하는 데 사용할 수 있습니다-
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
어디
Line 1 수입품 minst keras 데이터 세트 모듈에서.
Line 3 호출 load_data 온라인 서버에서 데이터를 가져 와서 데이터를 2 개의 튜플, First tuple, (x_train, y_train) 훈련 데이터를 모양으로 표현하고, (number_sample, 28, 28) 모양이있는 숫자 라벨, (number_samples, ). 두 번째 튜플,(x_test, y_test) 동일한 모양의 테스트 데이터를 나타냅니다.
다른 데이터 세트도 유사한 API를 사용하여 가져올 수 있으며 모든 API는 데이터의 모양을 제외하고 유사한 데이터도 반환합니다. 데이터의 모양은 데이터 유형에 따라 다릅니다.
모델 생성
아래와 같이 간단한 다중 레이어 퍼셉트론 (MLP)을 선택하고 Keras를 사용하여 모델을 생성 해 봅니다.
모델의 핵심 기능은 다음과 같습니다.
입력 레이어는 784 개의 값 (28 x 28 = 784)으로 구성됩니다.
첫 번째 숨겨진 레이어, Dense 512 개의 뉴런과 'relu'활성화 기능으로 구성됩니다.
두 번째 숨겨진 레이어, Dropout 값은 0.2입니다.
세 번째 은닉층, 다시 Dense는 512 개의 뉴런과 'relu'활성화 함수로 구성됩니다.
네 번째 은닉층, Dropout 값은 0.2입니다.
다섯 번째 및 마지막 레이어는 10 개의 뉴런과 'softmax'활성화 함수로 구성됩니다.
사용하다 categorical_crossentropy 손실 함수로.
사용하다 RMSprop() Optimizer로.
사용하다 accuracy 메트릭으로.
128을 배치 크기로 사용하십시오.
20을 시대로 사용하십시오.
Step 1 − Import the modules
필요한 모듈을 가져 오겠습니다.
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
import numpy as np
Step 2 − Load data
mnist 데이터 세트를 가져 오겠습니다.
(x_train, y_train), (x_test, y_test) = mnist.load_data()
Step 3 − Process the data
모델에 따라 데이터 세트를 변경하여 모델에 입력 할 수 있도록하겠습니다.
x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
어디
reshape 입력을 (28, 28) 튜플에서 (784,)로 변경하는 데 사용됩니다.
to_categorical 벡터를 이진 행렬로 변환하는 데 사용됩니다.
Step 4 − Create the model
실제 모델을 만들어 보겠습니다.
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation = 'relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation = 'softmax'))
Step 5 − Compile the model
선택한 손실 함수, 최적화 프로그램 및 메트릭을 사용하여 모델을 컴파일 해 보겠습니다.
model.compile(loss = 'categorical_crossentropy',
optimizer = RMSprop(),
metrics = ['accuracy'])
Step 6 − Train the model
다음을 사용하여 모델을 훈련 시키십시오. fit() 방법.
history = model.fit(
x_train, y_train,
batch_size = 128,
epochs = 20,
verbose = 1,
validation_data = (x_test, y_test)
)
마지막 생각들
모델을 생성하고 데이터를로드하고 모델에 데이터를 훈련 시켰습니다. 우리는 여전히 모델을 평가하고 알려지지 않은 입력에 대한 출력을 예측해야합니다. 다음 장에서 배울 것입니다.
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
import numpy as np
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
model = Sequential()
model.add(Dense(512, activation='relu', input_shape = (784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation = 'relu')) model.add(Dropout(0.2))
model.add(Dense(10, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy',
optimizer = RMSprop(),
metrics = ['accuracy'])
history = model.fit(x_train, y_train,
batch_size = 128, epochs = 20, verbose = 1, validation_data = (x_test, y_test))
응용 프로그램을 실행하면 아래 내용이 출력으로 제공됩니다.
Train on 60000 samples, validate on 10000 samples Epoch 1/20
60000/60000 [==============================] - 7s 118us/step - loss: 0.2453
- acc: 0.9236 - val_loss: 0.1004 - val_acc: 0.9675 Epoch 2/20
60000/60000 [==============================] - 7s 110us/step - loss: 0.1023
- acc: 0.9693 - val_loss: 0.0797 - val_acc: 0.9761 Epoch 3/20
60000/60000 [==============================] - 7s 110us/step - loss: 0.0744
- acc: 0.9770 - val_loss: 0.0727 - val_acc: 0.9791 Epoch 4/20
60000/60000 [==============================] - 7s 110us/step - loss: 0.0599
- acc: 0.9823 - val_loss: 0.0704 - val_acc: 0.9801 Epoch 5/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0504
- acc: 0.9853 - val_loss: 0.0714 - val_acc: 0.9817 Epoch 6/20
60000/60000 [==============================] - 7s 111us/step - loss: 0.0438
- acc: 0.9868 - val_loss: 0.0845 - val_acc: 0.9809 Epoch 7/20
60000/60000 [==============================] - 7s 114us/step - loss: 0.0391
- acc: 0.9887 - val_loss: 0.0823 - val_acc: 0.9802 Epoch 8/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0364
- acc: 0.9892 - val_loss: 0.0818 - val_acc: 0.9830 Epoch 9/20
60000/60000 [==============================] - 7s 113us/step - loss: 0.0308
- acc: 0.9905 - val_loss: 0.0833 - val_acc: 0.9829 Epoch 10/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0289
- acc: 0.9917 - val_loss: 0.0947 - val_acc: 0.9815 Epoch 11/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0279
- acc: 0.9921 - val_loss: 0.0818 - val_acc: 0.9831 Epoch 12/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0260
- acc: 0.9927 - val_loss: 0.0945 - val_acc: 0.9819 Epoch 13/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0257
- acc: 0.9931 - val_loss: 0.0952 - val_acc: 0.9836 Epoch 14/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0229
- acc: 0.9937 - val_loss: 0.0924 - val_acc: 0.9832 Epoch 15/20
60000/60000 [==============================] - 7s 115us/step - loss: 0.0235
- acc: 0.9937 - val_loss: 0.1004 - val_acc: 0.9823 Epoch 16/20
60000/60000 [==============================] - 7s 113us/step - loss: 0.0214
- acc: 0.9941 - val_loss: 0.0991 - val_acc: 0.9847 Epoch 17/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0219
- acc: 0.9943 - val_loss: 0.1044 - val_acc: 0.9837 Epoch 18/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0190
- acc: 0.9952 - val_loss: 0.1129 - val_acc: 0.9836 Epoch 19/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0197
- acc: 0.9953 - val_loss: 0.0981 - val_acc: 0.9841 Epoch 20/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0198
- acc: 0.9950 - val_loss: 0.1215 - val_acc: 0.9828