CNTK - Đào tạo mạng lưới thần kinh

Ở đây, chúng ta sẽ hiểu về việc đào tạo Neural Network trong CNTK.

Đào tạo một mô hình trong CNTK

Trong phần trước, chúng ta đã xác định tất cả các thành phần cho mô hình học sâu. Bây giờ là lúc để đào tạo nó. Như chúng ta đã thảo luận trước đó, chúng ta có thể đào tạo một mô hình NN trong CNTK bằng cách sử dụng kết hợplearnertrainer.

Chọn người học và thiết lập chương trình đào tạo

Trong phần này, chúng tôi sẽ xác định learner. CNTK cung cấp một sốlearnersđể lựa chọn. Đối với mô hình của chúng tôi, được xác định trong các phần trước, chúng tôi sẽ sử dụngStochastic Gradient Descent (SGD) learner.

Để đào tạo mạng nơ-ron, chúng ta hãy định cấu hình learnertrainer với sự trợ giúp của các bước sau -

Step 1 - Đầu tiên, chúng ta cần nhập sgd chức năng từ cntk.lerners gói hàng.

from cntk.learners import sgd

Step 2 - Tiếp theo, chúng ta cần nhập Trainer chức năng từ cntk.traingói .trainer.

from cntk.train.trainer import Trainer

Step 3 - Bây giờ, chúng ta cần tạo một learner. Nó có thể được tạo ra bằng cách gọisgd cùng với việc cung cấp các tham số của mô hình và giá trị cho tốc độ học.

learner = sgd(z.parametrs, 0.01)

Step 4 - Cuối cùng, chúng ta cần khởi tạo trainer. Nó phải được cung cấp mạng, sự kết hợp củalossmetric cùng với learner.

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

Tỷ lệ học tập kiểm soát tốc độ tối ưu hóa phải là một số nhỏ trong khoảng từ 0,1 đến 0,001.

Chọn người học và thiết lập khóa đào tạo - Hoàn thành ví dụ

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

Cung cấp dữ liệu vào giảng viên

Khi chúng tôi đã chọn và định cấu hình trình đào tạo, đã đến lúc tải tập dữ liệu. Chúng tôi đã lưuiris tập dữ liệu như một.CSV và chúng tôi sẽ sử dụng gói dữ liệu bao bọc có tên pandas để tải tập dữ liệu.

Các bước tải tập dữ liệu từ tệp .CSV

Step 1 - Đầu tiên, chúng ta cần nhập pandas gói hàng.

from import pandas as pd

Step 2 - Bây giờ, chúng ta cần gọi hàm có tên read_csv chức năng tải tệp .csv từ đĩa.

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

Khi chúng tôi tải tập dữ liệu, chúng tôi cần chia nó thành một tập hợp các tính năng và nhãn.

Các bước để chia tập dữ liệu thành các tính năng và nhãn

Step 1- Đầu tiên, chúng ta cần chọn tất cả các hàng và bốn cột đầu tiên từ tập dữ liệu. Nó có thể được thực hiện bằng cách sử dụngiloc chức năng.

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

Step 2- Tiếp theo chúng ta cần chọn cột loài từ tập dữ liệu iris. Chúng tôi sẽ sử dụng thuộc tính giá trị để truy cập vàonumpy mảng.

x = df_source[‘species’].values

Các bước để mã hóa cột loài thành biểu diễn vectơ số

Như chúng ta đã thảo luận trước đó, mô hình của chúng tôi dựa trên phân loại, nó yêu cầu các giá trị đầu vào dạng số. Do đó, ở đây chúng ta cần mã hóa cột loài thành biểu diễn vectơ số. Hãy xem các bước để làm điều đó -

Step 1- Đầu tiên, chúng ta cần tạo một biểu thức danh sách để lặp trên tất cả các phần tử trong mảng. Sau đó, thực hiện tra cứu trong từ điển ánh xạ nhãn cho từng giá trị.

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

Step 2- Tiếp theo, chuyển đổi giá trị số đã chuyển đổi này thành vectơ được mã hóa một nóng. Chúng tôi sẽ sử dụngone_hot chức năng như sau -

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

