Khung Shader hiệu suất kim loại cung cấp hỗ trợ cho việc xây dựng Lưới thần kinh liên kết của riêng bạn. Khi tạo ví dụ MSPCNNConvolution
, nó đòi hỏi một nửa trọng lượng 4D như thông số init
được biểu diễn dưới dạng con trỏ nổi 1D.Thứ tự trọng lượng MPSCNN
init(device: MTLDevice,
convolutionDescriptor: MPSCNNConvolutionDescriptor,
kernelWeights: UnsafePointer<Float>,
biasTerms: UnsafePointer<Float>?,
flags: MPSCNNConvolutionFlags)
Các tài liệu có này để nói về tensor 4D
Cách bố trí của trọng lượng lọc được bố trí sao cho nó có thể được giải thích lại như một tensor 4D (mảng) cân [outputChannels] [kernelHeight] [kernelWidth] [inputChannels/groups]
Thật không may là thông tin không thực sự cho tôi biết cách sắp xếp mảng 4D thành một chiều Float
con trỏ.
Tôi đã thử đặt hàng các trọng số như đối tác BNNS
yêu cầu nó, nhưng không có may mắn.
Làm cách nào để đại diện cho bộ tạo 4D (mảng) như một con trỏ 1D Float
(mảng)?
PS: Tôi đã cố gắng sắp xếp nó như một mảng C và đưa con trỏ đến mảng phẳng, nhưng nó không hoạt động.
CẬP NHẬT
@RhythmicFistman: Đó là cách tôi lưu trữ nó trong một mảng đơn giản, mà tôi có thể chuyển đổi sang một UsafePointer<Float>
(nhưng không hoạt động):
var output = Array<Float>(repeating: 0, count: weights.count)
for o in 0..<outputChannels {
for ky in 0..<kernelHeight {
for kx in 0..<kernelWidth {
for i in 0..<inputChannels {
let offset = ((o * kernelHeight + ky) * kernelWidth + kx) * inputChannels + i
output[offset] = ...
}
}
}
}
bạn có thể cho biết cách bạn thực hiện nỗ lực 4D đến 1D không?chặn bằng cách sử dụng con trỏ sai, tôi nghĩ rằng điều duy nhất có thể đi sai là thứ tự của các chỉ số. –
@RhythmicFistman Đã cập nhật câu hỏi, vấn đề không phải là ngay cả dự án ví dụ của OWS của Apple (với trọng số được đào tạo của riêng họ) hoạt động chính xác. Vì vậy, làm thế nào tôi phải biết whats thậm chí sai ... dữ liệu của tôi hoặc thực hiện của họ. –
Bạn đang đề cập đến mẫu Apple nào? Cả hai MetalImageRecognition và MPSCNNHelloWorld dường như làm việc cho tôi với Xcode 8.2 beta và iOS 10.2 beta. – warrenm