如何解决CNN中的Conv2D输出形状太小
第一个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)))
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(Flatten)(无,52900)0
dropout_3(Dropout)(无,52900)0
dense_5(Dense)(None,50)2645050
dense_6(Dense)(None,2)102
总参数:2,827,252 可训练的参数:2,252 不可训练的参数:0
解决方法
将padding="same"
作为参数添加到conv2d
中,输出尺寸将与输入尺寸相同。
默认设置为padding="valid"
,由于您使用3x3滤镜且步长为1,因此最终尺寸为98x98,因为您的3x3滤镜适合100x100 98倍。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。