Chuyển tới nội dung chính

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.

  • inputs phả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_output kiểm soát việc đầu ra MLMultiArray được giữ dưới dạng đối tượng tensor gốc hay chuyển thành bảng Lua
  • uses_cpu_only chỉ ả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_inputs phả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ô
  • opts sử dụng các trường giống với predict()

: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_output dù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ẹ:

  • type
  • optional
  • Chỉ với đặc trưng multi_array: shape và 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 MLMultiArray mặ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())