当前位置: 首页 > 知识库问答 >
问题:

CNN中的Conv2D输出形状太小

丁鸿信
2023-03-14

第一个Conv2D层中的输入形状应该是(100, 100, 1)但是输出是(无,98, 98, 200)。我知道200和无决定了什么,但我不确定98是参数。此外,除此之外,我随机选择了200个作为Conv2D模型的过滤器数量。我应该如何确定适合我的模型的过滤器数量。是基于试错吗?请帮忙。谢谢!!

from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten, Dropout
from keras.layers import Conv2D, MaxPooling2D
from keras.callbacks import ModelCheckpoint

print(data.shape[1:])
model = Sequential()
model.add(Conv2D(200, (3,3), input_shape = data.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (2,2)))

model.add(Conv2D(100,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(50, activation = 'relu'))
model.add(Dense(2, activation = 'softmax'))

model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
model.summary()

(100, 100, 1)模式:sequential_3

conv2d_5(conv2d)(无,98,98,200)2000

activation_5(激活)(无,98, 98, 200) 0

最大池2D池5(最大池2(无、49、49、200)0

conv2d_6(conv2d)(无、47、47、100)180100

激活_6(激活)(无、47、47、100)0

max_pooling2d_6(MaxPooling2(无,23, 23, 100) 0

展平3(展平)(无,52900)0

辍学3(辍学)(无,52900)0

dense_5(密集)(无,50) 2645050

总参数:2827252可培训参数:2827252不可培训参数:0

共有1个答案

夹谷晋
2023-03-14

padding=“same”作为参数添加到conv2d中,输出维度将与输入维度相同。

默认设置为padding=“valid”,由于使用3x3过滤器,步长为1,因此最终得到的尺寸为98x98,因为3x3过滤器适合100x100 98次。

 类似资料:
  • 我不明白为什么通道维度不包含在Keras中con2D层的输出维度中。 我有以下型号 我的问题末尾给出了模型摘要。输入层获取宽度为128、高度为128的RGB图像。第一个conv2D层告诉我输出维度是(None、61、61、24)。我使用的内核大小是(8,8),跨步是(2,2),没有填充。值61=下限((128-8 2 x 0)/2 1)和24(内核/过滤器的数量)是有意义的。但为什么维度中不包括不

  • 我正在使用Keras构建一个CNN,以下Conv1D是我的第一层: 我正在培训以下功能: 其中,train\u df是一个由两列组成的pandas数据帧,其中,对于每一行,标签是一个int(0或1),有效载荷是一个用零填充/截断为1000的浮点数组。train\U df中的培训示例总数为15641。 模型编译,但在训练期间,我得到这个错误: 我看了这篇文章,试图将输入更改为1000个浮点长列表的数

  • 我是机器学习的初学者。虽然,这个问题类似于1,2,3,但我在为我的数据选择输入形状时真的很困惑。我在时间序列数据上使用1-D CNN。数据的维度是(6400,4)。有4个特征(列),其中一个是目标变量。拆分后: 我在为CNN选择输入形状时感到困惑。这就是我所尝试的(我一直保持输入shape=c(3,1)): 这执行得很好,但我不确定它是否正确。请告诉我这是否是设置输入形状的正确方法。

  • 这是我制作的简单的cnn架构。我使用的图像是灰度图。 如果我将通道值指定为粗体分类器中指定的1。添加(卷积2d(32,kernel\u size=3,input\u shape=(50,50,1),激活='relu')) Im获取错误为 检查输入时出错:预期conv2d\u 1\u输入具有形状(50,50,1),但获得具有形状(50,50,3)的数组 但是如果我使用过滤器大小为3,我不会得到任何错

  • 我在Keras建立了一个卷积神经网络。 根据CS231讲座,卷积操作为每个过滤器创建一个特征映射(即激活映射),然后将其堆叠在一起。在我的例子中,卷积层有一个300维的输入。因此,我预计会进行以下计算: 每个过滤器的窗口大小为5。因此,每个滤波器产生300-5 1=296个卷积 但是,实际输出形状看起来不同: 偏移值的形状很有意义,因为每个过滤器都有一个偏移值。然而,我不了解重量的形状。显然,第一

  • 我用python用800个样本训练了一个CNN神经网络,并用60个样本进行了测试。输出精度是50,现在每次我使用模型。预测它会给我同样的结果。 我用了keras和tensorflow。图像为224x224像素,每个像素分为两类。我对神经网络知之甚少,这是我第一次尝试把它做得这么大。我听说它可能太合适了,或者我需要一个更重要的图层,或者我的批量大小/年代/学习率是错误的。 编辑1:种子对网络培训有何