2017-02-25 39 views
0

在Tensorflow例如“深MNIST专家” https://www.tensorflow.org/get_started/mnist/pros功能号码tf.nn.conv2d

我不清楚如何确定重激活功能的指定功能号码。

例如:

现在,我们可以实现我们的第一层。它将包含卷积, ,然后是最大池。卷积将为每个5x5修补程序计算32个功能 。

W_conv1 = weight_variable([5, 5, 1, 32]) 

32为什么这里挑?

为了建立一个深层网络,我们堆叠了这个 类型的几个层。第二层将为每个5x5修补程序提供64个功能。

W_conv2 = weight_variable([5, 5, 32, 64]) 

再次,为什么64被拾取?

现在,图像尺寸已经减小到7×7,我们添加一个 全连接层1024层的神经元以允许在 处理整个图像。

W_fc1 = weight_variable([7 * 7 * 64, 1024]) 

为什么1024在这里?

谢谢

+0

有关更多详细信息,您还可以检查[此答案](http://stackoverflow.com/a/34698115/3941813)和[此答案](http://stackoverflow.com/a/42451067/3941813)。 – jabalazs

回答

0

32和64是各层中的滤波器数量。 1024是完全连接层中输出神经元的数量。 你的问题基本上是关于选择这些超参数背后的原因。

这些具体选择背后没有数学或编程原因。这些在实验后被提取出来,因为它们在MNIST数据集上提供了很高的精度。 您可以更改这些数字,这是您可以修改模型的一种方式。 不幸的是,你还不能在TensorFlow或任何其他文献资源中探索选择这些参数的原因。

+0

只是想确保我正确理解它。这些功能号码是由我们手动调整的,而不是从CNN自动获悉的。 – derek

+0

是的。你说对了。 – Ujjwal

1

每个过滤器居然会做一些事情,比如检查边,检查是否有变色,或右移,左拉屎的图像,锐化,模糊等 每个过滤器实际上是努力寻找出通过锐化,增强,平滑,增强等形成的图像的含义。

对于例如检查此链接这也解释了这些过滤器 http://setosa.io/ev/image-kernels/

因此,所有这些过滤器实际上是神经元,其中输出将是最大池化,并最终送入一些激活后,FC层的含义。

如果您只是想了解过滤器,那是另一种方法。但是,如果你想了解如何转化。体系结构能够正常工作,但由于这些是对数据集进行过试验和测试的过滤器,因此您现在只需要使用它。

这些过滤器也通过Backprop学习。