Các phương thức của đối tượng suy luận tổng quát CoreML
coreml_model_request_object là đối tượng suy luận tổng quát do coreml.new_model_request(...) / coreml.session(...) trả về.
Đối tượng này đưa các đặc trưng đầu vào đã chuẩn bị vào mô hình và trả về kết quả được sắp xếp theo tên đầu ra.
Phạm vi trách nhiệm của đối tượng được giới hạn rõ ràng:
- gửi tác vụ suy luận
- đọc kết quả bất đồng bộ
- xem chữ ký đầu vào / đầu ra
- xem cấu hình hiện tại của đối tượng suy luận
Đối tượng không thực hiện tách token, tiền xử lý ảnh hoặc hậu xử lý ở cấp nghiệp vụ; các bước đó cần được kết hợp trong Lua.
Các phương thức này khả dụng trong các phiên bản phát hành sau 20260319
Phương thức suy luận
:predict(inputs[, opts])
kết quả trả về, thông báo lỗi = đối tượng suy luận tổng quát:predict(bảng ánh xạ đầu vào)
hoặc
đã gửi hay chưa, thông báo lỗi = đối tượng suy luận tổng quát:predict(bảng ánh xạ đầu vào, {
async = có chạy bất đồng bộ hay không,
multi_array_output = "table" hoặc "MLMultiArray",
uses_cpu_only = lần gọi này có chỉ dùng CPU hay không,
})
Chạy suy luận cho một mẫu.
inputsphải là một bảng có khóa là tên đầu vào- Trong chế độ đồng bộ, bảng kết quả được trả về trực tiếp
- Trong chế độ bất đồng bộ, chỉ trả về
true; sau đó dùng:is_done()và:results() multi_array_outputkiểm soát việc đầu raMLMultiArrayđược giữ dưới dạng đối tượng tensor gốc hay chuyển thành bảng Luauses_cpu_onlychỉ ảnh hưởng đến lời gọi này và không thay đổi cấu hình mặc định của đối tượng
:run(inputs[, opts])
run() là bí danh của predict().
:predict_batch(batch_inputs[, opts])
kết quả theo lô, thông báo lỗi = đối tượng suy luận tổng quát:predict_batch({
{ input_ids = ids1 },
{ input_ids = ids2 },
}, {
async = false,
multi_array_output = "MLMultiArray",
})
Chạy suy luận theo lô. Yêu cầu iOS 12 trở lên.
batch_inputsphải là một mảng; mỗi phần tử là bảng đầu vào của một mẫu, có khóa là tên đầu vào- Trong chế độ đồng bộ, trả về mảng kết quả theo lô; mỗi phần tử vẫn tuân theo cấu trúc đầu ra của một mẫu
- Trong chế độ bất đồng bộ, trả về
true; gọi:results()sau đó để lấy kết quả theo lô optssử dụng các trường giống vớipredict()
:run_batch(batch_inputs[, opts])
run_batch() là bí danh của predict_batch().
:results([opts])
kết quả trả về, thông báo lỗi = đối tượng suy luận tổng quát:results()
hoặc
kết quả trả về, thông báo lỗi = đối tượng suy luận tổng quát:results({
multi_array_output = "table" hoặc "MLMultiArray",
})
Đọc kết quả của lần suy luận bất đồng bộ gần nhất.
- Nếu lời gọi bất đồng bộ gần nhất đến từ
predict(), phương thức trả về bảng kết quả của một mẫu - Nếu lời gọi bất đồng bộ gần nhất đến từ
predict_batch(), phương thức trả về mảng kết quả theo lô - Theo mặc định,
multi_array_outputdùng thiết lập của lời gọi suy luận gần nhất - Nếu tác vụ bất đồng bộ vẫn đang chạy, trả về
nil, "not yet" - Nếu không có kết quả đã hoàn tất thành công để đọc, trả về
nil, "unknown"
:is_done()
đã hoàn tất hay chưa = đối tượng suy luận tổng quát:is_done()
Kiểm tra lần suy luận bất đồng bộ gần nhất đã hoàn tất hay chưa. Phương thức này chỉ có ý nghĩa sau predict(..., { async = true }) hoặc predict_batch(..., { async = true }).
Cấu hình thời gian chạy và siêu dữ liệu
:metadata()
siêu dữ liệu = đối tượng suy luận tổng quát:metadata()
Trả về siêu dữ liệu tích hợp của mô hình.
:uses_cpu_only()
mặc định có chỉ dùng CPU hay không = đối tượng suy luận tổng quát:uses_cpu_only()
Trả về cấu hình mặc định chỉ dùng CPU đã được lưu khi tạo đối tượng suy luận.
:compute_units()
cấu hình đơn vị tính toán = đối tượng suy luận tổng quát:compute_units()
Trả về chuỗi compute_units hiện tại được đối tượng suy luận này ghi lại.
- Trên iOS 12 trở lên, phương thức trả về chuỗi chữ thường đã ghi lại tại thời điểm tạo
- Các kết quả thường gặp gồm
"all","cpu_only","cpu","cpu_and_gpu","gpu","cpu_and_neural_engine","ane"và"neural_engine" - Nếu đối tượng suy luận được tạo với
uses_cpu_only = true, phương thức trả về"cpu_only" - Trên iOS 11, phương thức trả về
nil
Phương thức chữ ký đầu vào và đầu ra
:input_count() / :output_count()
Trả về số lượng đặc trưng đầu vào / đầu ra.
:input_features() / :output_features()
Trả về các bảng mô tả đặc trưng có khóa là tên.
Triển khai hiện tại cung cấp một tập hợp trường gọn nhẹ:
typeoptional- Chỉ với đặc trưng
multi_array:shapevàdata_type
:input_info(name_or_index) / :output_info(name_or_index)
Đọc mô tả của một đầu vào / đầu ra theo tên hoặc theo chỉ mục bắt đầu từ 1.
- Các trường trả về phần lớn giống với
input_features()/output_features() - Có thêm trường
name - Chỉ mục số tuân theo cùng thứ tự mà
input_names()/output_names()sử dụng
:input_names() / :output_names()
Trả về danh sách tên đầu vào / đầu ra có thứ tự ổn định.
- Tên được sắp xếp theo thứ tự từ điển
- Thứ tự của
output_names()khớp với thứ tự chỉ mục số trong kết quả suy luận đồng bộ
:class_labels()
Trả về nhãn lớp do mô hình khai báo. Yêu cầu iOS 14 trở lên.
Vòng đời và kiểm tra kiểu
:close()
Hủy trạng thái suy luận bên dưới. Không nên sử dụng lại đối tượng sau khi đóng.
:is_model_request() / :is_session()
Các tiện ích kiểm tra kiểu ở cấp đối tượng. Đây là các bí danh tương đương.
Lưu ý
predict()/run()luôn trả về một bảng- Kết quả hỗ trợ cả chỉ mục số và chỉ mục theo tên đầu ra
predict_batch()/run_batch()trả về mảng kết quả theo lô; mỗi phần tử vẫn hỗ trợ truy cập theo cả chỉ mục số và tên đầu ra- Trong các API suy luận tổng quát mới hơn, đầu ra
MLMultiArraymặc định được giữ dưới dạng đối tượng tensor gốc để xử lý tiếp - Để xem các giá trị hoặc duy trì khả năng tương thích với tập lệnh cũ dựa trên bảng, hãy truyền
multi_array_output = "table"
Ví dụ truy cập kết quả:
out[1]
out.text_features
batch_out[1].text_features
Ví dụ
local req = assert(coreml.new_model_request(XXT_HOME_PATH.."/models/demo.mlmodelc"))
local out = assert(req:predict({
input_ids = ids,
}, {
multi_array_output = "MLMultiArray",
}))
print(out[1])
print(out.text_features)
print(req:output_names())