Step 3 - Cuối cùng, chúng ta cần chuyển danh sách đã chuyển đổi này thành một numpy mảng.

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

Các bước để phát hiện trang bị quá mức

Tình huống, khi mô hình của bạn nhớ các mẫu nhưng không thể suy ra các quy tắc từ các mẫu đào tạo, là quá mức. Với sự trợ giúp của các bước sau, chúng tôi có thể phát hiện trang bị quá mức trên mô hình của mình -

Step 1 - Đầu tiên, từ sklearn gói, nhập train_test_split chức năng từ model_selection mô-đun.

from sklearn.model_selection import train_test_split

Step 2 - Tiếp theo, chúng ta cần gọi hàm train_test_split với các tính năng x và nhãn y như sau:

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

Chúng tôi đã chỉ định test_size là 0,2 để dành 20% tổng số dữ liệu.

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

Các bước để cung cấp bộ đào tạo và bộ xác thực cho mô hình của chúng tôi

Step 1 - Để đào tạo mô hình của chúng tôi, trước tiên, chúng tôi sẽ gọi train_minibatchphương pháp. Sau đó, cung cấp cho nó một từ điển ánh xạ dữ liệu đầu vào đến biến đầu vào mà chúng ta đã sử dụng để xác định NN và hàm mất mát liên quan của nó.

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

Step 2 - Tiếp theo, hãy gọi train_minibatch bằng cách sử dụng vòng lặp for sau:

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

Cung cấp dữ liệu vào giảng viên - Hoàn thành ví dụ

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

Đo lường hiệu quả hoạt động của NN

Để tối ưu hóa mô hình NN của chúng tôi, bất cứ khi nào chúng tôi chuyển dữ liệu qua trình đào tạo, nó sẽ đo lường hiệu suất của mô hình thông qua số liệu mà chúng tôi đã định cấu hình cho giảng viên. Việc đo lường hiệu suất của mô hình NN trong quá trình đào tạo dựa trên dữ liệu đào tạo. Nhưng mặt khác, để phân tích đầy đủ hiệu suất của mô hình, chúng ta cũng cần sử dụng dữ liệu thử nghiệm.

Vì vậy, để đo lường hiệu suất của mô hình bằng cách sử dụng dữ liệu thử nghiệm, chúng ta có thể gọi test_minibatch phương pháp trên trainer như sau -

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

Dự đoán với NN

Khi bạn đã đào tạo một mô hình học sâu, điều quan trọng nhất là đưa ra dự đoán bằng cách sử dụng mô hình đó. Để đưa ra dự đoán từ NN được đào tạo ở trên, chúng ta có thể làm theo các bước đã cho

Step 1 - Đầu tiên, chúng ta cần chọn một mục ngẫu nhiên từ bộ thử nghiệm bằng cách sử dụng chức năng sau:

np.random.choice

Step 2 - Tiếp theo, chúng ta cần chọn dữ liệu mẫu từ bộ thử nghiệm bằng cách sử dụng sample_index.

Step 3 - Bây giờ, để chuyển đầu ra số sang NN thành một nhãn thực, hãy tạo một ánh xạ ngược.

Step 4 - Bây giờ, sử dụng sampledữ liệu. Đưa ra dự đoán bằng cách gọi NN z dưới dạng một hàm.

Step 5- Bây giờ, khi bạn đã có kết quả dự đoán, hãy lấy chỉ số của nơ-ron có giá trị cao nhất làm giá trị dự đoán. Nó có thể được thực hiện bằng cách sử dụngnp.argmax chức năng từ numpy gói hàng.

Step 6 - Cuối cùng, chuyển đổi giá trị chỉ mục thành nhãn thực bằng cách sử dụng inverted_mapping.

Dự đoán với NN - Hoàn thành ví dụ

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)

Đầu ra

Sau khi đào tạo mô hình học sâu ở trên và chạy nó, bạn sẽ nhận được kết quả sau:

Iris-versicolor