CNTK-신경망 훈련

여기서 우리는 CNTK에서 신경망 훈련에 대해 이해할 것입니다.

CNTK에서 모델 훈련

이전 섹션에서는 딥 러닝 모델의 모든 구성 요소를 정의했습니다. 이제 그것을 훈련 할 시간입니다. 앞서 논의했듯이, 우리는 다음 조합을 사용하여 CNTK에서 NN 모델을 훈련시킬 수 있습니다.learnertrainer.

학습자 선택 및 교육 설정

이 섹션에서는 learner. CNTK는 여러learners에서 고르다. 이전 섹션에서 정의한 모델의 경우Stochastic Gradient Descent (SGD) learner.

신경망을 훈련시키기 위해 learnertrainer 다음 단계의 도움으로-

Step 1 − 먼저 sgd 기능 cntk.lerners 꾸러미.

from cntk.learners import sgd

Step 2 − 다음으로 가져와야합니다. Trainer 기능 cntk.train.trainer 패키지.

from cntk.train.trainer import Trainer

Step 3 − 이제 우리는 learner. 다음을 호출하여 만들 수 있습니다.sgd 모델의 매개 변수 및 학습률 값을 제공하는 기능

learner = sgd(z.parametrs, 0.01)

Step 4 − 드디어 초기화해야합니다. trainer. 네트워크를 제공해야합니다.lossmetric 와 함께 learner.

trainer = Trainer(z, (loss, error_rate), [learner])

최적화 속도를 제어하는 ​​학습률은 0.1에서 0.001 사이의 작은 숫자 여야합니다.

학습자 선택 및 교육 설정-전체 예제

from cntk.learners import sgd
from cntk.train.trainer import Trainer
learner = sgd(z.parametrs, 0.01)
trainer = Trainer(z, (loss, error_rate), [learner])

트레이너에게 데이터 제공

트레이너를 선택하고 구성했으면 이제 데이터 세트를로드 할 차례입니다. 우리는iris 데이터 세트를.CSV 라는 이름의 데이터 랭 글링 패키지를 사용할 것입니다. pandas 데이터 세트를로드합니다.

.CSV 파일에서 데이터 세트를로드하는 단계

Step 1 − 먼저 pandas 꾸러미.

from import pandas as pd

Step 2 − 이제 다음과 같은 함수를 호출해야합니다. read_csv 기능을 사용하여 디스크에서 .csv 파일을로드합니다.

df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, 
‘petal_length’, ‘petal_width’, index_col=False)

데이터 세트를로드 한 후에는 일련의 기능과 레이블로 분할해야합니다.

데이터 세트를 기능 및 라벨로 분할하는 단계

Step 1− 먼저 데이터 세트에서 모든 행과 처음 4 개의 열을 선택해야합니다. 다음을 사용하여 수행 할 수 있습니다.iloc 함수.

x = df_source.iloc[:, :4].values

Step 2− 다음으로 홍채 데이터 세트에서 종 열을 선택해야합니다. values ​​속성을 사용하여 기본numpy 정렬.

x = df_source[‘species’].values

종 열을 숫자 형 벡터 표현으로 인코딩하는 단계

앞서 논의했듯이 모델은 분류를 기반으로하며 숫자 입력 값이 필요합니다. 따라서 여기에서는 종 열을 숫자 벡터 표현으로 인코딩해야합니다. 그것을 수행하는 단계를 보자-

Step 1− 먼저 배열의 모든 요소를 ​​반복 할 목록 표현식을 만들어야합니다. 그런 다음 각 값에 대해 label_mapping 사전에서 조회를 수행합니다.

label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}

Step 2− 다음으로이 변환 된 숫자 값을 원-핫 인코딩 된 벡터로 변환합니다. 우리는 사용할 것입니다one_hot 다음과 같이 기능-

def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result

Step 3 − 마침내이 변환 된 목록을 numpy 정렬.

y = np.array([one_hot(label_mapping[v], 3) for v in y])

과적 합을 감지하는 단계

모델이 샘플을 기억하지만 학습 샘플에서 규칙을 추론 할 수없는 상황은 과적 합입니다. 다음 단계를 통해 모델에서 과적 합을 감지 할 수 있습니다.

Step 1 − 먼저 sklearn 패키지, 가져 오기 train_test_split 기능 model_selection 기준 치수.

from sklearn.model_selection import train_test_split

Step 2 − 다음으로, 다음과 같이 기능 x 및 레이블 y를 사용하여 train_test_split 함수를 호출해야합니다.

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2, 
stratify=y)

전체 데이터의 20 %를 따로 설정하기 위해 test_size를 0.2로 지정했습니다.

label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}

훈련 세트와 검증 세트를 모델에 공급하는 단계

Step 1 − 모델을 학습시키기 위해 먼저 train_minibatch방법. 그런 다음 NN 및 관련 손실 함수를 정의하는 데 사용한 입력 변수에 입력 데이터를 매핑하는 사전을 제공합니다.

trainer.train_minibatch({ features: X_train, label: y_train})

Step 2 − 다음으로 전화 train_minibatch 다음 for 루프를 사용하여-

for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))

트레이너에게 데이터 제공-전체 예제

from import pandas as pd
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, index_col=False)
x = df_source.iloc[:, :4].values
x = df_source[‘species’].values
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
y = np.array([one_hot(label_mapping[v], 3) for v in y])
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2, stratify=y)
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
trainer.train_minibatch({ features: X_train, label: y_train})
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))

NN의 성능 측정

NN 모델을 최적화하기 위해 트레이너를 통해 데이터를 전달할 때마다 트레이너에 대해 구성한 메트릭을 통해 모델의 성능을 측정합니다. 훈련 중 NN 모델의 성능 측정은 훈련 데이터에 있습니다. 그러나 반면에 모델 성능에 대한 전체 분석을 위해서는 테스트 데이터도 사용해야합니다.

따라서 테스트 데이터를 사용하여 모델의 성능을 측정하기 위해 test_minibatch 에 방법 trainer 다음과 같이-

trainer.test_minibatch({ features: X_test, label: y_test})

NN으로 예측하기

딥 러닝 모델을 학습 한 후 가장 중요한 것은이를 사용하여 예측하는 것입니다. 위에서 훈련 된 NN에서 예측하기 위해 주어진 단계를 따를 수 있습니다.

Step 1 − 먼저 다음 함수를 사용하여 테스트 세트에서 임의의 항목을 선택해야합니다.

np.random.choice

Step 2 − 다음으로, 다음을 사용하여 테스트 세트에서 샘플 데이터를 선택해야합니다. sample_index.

Step 3 − 이제 NN에 대한 숫자 출력을 실제 레이블로 변환하려면 반전 매핑을 생성합니다.

Step 4 − 이제 선택한 sample데이터. NN z를 함수로 호출하여 예측합니다.

Step 5− 이제 예측 된 출력을 얻었 으면 가장 높은 값을 가진 뉴런의 인덱스를 예측 값으로 가져옵니다. 다음을 사용하여 수행 할 수 있습니다.np.argmax 기능 numpy 꾸러미.

Step 6 − 마지막으로 사용하여 인덱스 값을 실제 레이블로 변환하십시오. inverted_mapping.

NN으로 예측하기-전체 예제

sample_index = np.random.choice(X_test.shape[0])
sample = X_test[sample_index]
inverted_mapping = {
   1:’Iris-setosa’,
   2:’Iris-versicolor’,
   3:’Iris-virginica’
}
prediction = z(sample)
predicted_label = inverted_mapping[np.argmax(prediction)]
print(predicted_label)

산출

위의 딥 러닝 모델을 훈련하고 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Iris-versicolor