我想用CNN来检测某些模式,然而,当我试图运行它们时,我的CNN的最后两层会出现错误。我在下面的代码中对这些层进行了注释。*每个Conv2D层在MaxPooling层之前重复。
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)我犯了个错误
Call arguments received:
• inputs=tf.Tensor(shape=(None, 2, 2, 394), dtype=float32)这意味着我可能把图像转换得太多了,所以它会出错。我能做些什么来解决这个问题?
发布于 2022-09-03 10:39:46
是的,问题是您的输入形状不足以充分利用池。卷积层是可以的,因为您使用的是padding=“相同”,这意味着输入形状和层的输出形状是相同的。然而,每次使用内核为( 2,2) x和y的输入时,输入的维数除以2,这就是为什么过一段时间没有什么可用池。
正如您在这里所看到的,经过一段时间之后,您将耗尽数据以输入到您的层中,因为您通过过多的池压缩了它。

可能的解决办法:
https://stackoverflow.com/questions/73591440
复制相似问题