【问题标题】:Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_52/MaxPool' (op: 'MaxPool') with input shapes: [?,148,1,32]对于具有输入形状的“max_pooling2d_52/MaxPool”(操作:“MaxPool”),从 1 中减去 2 导致的负尺寸尺寸:[?,148,1,32]
【发布时间】:2020-02-25 07:48:37
【问题描述】:

我得到这个 Invalid Argument Error 在最大池化层中也得到一个值错误。 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()

【问题讨论】:

    标签: deep-learning


    【解决方案1】:

    你池的次数太多了。

    每次您的样本通过一个池化层时,其宽度和高度都会除以 2。最后,您无法再缩小样本规模,但您会继续尝试(显然是在 max_pooling_2d_52)。

    包含完整的跟踪日志会更容易解释您的问题:)

    【讨论】:

      【解决方案2】:

      永远不要让任何层的输入大小低于其过滤器大小,否则会抛出错误。

      输出的大小(维度)计算为:[(n-f+p)/s]+1 其中,

      • n : 输入维度
      • f : 过滤器大小
      • s : 跨步
      • p:填充

      默认填充为零(也称为有效填充),因为在您的情况下 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'))
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-11
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 2020-10-08
        • 2018-08-14
        • 2017-05-29
        • 2020-07-12
        相关资源
        最近更新 更多