我正在从事一个语义分割项目,该项目涉及动态html" target="_blank">过滤器,以学习多尺度表示。
为了创建这些过滤器,我使用Unet主干并从瓶颈层提取特征图。特征图的大小为H x W X 512,其中H是特征图的高度,W是宽度,512是通道(图)的数量。
这些特征被传递到1x1卷积,以将滤波器的数量减少到H X W X 128,并且这些特征也被传递到自适应池层,以将H X W X 512减少到k X k X 512,其中k是滤波器的大小(例如5)。然后,该滤波器还通过1 x 1卷积进行馈送,以将其减少到128。
这给了我一个特征映射f=H x W x 128和一个大小为k x k x 128的过滤器内核g。
现在我想将f与g卷积,并在keras中尝试了以下操作:
conv = Conv2D(128, kernel_size = 5, kernel_initializer = g, trainable = False)(f)
不幸的是,这不起作用,我只是得到一个错误,说:
无法解释初始值设定项标识符:Tensor(“Straded\u slice:0”,shape=(5,5128),dtype=float32)
现在我想知道我做错了什么?
此外,我必须提到平均池化 /1x1conv后输出tnesor的形状是(?,5,5,128),其中?是批次大小。我尝试了类似的获取内核:
g = g[0,:,:,:]
谢谢你的建议,
干杯,
迈克尔
Conv2D的构造函数的kernel\u initializer参数不需要内核,而是一个初始化内核的函数。您可以在文档中阅读更多内容
如果你只是想在没有可训练权重的情况下执行卷积,你最好使用张量流本机函数tf.nn.conv2d
:
conv = tf.nn.conv2d(f,g,strides=[1,1,1,1],padding='VALID')
我在keras建立了一个ConvNet,这是其中的两层 第一层大小的输出,我完全理解,因为有8个大小为3x3的过滤器,每个过滤器都被应用于生成单独的特征图,因此 第二层的输出大小为24x24x16,我不理解。由于第二层的每个过滤器将作用于第一层输出的每个特征映射,因此输出的大小不应该是24x24x128吗? 基本上,我不明白一层的输出是如何馈送到另一层的输入的
该脚本可以在几分钟内在 CPU 上运行完。 结果示例: from __future__ import print_function import time import numpy as np from PIL import Image as pil_image from keras.preprocessing.image import save_img from keras import la
我问了一个关于我上周建立的一个网络的问题,我重复了一些建议,这些建议导致我发现了一些问题。我回到这个项目,解决了所有问题,并在这个过程中了解了更多关于CNN的信息。现在我陷入了一个问题:我所有的权重都变成了巨大的负值,再加上输出图像中的RELU端总是完全是黑色的(这使得分类器无法完成它的工作)。 在两个标记的图像上: 这些数据被传递到一个两层网络、一个分类器(它自己获得100%)和一个单过滤器3×
我正在实现一个三维卷积神经网络,我有两个问题。 问题一 每个输入是一个大小为(201,10,4)的3D矩阵。我希望我的过滤器能够在第二和第三维度上移动,因为它们是完全连接的。第三个维度是特征维度。所以我不想看第二和第三维度的当地社区。因此,我的过滤器大小将是例如(3,10,4)的大小。所以过滤器大小等于第二和第三维度,但我们在第一维度中有权重共享。以下是我的卷积代码: 所以我应该在这里使用步幅,这
我正在构建一个卷积网络图像分类的目的,我的网络受到VGG conv网络的启发,但我更改了每层的层数和过滤器,因为我的图像数据集非常简单。 然而,我想知道为什么VGG中的Fitler数总是2:64的幂- 我猜这是因为每个池将输出大小除以2 x 2,因此需要将过滤器的数量乘以2。 但我仍然想知道,这一选择背后的真正原因是什么;这是为了优化吗?分配计算是否更容易?我应该在我的人际网络中保持这种逻辑吗。
创建卷积神经网络(CNN)时(如中所述https://cs231n.github.io/convolutional-networks/)输入层与一个或多个过滤器连接,每个过滤器表示一个要素地图。这里,过滤层中的每个神经元只与输入层的几个神经元相连。在最简单的情况下,我的n个过滤器中的每一个都具有相同的维度并使用相同的步幅。 我的问题是: 如何确保过滤器学习不同的特征,尽管它们使用相同的补丁进行训练