【问题标题】:ValueError: Negative dimension size caused by subtracting 2 from 1 for in neural network using tensorflowValueError:使用张量流在神经网络中从 1 中减去 2 导致的负维度大小
【发布时间】:2021-03-22 05:24:42
【问题描述】:

我正在尝试编写一个模型来对 mnist 数据集中的手写数字进行分类。我目前使用的模型如下所示:

model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"),
    tf.keras.layers.Dense(4000,activation = 'sigmoid'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"),
    tf.keras.layers.Dense(4000,activation = 'sigmoid'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"),
    tf.keras.layers.Dense(4000,activation = 'sigmoid'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"),
    tf.keras.layers.Dense(4000,activation = 'sigmoid'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"),
    tf.keras.layers.Dense(4000,activation = 'sigmoid'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(input_shape = (28,28)),
    tf.keras.layers.Dense(10,'softmax')
])

它应该是一个具有 5 层的卷积深度神经网络,我在模型的最后一行不断收到此错误消息。

ValueError: Negative dimension size caused by subtracting 2 from 1 for '{{node max_pooling2d_9/MaxPool}} = MaxPool[T=DT_FLOAT, data_format="NHWC", ksize=[1, 2, 2, 1], padding="VALID", strides=[1, 2, 2, 1]](dense_10/Sigmoid)' with input shapes: [?,1,1,4000].`

我不明白错误或如何修复它。有人可以帮帮我吗?我已经将填充设置为“相同”,但它没有修复它。如果有帮助,我也在使用 google colab。

【问题讨论】:

  • 您的帖子没有以有用的方式格式化 - 您可以使用降价代码格式重新格式化吗?你用```code```封装多行代码

标签: python tensorflow neural-network conv-neural-network mnist


【解决方案1】:

这里可能需要你。要显示您的代码,您需要将其括在四个连续的特殊字符中。字符to use is the one to the left of 1 on your keyboard. Put 4 of these characters in a row. Then skip a line and enter code. When done with code create a new line. On it put four of those 连续字符。这封装了您的代码,显示它会在您发布问题时正确显示。您发布的格式化代码如下所示。

model = tf.keras.models.Sequential([ 
tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"), 
tf.keras.layers.Dense(4000,activation = 'sigmoid'), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"), tf.keras.layers.Dense(4000,activation = 'sigmoid'), 
tf.keras.layers.MaxPooling2D(), 
tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"), tf.keras.layers.Dense(4000,activation = 'sigmoid'),
tf.keras.layers.MaxPooling2D(), 
tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"), tf.keras.layers.Dense(4000,activation = 'sigmoid'), 
tf.keras.layers.MaxPooling2D(), 
tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"), tf.keras.layers.Dense(4000,activation = 'sigmoid'), 
tf.keras.layers.MaxPooling2D(), tf.keras.layers.Flatten(input_shape = (28,28)), tf.keras.layers.Dense(10,'softmax') ] )  

它应该是一个具有 5 层的卷积深度神经网络,我在模型的最后一行不断收到此错误消息。 ValueError: '{{node max_pooling2d_9/MaxPool}} = MaxPoolT=DT_FLOAT, data_format="NHWC", ksize=[1, 2, 2, 1], padding="VALID", strides=[1, 2, 2, 1]'

【讨论】:

    【解决方案2】:

    在您的 keras 模型中,input_shape 参数仅用于您的第一层并初始化您的网络。

    因为您使用MaxPooling2D,所以您的图像缩小了2。如果您想了解您的网络,请尝试print(model.summary())。因此,在某一时刻,您将 1x1x4000 图像缩小了 2 倍。例如,尝试在网络中深入一些:

    model = tf.keras.models.Sequential([
            tf.keras.layers.Conv2D(8,(3,3),input_shape = (28,28,1),padding = "same"),
            tf.keras.layers.Dense(4000,activation = 'sigmoid'),
            tf.keras.layers.MaxPooling2D(),
            tf.keras.layers.Conv2D(8,(3,3),padding = "same"),
            tf.keras.layers.Dense(4000,activation = 'sigmoid'),
            tf.keras.layers.MaxPooling2D(),
            tf.keras.layers.Conv2D(8,(3,3),padding = "same"),
            tf.keras.layers.Dense(4000,activation = 'sigmoid'),
            tf.keras.layers.MaxPooling2D(),
            tf.keras.layers.Conv2D(8,(3,3),padding = "same"),
            tf.keras.layers.Dense(4000,activation = 'sigmoid'),
            tf.keras.layers.MaxPooling2D(),
            tf.keras.layers.Flatten(),
            tf.keras.layers.Dense(10,'softmax')])
    

    结构如下:

    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    conv2d_35 (Conv2D)           (None, 28, 28, 8)         80        
    _________________________________________________________________
    dense_39 (Dense)             (None, 28, 28, 4000)      36000     
    _________________________________________________________________
    max_pooling2d_34 (MaxPooling (None, 14, 14, 4000)      0         
    _________________________________________________________________
    conv2d_36 (Conv2D)           (None, 14, 14, 8)         288008    
    _________________________________________________________________
    dense_40 (Dense)             (None, 14, 14, 4000)      36000     
    _________________________________________________________________
    max_pooling2d_35 (MaxPooling (None, 7, 7, 4000)        0         
    _________________________________________________________________
    conv2d_37 (Conv2D)           (None, 7, 7, 8)           288008    
    _________________________________________________________________
    dense_41 (Dense)             (None, 7, 7, 4000)        36000     
    _________________________________________________________________
    max_pooling2d_36 (MaxPooling (None, 3, 3, 4000)        0         
    _________________________________________________________________
    conv2d_38 (Conv2D)           (None, 3, 3, 8)           288008    
    _________________________________________________________________
    dense_42 (Dense)             (None, 3, 3, 4000)        36000     
    _________________________________________________________________
    max_pooling2d_37 (MaxPooling (None, 1, 1, 4000)        0         
    _________________________________________________________________
    flatten_5 (Flatten)          (None, 4000)              0         
    _________________________________________________________________
    dense_43 (Dense)             (None, 10)                40010     
    =================================================================
    Total params: 1,048,114
    Trainable params: 1,048,114
    Non-trainable params: 0
    _________________________________________________________________
    

    最后,你的网络没有优化好,留给你去寻找和尝试更好的架构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多