Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择Conv2D过滤器值开始_Python_Tensorflow_Keras_Conv Neural Network - Fatal编程技术网

Python 选择Conv2D过滤器值开始

Python 选择Conv2D过滤器值开始,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,我意识到下面的问题可能会得到类似“这是关于实验和使用经验”的回答,但我还是要问,因为我认为了解我应该从什么开始会很有用 在Keras,即Conv2D卷积层中,有一个名为filters的参数,我理解为“在一个大小由内核大小参数定义的图像上卷积的过滤器窗口数”。也就是说,Conv2D(filters=32,kernel_size=(3,3)将意味着32个大小为3x3的窗口将扫描整个图像 我的问题是:如果你正在创建一个全新的神经网络来解决,比方说,一个图像分类/识别问题,而不利用预先训练好的神经网络(

我意识到下面的问题可能会得到类似“这是关于实验和使用经验”的回答,但我还是要问,因为我认为了解我应该从什么开始会很有用

在Keras,即
Conv2D
卷积层中,有一个名为
filters
的参数,我理解为“在一个大小由
内核大小
参数定义的图像上卷积的过滤器窗口数”。也就是说,
Conv2D(filters=32,kernel_size=(3,3)
将意味着32个大小为3x3的窗口将扫描整个图像

我的问题是:如果你正在创建一个全新的神经网络来解决,比方说,一个图像分类/识别问题,而不利用预先训练好的神经网络(从头开始),那么你通常从什么
过滤器
值开始为你的第一个卷积层?有经验法则吗?这仅仅是一个实验性的答案吗

比如说,我希望一个全新的模型能够识别图像中是否有狗,而无需利用
ResNet50
InceptionV3
imagenet模型,我将使用4160x3120大小的彩色图像,我已将其缩小为(224168,3)的
输入形状,我的第一个
Conv2D
层应该是什么样子

例如,此示例代码是否是解决我的问题的良好起点:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), activation="relu", input_shape=(224,168,3), data_format="channels_last"))
model.add(Conv2D(64, kernel_size=(3,3), activation="relu"))
#additional model design code
32岁是一个好的起点吗?我应该小一点吗?将过滤器大小从
Conv2D
层加倍到
Conv2D
层是否是解决新问题的合适方法

完全理解这是一个天生复杂的主题,没有“快速致富”的方法,但我只想更好地理解这个主题。

16或32可以

前几层中的过滤器通常不太抽象,通常模拟边缘检测器、水滴检测器等。通常,您不希望在输入层应用太多过滤器,因为从原始输入层提取的信息太多。如果您添加的过滤器太多,大多数过滤器将是多余的。您可以通过修剪来检查这一点(减少过滤器的数量,直到性能指标降低)

内核大小决定了您想要多少图像影响卷积的输出(内核的“感受域”)。可以看出,较小的内核通常比较大的内核更好(即使用3x3而不是5x5、7x7)

Inception体系结构将这些决策从建模者手中拿出来,因为它将不同内核大小的过滤器集中在一起,让模型学习最好的过滤器


作为参考,我建议在youtube上浏览斯坦福大学的CS231n课程,了解所有内容:

虽然这完全是我的观点,但从3个频道到32个频道太多了,最好开始慢一点。要回答你的主要问题,尽管这确实是一个反复试验的问题,我使用的一个很好的经验法则是参数的数量,例如,你的输入有224*168*3=112896,而你的第一层有221*165*32=1166880,这是一个巨大的增加,我通常会尝试保持增量稍微小一些,因为你自己训练,你真的只能做这么多的历次(如果我错了,请纠正我的数学)@NiteyaShah感谢您对这一点的看法。因此,在您看来,我的第一层应该看起来像
Conv2D(3,kernel\u size=(3,3),activation=“relu”,input\u shape=(224168,3),data\u format=“channels\u last”)
?还有,我对你是如何推导出221*165的有点困惑?啊,你把
内核的大小考虑进去,得到了221*165。因此,如果我将
过滤器设置为3,我是否应该保持当前设置的
内核大小
相同?将其设置为3将是非常冗余的,将其保持在10-18的范围内是我的选择,如果你能负担得起的话,我会通过几次短期运行来获得网络的感觉,至于你的第二个怀疑,你的怀疑似乎更具理论性,我建议你先读一下为什么我们使用conv,滤波器的作用是什么,还有一点卷积本身。另外,作为补充,使用方形图像训练你的网络是一个很好的做法,有时,您可能会收到来自不同来源、具有不同图像比率的图像,而将其调整为正方形不会影响学习,因此,将一个奇怪的矩形调整为另一个可以做到这一点