【问题标题】:Conv2D output shape in CNN too smallCNN 中的 Conv2D 输出形状太小
【发布时间】:2020-12-10 20:21:38
【问题描述】:

第一个 Conv2D 层中的输入形状应该是 (100, 100, 1),但输出是 (None, 98, 98, 200)。我了解 200 和 None 确定的内容,但我不确定 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


max_pooling2d_5 (MaxPooling2 (None, 49, 49, 200) 0


conv2d_6 (Conv2D) (无, 47, 47, 100) 180100


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


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


flatten_3(展平)(无,52900)0


dropout_3(辍学)(无,52900)0


dense_5(密集)(无,50)2645050


dense_6(密集)(无,2)102

总参数:2,827,252 可训练参数:2,827,252 不可训练参数:0


【问题讨论】:

    标签: python keras conv-neural-network


    【解决方案1】:

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

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

    【讨论】:

    • 有道理!非常感谢
    • 如果我的回答对你有帮助,如果你能“接受”我的回答,那就太好了:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2021-03-16
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多