首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卷积神经网络层

卷积神经网络层
EN

Stack Overflow用户
提问于 2022-09-03 10:21:53
回答 1查看 37关注 0票数 -2

我想用CNN来检测某些模式,然而,当我试图运行它们时,我的CNN的最后两层会出现错误。我在下面的代码中对这些层进行了注释。*每个Conv2D层在MaxPooling层之前重复。

代码语言:javascript
复制
  inputs = tf.keras.layers.Input(shape=(256, 256, 27), name='input_layer')
        lambda_layer = tf.keras.layers.Lambda(lambda value: value / 255)(inputs)
        xp = tf.keras.layers.Conv2D(64, 3, padding='same', activation=tf.nn.relu)(lambda_layer)
        xp = tf.keras.layers.MaxPooling2D()(xp)  # by default uses 2,2
        xp = tf.keras.layers.BatchNormalization()(xp)
        xp = tf.keras.layers.Conv2D(94, 3, padding='same', activation=tf.nn.relu)(xp)
        xp = tf.keras.layers.MaxPooling2D()(xp)
        xp = tf.keras.layers.BatchNormalization()(xp)
        xp = tf.keras.layers.Conv2D(128, 3, padding='same', activation=tf.nn.relu)(xp)
        xp = tf.keras.layers.MaxPooling2D()(xp)
        xp = tf.keras.layers.BatchNormalization()(xp)
        xp = tf.keras.layers.Conv2D(156, 3, padding='valid', activation=tf.nn.relu)(xp)
        xp = tf.keras.layers.MaxPooling2D()(xp)
        xp = tf.keras.layers.BatchNormalization()(xp)
        xp = tf.keras.layers.Conv2D(256, 3, padding='same', activation=tf.nn.relu)(xp)
        xp = tf.keras.layers.MaxPooling2D()(xp)
        xp = tf.keras.layers.BatchNormalization()(xp)
        xp = tf.keras.layers.Conv2D(394, 3, padding='same', activation=tf.nn.relu)(xp)
        xp = tf.keras.layers.MaxPooling2D()(xp)
        xp = tf.keras.layers.BatchNormalization()(xp)
        xp = tf.keras.layers.Conv2D(458, 3, padding='same', activation=tf.nn.relu)(xp)
        xp = tf.keras.layers.MaxPooling2D()(xp)
        xp = tf.keras.layers.BatchNormalization()(xp)
    #    xp = tf.keras.layers.Conv2D(516, 3, padding='same', activation=tf.nn.relu)(xp)
     #   xp = tf.keras.layers.Conv2D(516, 3, padding='same', activation=tf.nn.relu)(xp)
     #   xp = tf.keras.layers.MaxPooling2D()(xp)
    #    xp = tf.keras.layers.BatchNormalization()(xp)
        xp = tf.keras.layers.Dropout(0.25)(xp)
        xp = tf.keras.layers.Flatten()(xp)
        xp = tf.keras.layers.Dense(1024, activation=tf.nn.relu)(xp)
        xp = tf.keras.layers.BatchNormalization()(xp)
        xp = tf.keras.layers.Dropout(0.25)(xp)
        xp = tf.keras.layers.Dense(512, activation=tf.nn.relu)(xp)
        xp = tf.keras.layers.Dropout(0.25)(xp)

我犯了个错误

代码语言:javascript
复制
Call arguments received:
  • inputs=tf.Tensor(shape=(None, 2, 2, 394), dtype=float32)

这意味着我可能把图像转换得太多了,所以它会出错。我能做些什么来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-09-03 10:39:46

是的,问题是您的输入形状不足以充分利用池。卷积层是可以的,因为您使用的是padding=“相同”,这意味着输入形状和层的输出形状是相同的。然而,每次使用内核为( 2,2) x和y的输入时,输入的维数除以2,这就是为什么过一段时间没有什么可用池。

正如您在这里所看到的,经过一段时间之后,您将耗尽数据以输入到您的层中,因为您通过过多的池压缩了它。

可能的解决办法:

  1. 您可以更改输入形状

  1. 减少MaxPooling2D层的数量。

  1. 您可以学习如何使用步长和填充参数来更好地控制池后的输出形状。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73591440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档