CNTK - Mô hình hồi quy
Ở đây, chúng ta sẽ nghiên cứu về đo lường hiệu suất liên quan đến mô hình hồi quy.
Khái niệm cơ bản về xác thực mô hình hồi quy
Như chúng ta biết rằng mô hình hồi quy khác với mô hình phân loại, theo nghĩa là, không có thước đo nhị phân về đúng hay sai đối với các mẫu của từng cá nhân. Trong các mô hình hồi quy, chúng tôi muốn đo lường mức độ gần của dự đoán với giá trị thực tế. Giá trị dự đoán càng gần với sản lượng mong đợi, mô hình càng hoạt động tốt.
Ở đây, chúng ta sẽ đo lường hiệu suất của NN được sử dụng để hồi quy bằng cách sử dụng các hàm tỷ lệ lỗi khác nhau.
Tính toán lề lỗi
Như đã thảo luận trước đó, trong khi xác thực một mô hình hồi quy, chúng ta không thể nói liệu một dự đoán là đúng hay sai. Chúng tôi muốn dự đoán của chúng tôi càng gần với giá trị thực càng tốt. Tuy nhiên, một biên độ lỗi nhỏ có thể chấp nhận được ở đây.
Công thức tính biên độ lỗi như sau:
Đây,
Predicted value = chỉ ra y bằng một cái mũ
Real value = được dự đoán bởi y
Đầu tiên, chúng ta cần tính toán khoảng cách giữa giá trị dự đoán và giá trị thực. Sau đó, để có được tỷ lệ lỗi tổng thể, chúng ta cần tính tổng các khoảng cách bình phương này và tính giá trị trung bình. Đây được gọi làmean squared chức năng lỗi.
Tuy nhiên, nếu chúng ta muốn các số liệu hiệu suất thể hiện sai số, chúng ta cần một công thức thể hiện sai số tuyệt đối. Công thức chomean absolute chức năng lỗi như sau:
Công thức trên lấy khoảng cách tuyệt đối giữa giá trị dự đoán và giá trị thực.
Sử dụng CNTK để đo lường hiệu suất hồi quy
Ở đây, chúng ta sẽ xem xét cách sử dụng các số liệu khác nhau, chúng ta đã thảo luận kết hợp với CNTK. Chúng tôi sẽ sử dụng một mô hình hồi quy, có thể đoán dặm cho mỗi gallon cho xe ô tô sử dụng các bước đưa ra dưới đây.
Các bước thực hiện−
Step 1 - Đầu tiên, chúng ta cần nhập các thành phần cần thiết từ cntk gói như sau -
from cntk import default_option, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import relu
Step 2 - Tiếp theo, chúng ta cần xác định một chức năng kích hoạt mặc định bằng cách sử dụng default_optionschức năng. Sau đó, tạo một tập hợp lớp Tuần tự mới và cung cấp hai lớp dày đặc với 64 tế bào thần kinh mỗi lớp. Sau đó, chúng ta thêm một lớp dày đặc bổ sung (sẽ hoạt động như lớp đầu ra) vào tập hợp lớp Tuần tự và tạo ra 1 nơ-ron mà không cần kích hoạt như sau:
with default_options(activation=relu):
model = Sequential([Dense(64),Dense(64),Dense(1,activation=None)])
Step 3- Khi mạng đã được tạo, chúng ta cần tạo một tính năng đầu vào. Chúng ta cần đảm bảo rằng, nó có hình dạng giống như các tính năng mà chúng ta sẽ sử dụng để đào tạo.
features = input_variable(X.shape[1])
Step 4 - Bây giờ, chúng ta cần tạo một input_variable với kích thước 1. Nó sẽ được sử dụng để lưu trữ giá trị mong đợi cho NN.
target = input_variable(1)
z = model(features)
Bây giờ, chúng ta cần đào tạo mô hình và để làm như vậy, chúng ta sẽ tách tập dữ liệu và thực hiện tiền xử lý bằng cách sử dụng các bước triển khai sau:
Step 5−Đầu tiên, nhập StandardScaler từ sklearn.preprocessing để nhận các giá trị từ -1 đến +1. Điều này sẽ giúp chúng ta chống lại các vấn đề về gradient bùng nổ trong NN.
from sklearn.preprocessing import StandardScalar
Step 6 - Tiếp theo, nhập train_test_split từ sklearn.model_selection như sau−
from sklearn.model_selection import train_test_split
Step 7 - Thả mpg từ tập dữ liệu bằng cách sử dụng dropphương pháp. Cuối cùng, hãy tách tập dữ liệu thành một tập hợp đào tạo và xác thực bằng cách sử dụngtrain_test_split chức năng như sau -
x = df_cars.drop(columns=[‘mpg’]).values.astype(np.float32)
y=df_cars.iloc[: , 0].values.reshape(-1, 1).astype(np.float32)
scaler = StandardScaler()
X = scaler.fit_transform(x)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Step 8 - Bây giờ, chúng ta cần tạo một input_variable khác với kích thước 1. Nó sẽ được sử dụng để lưu trữ giá trị mong đợi cho NN.
target = input_variable(1)
z = model(features)
Chúng ta đã chia nhỏ cũng như xử lý trước dữ liệu, bây giờ chúng ta cần đào tạo NN. Như đã làm trong các phần trước khi tạo mô hình hồi quy, chúng ta cần xác định tổ hợp lỗ vàmetric chức năng huấn luyện mô hình.
import cntk
def absolute_error(output, target):
return cntk.ops.reduce_mean(cntk.ops.abs(output – target))
@ cntk.Function
def criterion_factory(output, target):
loss = squared_error(output, target)
metric = absolute_error(output, target)
return loss, metric
Bây giờ, chúng ta hãy xem cách sử dụng mô hình được đào tạo. Đối với mô hình của chúng tôi, chúng tôi sẽ sử dụng tiêu chí chuẩn là sự kết hợp mất mát và chỉ số.
from cntk.losses import squared_error
from cntk.learners import sgd
from cntk.logging import ProgressPrinter
progress_printer = ProgressPrinter(0)
loss = criterion_factory (z, target)
learner = sgd(z.parameters, 0.001)
training_summary=loss.train((x_train,y_train),parameter_learners=[learner],callbacks=[progress_printer],minibatch_size=16,max_epochs=10)
Hoàn thành ví dụ triển khai
from cntk import default_option, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import relu
with default_options(activation=relu):
model = Sequential([Dense(64),Dense(64),Dense(1,activation=None)])
features = input_variable(X.shape[1])
target = input_variable(1)
z = model(features)
from sklearn.preprocessing import StandardScalar
from sklearn.model_selection import train_test_split
x = df_cars.drop(columns=[‘mpg’]).values.astype(np.float32)
y=df_cars.iloc[: , 0].values.reshape(-1, 1).astype(np.float32)
scaler = StandardScaler()
X = scaler.fit_transform(x)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
target = input_variable(1)
z = model(features)
import cntk
def absolute_error(output, target):
return cntk.ops.reduce_mean(cntk.ops.abs(output – target))
@ cntk.Function
def criterion_factory(output, target):
loss = squared_error(output, target)
metric = absolute_error(output, target)
return loss, metric
from cntk.losses import squared_error
from cntk.learners import sgd
from cntk.logging import ProgressPrinter
progress_printer = ProgressPrinter(0)
loss = criterion_factory (z, target)
learner = sgd(z.parameters, 0.001)
training_summary=loss.train((x_train,y_train),parameter_learners=[learner],callbacks=[progress_printer],minibatch_size=16,max_epochs=10)
Đầu ra
-------------------------------------------------------------------
average since average since examples
loss last metric last
------------------------------------------------------
Learning rate per minibatch: 0.001
690 690 24.9 24.9 16
654 636 24.1 23.7 48
[………]
Để xác thực mô hình hồi quy của chúng ta, chúng ta cần đảm bảo rằng, mô hình xử lý dữ liệu mới cũng như với dữ liệu huấn luyện. Đối với điều này, chúng ta cần gọitest phương pháp trên loss và metric kết hợp với dữ liệu thử nghiệm như sau:
loss.test([X_test, y_test])
Đầu ra−
{'metric': 1.89679785619, 'samples': 79}