MPSCNNConvolutionDescriptor neuronFilter 已弃用

MPSCNNConvolutionDescriptor neuronFilter deprecated

在 iOS 11.0 中,某些 ConvolutionDespriptors 弃用了 neuronFilter。

我仍在使用它,但 Xcode 已经抱怨弃用,这是由于最后一个参数:

  let desc = MPSCNNConvolutionDescriptor(kernelWidth: kernel.0,
                                     kernelHeight: kernel.1,
                                     inputFeatureChannels: inChannels,
                                     outputFeatureChannels: outChannels,
                                     neuronFilter: activation)

遗憾的是,当前的 Apple 文档并未说明如何解决该问题。 "neuronFilter" 参数需要从调用中删除,但我该如何使用它呢?

有什么建议吗?

从 class 弃用消息中可以看出:

This method is deprecated. Please use neuronType, neuronParameterA and neuronParameterB properites to fuse neuron with convolution.

"You must implement now the convolution family" 不管怎样neuronType, neuronParameterA and neuronParameterB...

流程有变化,但变化不大,我想你会很轻松地完成。

是的,neuronFilter 已完全弃用。

这是新的方法:

声明

class MPSCNNConvolutionDescriptor : NSObject

概览

您使用 MPSCNNConvolutionDescriptor 对象来描述 MPSCNNConvolution 内核的属性,例如其大小、像素格式和 CPU 缓存模式。

不要使用 MPSCNNNeuron (neuronFilter),而是使用 MPSCNNKernel

今天过得愉快!

对于任何在这里拼命跌跌撞撞的人(就像我一样,但上面的指导很神秘),以非弃用(iOS11+)方式设置神经元过滤器的方法是:

MPSCNNConvolutionDescriptor *d = [MPSCNNConvolutionDescriptor cnnConvolutionDescriptorWithKernelWidth:w kernelHeight:h inputFeatureChannels:i outputFeatureChannels:o];
[d setFusedNeuronDescriptor:[MPSNNNeuronDescriptor cnnNeuronDescriptorWithType:MPSCNNNeuronTypeReLU a:0]];

MPSNNNeuronDescriptorSwift version 中是 "documented",但在 Objective-C 中不是。去图吧。