TL.DR.是否有theano.tensor.nnet.neighbours.images2neibs
的三维友好实现?
我想使用一个接收nxnxn图像的神经网络对体积(NxNxN)进行体素分类,其中N> n。为了对体积中的每个体素进行分类,我必须遍历每个体素。对于每次迭代,我获得并传递邻域体素作为神经网络的输入。这只是一个滑动窗口操作,其操作是神经网络。
虽然我的神经网络在Theano中实现,但滑动窗口实现是python / numpy。由于这不是纯粹的Theano操作,因此分类需要永久(> 3小时)来对一个体积中的所有体素进行分类。对于2d滑动窗口操作,Theano有一个辅助方法,theano.tensor.nnet.neighbours.images2neibs
,是否有类似的三维图像实现?
编辑:对于n-d滑动窗口,现有numpy解决方案(1和2),都使用np.lib.stride_tricks.as_strided来提供“滑动窗口的视图”,从而防止内存问题。在我的实现中,滑动窗口数组从numpy(Cython)传递到Python然后传递到Theano。为了提高性能,我可能不得不绕过Python。
如上所述,ekenberg和Kastner在sklearn_theano.feature_extraction.overfeat中的OverfeatTransformer实用程序将很好地匹配此操作。