BNNSNDArrayDescriptor
A structure that describes the shape, stride, data type, and, optionally, the memory location of an n-dimensional array.
Declaration
struct BNNSNDArrayDescriptorOverview
You use a BNNSNDArrayDescriptor structure as the primary mechanism to pass the description of data to and from BNNS functions. The description may include a pointer to the memory location.
For example, use the following code when you’re passing immutable weights to a convolution layer:
let weights: [Float] = [ ... ]
weights.withUnsafeBufferPointer { weightsPtr in
let weightsDescriptor = BNNSNDArrayDescriptor(flags: BNNSNDArrayFlags(0),
layout: BNNSDataLayoutConvolutionWeightsOIHW,
size: (3, 3, 1, 1, 0, 0, 0, 0),
stride: (0, 0, 0, 0, 0, 0, 0, 0),
data: UnsafeMutableRawPointer(mutating: weightsPtr.baseAddress!),
data_type: .float,
table_data: nil,
table_data_type: .float,
data_scale: 1,
data_bias: 0)
// Create and apply convolution layer.
}Setting a stride value of 0 indicates that BNNS calculates stride, without padding, for that axis. For example, the stride for both of the following n-dimensional array descriptors is the same:
let inputDescriptor = BNNSNDArrayDescriptor(flags: flags,
layout: BNNSDataLayoutRowMajorMatrix,
size: (3, 3, 0, 0, 0, 0, 0, 0),
stride: (0, 0, 0, 0, 0, 0, 0, 0),
data: nil,
data_type: .float,
table_data: nil,
table_data_type: .float,
data_scale: 1,
data_bias: 0)
let inputDescriptor = BNNSNDArrayDescriptor(flags: flags,
layout: BNNSDataLayoutRowMajorMatrix,
size: (3, 3, 0, 0, 0, 0, 0, 0),
stride: (1, 3, 0, 0, 0, 0, 0, 0),
data: nil,
data_type: .float,
table_data: nil,
table_data_type: .float,
data_scale: 1,
data_bias: 0)You don’t need to specify the data when, for example, you’re passing that data directly to BNNSFilterApplyBatch(_:_:_:_:_:_:). The following code creates BNNSNDArrayDescriptor structures for the input and output of a convolution operation. The data property of both descriptors is nil, and the input and output data are passed directly to BNNSFilterApplyBatch(_:_:_:_:_:_:):
let input: [Float] = [ ... ]
var output: [Float] = [ ... ]
let inDescriptor = BNNSNDArrayDescriptor(flags: BNNSNDArrayFlags(0),
layout: BNNSDataLayoutImageCHW,
size: (6, 6, 1, 0, 0, 0, 0, 0),
stride: (0, 0, 0, 0, 0, 0, 0, 0),
data: nil,
data_type: .float,
table_data: nil,
table_data_type: .float,
data_scale: 1,
data_bias: 0)
let outDescriptor = BNNSNDArrayDescriptor(flags: BNNSNDArrayFlags(0),
layout: BNNSDataLayoutImageCHW,
size: (4, 4, 1, 0, 0, 0, 0, 0),
stride: (0, 0, 0, 0, 0, 0, 0, 0),
data: nil,
data_type: .float,
table_data: nil,
table_data_type: .float,
data_scale: 1,
data_bias: 0)
var parameters = BNNSLayerParametersConvolution(i_desc: inDescriptor,
w_desc: weightsDescriptor,
o_desc: outDescriptor,
bias: biasDescriptor,
activation: .identity,
x_stride: 1, y_stride: 1,
x_dilation_stride: 0, y_dilation_stride: 0,
x_padding: 0, y_padding: 0,
groups: 1,
pad: (0, 0, 0, 0))
// `convolutionLayer` is a `BNNSFilter` created by `BNNSFilterCreateLayerConvolution` using `parameters`.
let error = BNNSFilterApplyBatch(convolutionLayer, 1,
input, inStride,
&output, outStride)
Topics
Creating an Array Descriptor
init(flags:layout:size:stride:data:data_type:table_data:table_data_type:data_scale:data_bias:)init(data:scalarType:shape:)init(data:shape:)init(dataType:shape:)init()
Specifying the Behavior of an N-Dimensional Array.
Accessing the Properties of an Array Descriptor
Allocating and Deallocating Memory
allocate(initializingFrom:shape:batchSize:)allocate(randomUniformUsing:range:shape:batchSize:)allocate(randomUniformUsing:range:shape:batchSize:)allocate(randomIn:shape:batchSize:)allocate(randomIn:shape:batchSize:)allocate(randomIn:using:shape:batchSize:)allocate(randomIn:using:shape:batchSize:)allocate(repeating:shape:batchSize:)allocateUninitialized(scalarType:shape:batchSize:)deallocate()