Đầu ra của hàm model.predict từ Keras có nghĩa là gì?


13

Tôi đã xây dựng mô hình LSTM để dự đoán các câu hỏi trùng lặp trên bộ dữ liệu chính thức của Quora. Các nhãn kiểm tra là 0 hoặc 1. 1 cho biết cặp câu hỏi bị trùng lặp. Sau khi xây dựng mô hình bằng cách sử dụng model.fit, tôi kiểm tra mô hình bằng cách sử dụng model.predictdữ liệu thử nghiệm. Đầu ra là một mảng các giá trị giống như dưới đây:

 [ 0.00514298]
 [ 0.15161049]
 [ 0.27588326]
 [ 0.00236167]
 [ 1.80067325]
 [ 0.01048524]
 [ 1.43425131]
 [ 1.99202418]
 [ 0.54853892]
 [ 0.02514757]

Tôi chỉ hiển thị 10 giá trị đầu tiên trong mảng. Tôi không hiểu ý nghĩa của các giá trị này là gì và nhãn dự đoán cho mỗi cặp câu hỏi là gì?


1
Tôi nghĩ rằng bạn có vấn đề trong mạng của mình .. xác suất phải ở thang điểm 0-1 .. nhưng bạn có 1.99!, Tôi nghĩ bạn có gì đó không ổn ..
Ghanem

Câu trả lời:


7

Theo mặc định, đầu ra của một mạng thần kinh sẽ không bao giờ là nhị phân - tức là số không hoặc số không. Mạng hoạt động với các giá trị liên tục (không rời rạc) để tối ưu hóa tổn thất một cách tự do hơn trong khuôn khổ của độ dốc.

Có một cái nhìn ở đây vào một câu hỏi tương tự cũng cho thấy một số mã.

Nếu không có bất kỳ loại điều chỉnh và chia tỷ lệ nào, đầu ra của mạng của bạn có thể nằm ở đâu đó trong phạm vi đầu vào của bạn, xét về giá trị danh nghĩa của nó. Trong trường hợp của bạn, đó dường như là khoảng từ 0 đến 2.

Bây giờ bạn có thể viết một hàm biến các giá trị của bạn ở trên thành 0 hoặc 1, dựa trên một số ngưỡng. Ví dụ: chia tỷ lệ các giá trị nằm trong phạm vi [0, 1], sau đó nếu giá trị dưới 0,5, trả về 0, nếu trên 0,5, trả về 1.


Cảm ơn, tôi cũng đã nghĩ đến việc sử dụng một giá trị ngưỡng để phân loại các nhãn. Nhưng những gì nên được dựa trên cơ sở mà giá trị ngưỡng quyết định?
Dookoto_Sea

@Dookoto_Sea bạn phải tự quyết định
Jérémy Blain

@Dookoto_Sea Xin lưu ý rằng nếu nhãn của bạn là 0 hoặc 1, giá trị của bạn sẽ nằm trong phạm vi đó, có tỷ lệ giá trị dự đoán là [0, 2] rất hấp dẫn, bạn cần thay đổi đầu ra mô hình của mình
Jérémy Blain

6

Nếu đây là một vấn đề phân loại, bạn nên thay đổi mạng của mình để có 2 nơ ron đầu ra.

Bạn có thể chuyển đổi nhãn thành các vectơ được mã hóa nóng bằng cách sử dụng

y_train_binary = keras.utils.to_categorical(y_train, num_classes)
y_test_binary = keras.utils.to_categorical(y_test, num_classes)

Sau đó, đảm bảo rằng lớp đầu ra của bạn có hai nơ ron với chức năng kích hoạt softmax.

model.add(Dense(num_classes, activation='softmax'))

Điều này sẽ dẫn đến việc bạn model.predict(x_test_reshaped)là một mảng các danh sách. Trong đó danh sách bên trong là xác suất của một thể hiện thuộc về mỗi lớp. Điều này sẽ thêm tối đa 1 và hiển nhiên là nhãn quyết định sẽ là nơ ron đầu ra có xác suất cao nhất.

Keras có cái này trong thư viện của họ, vì vậy bạn không cần phải tự so sánh. Bạn có thể lấy nhãn lớp trực tiếp bằng cách sử dụng model.predict_classes(x_test_reshaped).


3
"Nếu đây là vấn đề phân loại, bạn nên thay đổi mạng của mình để có 2 nơ ron đầu ra." .. xin lỗi Jah, nhưng anh ta không nên, anh ta có thể làm điều đó với một nơron và sigmoid thay vì chức năng softmax.
Ghanem

@Minion, cả hai phương pháp về cơ bản là tương đương, ngưỡng mà bạn cần phải làm với một nơron đầu ra duy nhất được nhúng hoàn toàn vào mạng. Do đó cung cấp đầu ra nhị phân.
JahKnows

1
Có tôi kow .. Tôi nhận xét chỉ vì anh ấy đề cập: "nên thay đổi mạng của bạn để có 2 nơ ron đầu ra." .. thanx
Ghanem

1

Các dự đoán dựa trên những gì bạn cung cấp khi đầu ra đào tạo và chức năng kích hoạt.

Ví dụ: với đầu vào 0-1 và chức năng kích hoạt sigmoid cho đầu ra bị mất chéo nhị phân, bạn sẽ có xác suất là 1. Tùy thuộc vào chi phí nhận quyết định sai theo một trong hai hướng bạn có thể quyết định về cách bạn đối phó với các xác suất này (ví dụ: dự đoán loại "1", nếu xác suất> 0,5 hoặc có lẽ đã có khi nó> 0,1).

(,

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.