Ở đây chúng ta sẽ hiểu về việc huấn luyện Mạng nơ-ron trong CNTK.
Đào tạo mô hình trong CNTK
Trong phần trước, chúng tôi đã 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ể huấn luyện mô hình NN trong CNTK bằng cách sử dụng kết hợp người học và người huấn luyện.
Lựa chọn người học và tổ chức đào tạo
Trong phần này, chúng ta sẽ xác định người học. CNTK cung cấp một số người học để 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ụng Trình học giảm dần độ dốc ngẫu nhiên (SGD).
Để huấn luyện mạng nơ-ron, chúng ta hãy định cấu hình người học và người huấn luyện với sự trợ giúp của các bước sau −
Bước 1 − Đầu tiên, chúng ta cần nhập hàm sgd từ gói cntk.lerners. from cntk.learners import sgd
Bước 2 − Tiếp theo, chúng ta cần nhập hàm Trainer từ cntk.traingói .trainer. from cntk.train.trainer import Trainer
Bước 3 − Bây giờ, chúng ta cần tạo một người học. Nó có thể được tạo bằng cách gọi hàm sgd 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 tập. learner = sgd(z.parametrs, 0.01)
Bước 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 giữa mất và số liệu cùng với người học. trainer = Trainer(z, (loss, error_rate), [learner])
Tốc độ học kiểm soát tốc độ tối ưu hóa phải là số nhỏ trong khoảng từ 0,1 đến 0,001. Chọn người học và thiết lập đào tạo – Ví dụ đầy đủ
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 huấn luyện viên
Sau khi chúng tôi chọn và định cấu hình trình huấn luyện, đã đến lúc tải tập dữ liệu. Chúng tôi đã lưu tập dữ liệu iris dưới dạng tệp .CSV và chúng tôi sẽ đang sử dụng gói sắp xếp dữ liệu 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
Bước 1 − Đầu tiên, chúng ta cần nhập gói pandas. from import pandas as pd
Bước 2 − Bây giờ, chúng ta cần gọi hàm có tên read_csv để 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)
Sau khi 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
Bước 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. Việc này có thể được thực hiện bằng cách sử dụng hàm iloc. x = df_source.iloc[:, :4].values
Bước 2 − Tiếp theo, chúng ta cần chọn cột loài từ tập dữ liệu mống mắt. Chúng ta sẽ sử dụng thuộc tính value để truy cập vào mảng numpy cơ bản. 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 là 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 để thực hiện điều đó –
Bước 1 − Đầu tiên, chúng ta cần tạo một biểu thức danh sách để lặp qua tất cả các phần tử trong mảng. Sau đó thực hiện tra cứu trong từ điển label_mapping cho từng giá trị. label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
Bước 2 − Tiếp theo, chuyển đổi giá trị số đã chuyển đổi này thành vectơ được mã hóa một lần. Chúng ta sẽ sử dụng hàm one_hot như sau −
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
Bước 3 − Cuối cùng, chúng ta cần biến danh sách đã chuyển đổi này thành một mảng numpy. 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 ghi nhớ các mẫu nhưng không thể suy ra các quy tắc từ các mẫu huấn luyện là quá khớp. Với sự trợ giúp của các bước sau, chúng tôi có thể phát hiện tình trạng trang bị quá mức trên mô hình của mình –
Bước 1 − Đầu tiên, từ gói sklearn, nhập train_test_split hàm từ mô-đun model_selection. from sklearn.model_selection import train_test_split
Bước 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 dữ liệu. label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
Các bước để cung cấp tập huấn luyện và tập xác thực cho mô hình của chúng tôi
Bước 1 − Để huấn luyện mô hình của chúng ta, trước tiên, chúng ta sẽ gọi train_minibatch phương pháp. Sau đó, cung cấp cho nó một từ điển ánh xạ dữ liệu đầu vào tới 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})
Bước 2 − Tiếp theo, 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))
Đưa dữ liệu vào trình huấn luyện – Ví dụ hoàn chỉnh
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 suất 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 truyền dữ liệu qua trình huấn luyện, nó sẽ đo hiệu suất của mô hình thông qua chỉ số mà chúng tôi đã định cấu hình cho trình huấn luyện. Việc đo lường hiệu suất của mô hình NN trong quá trình huấn luyện là trên dữ liệu huấn luyện. 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 dữ liệu thử nghiệm, chúng ta có thể gọi phương thức test_minibatch trên < a i=3>huấn luyện viên 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 deep learning, đ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−
Bước 1 − Đầu tiên, chúng ta cần chọn một mục ngẫu nhiên từ bộ kiểm tra bằng hàm sau − np.random.choice
Bước 2 − Tiếp theo, chúng ta cần chọn dữ liệu mẫu từ bộ kiểm tra bằng cách sử dụng sample_index.
Bước 3 − Bây giờ, để chuyển đổi đầu ra số sang NN thành nhãn thực, hãy tạo ánh xạ đảo ngược.
Bước 4 − Bây giờ, hãy sử dụng dữ liệu mẫu đã chọn. Đưa ra dự đoán bằng cách gọi NN z làm hàm.
Bước 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. Việc này có thể được thực hiện bằng cách sử dụng hàm np.argmax từ numpy gói.
Bước 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. Đưa ra dự đoán với NN – Ví dụ đầy đủ
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 huấn luyện mô hình deep learning ở trên và chạy nó, bạn sẽ nhận được kết quả sau: Iris-versicolor
Xem thêm : Bộ nhớ trong và bộ dữ liệu lớn mạng thần kinh nhân tạo