在Tensorflow-contrib中,2D卷积是根据filter_size和num_outputs定义的。你如何控制Theano的nnet.conv2d类型的num_outputs?
简短的回答:它必须在运行时根据过滤器张量的形状确定。
与TF不同,Theano不会在张量中存储显式的形状信息。
在 TF 中,您可以执行以下操作:
w = tf.placeholder('float32', [64,64], name='w')
在 Theano 中,无法在编译时判断x
是一个64 x 64
矩阵。你能做的最好的事情就是:
w = T.matrix(name='w', dtype='float32')
在编译时,Theano只知道张量秩,以及哪些维度是可广播的。
在运行时,张量的形状是已知的。如果图像批处理是形状[N, C, H, W]
的 4D 张量,而过滤器的大小为[D, C, U, V]
。num_outputs
将推断为D
.
编辑实际上你可以在theano.tensor.nnet.conv2d
中指定filter_shape
参数,但它只是为Theano选择卷积的最佳算法提供了一个提示。形状不匹配错误仍必须在运行时确定。