我收到此无效参数错误,同时在最大池化层中也收到值错误。 dim ordering ='th'也不起作用。我不明白为什么会这样。请帮助某人...预先感谢
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(150, 150, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(512, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(512, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(1024, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.summary()
答案 0 :(得分:0)
您池中的次数太多。
每次样本通过合并层之一时,其宽度和高度均被二除。最后,您不能再缩小样本规模,而是继续尝试(显然在max_pooling_2d_52)。
包括完整的跟踪日志将使您更容易解释问题:)
答案 1 :(得分:0)
任何层输入大小都不能小于其过滤器大小,否则会引发错误。
输出大小(尺寸)的计算公式为:[(n-f + p)/ s] +1其中,
默认填充为零(也称为VALID填充),因为在您的情况下p为默认填充,因此p = 0
默认跨度为1,因为您的情况s也为默认跨度,所以s = 1
因此,根据您的情况计算输出尺寸的公式为:n-f +1
也
最大池化层将尺寸减小一半,即n / 2
现在让我们打破模型层,进行计算 在每一层之后输出形状,并查看您在哪里出错。
model = Sequential()
# size : 150 * 150 *3 ( given image size)
model.add(Conv2D(32, (3, 3), input_shape=(150, 150, 3)))
model.add(Activation('relu'))
# size : 148 * 148 * 32 ( as : n-f+1 = 150 -3+1 =148 )
model.add(MaxPooling2D(pool_size=(2, 2)))
# size : 74 * 74 * 32 ( as : n/2 = 148/2 = 74)
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
# size : 72 * 72 * 32 (74-3+1 =72)
model.add(MaxPooling2D(pool_size=(2, 2)))
# size :36 * 36 * 32 ( 72/2 = 36)
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
# size : 34 * 34* 64 (36-3+1 =34)
model.add(MaxPooling2D(pool_size=(2, 2)))
# size : 17 * 17 * 64 ( 34/2 = 17)
model.add(Conv2D(128, (3, 3)))
model.add(Activation('relu'))
# size : 15* 15 * 128 ( 17-3+1 =15)
model.add(MaxPooling2D(pool_size=(2, 2)))
# size : 7 * 7 * 128 ( 15/2 = 7)
model.add(Conv2D(512, (3, 3)))
model.add(Activation('relu'))
# size : 5 * 5 * 512 (7-3+1 = 5)
model.add(MaxPooling2D(pool_size=(2, 2)))
# size : 2* 2* 512 (5/2 = 2)
model.add(Conv2D(512, (3, 3)))
## now here your n is 2 but f is 3 and n-f is -1 i.e. negative hence the error
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(1024, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))