InvalidArgumentError:不兼容的形状:[29] 与 [29,7,7,2]
Posted
技术标签:
【中文标题】InvalidArgumentError:不兼容的形状:[29] 与 [29,7,7,2]【英文标题】:InvalidArgumentError: Incompatible shapes: [29] vs. [29,7,7,2] 【发布时间】:2021-12-31 15:00:50 【问题描述】:所以我在这里和 Python 也是新手。我正在尝试建立自己的网络。我找到了一些 15x15 的文档和猫的图片,不幸的是无法制作这个基本网络......
所以,这些是我正在使用的库
from tensorflow.keras.models import Sequential
from tensorflow.keras import utils
from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Dense
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import keras
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import GlobalMaxPooling2D
身体
train_dataset = tf.keras.preprocessing.image_dataset_from_directory(
'drive/MyDrive/cats vs dogs/cats vs dogs/training',
color_mode="rgb",
batch_size=32,
image_size=(150, 150),
shuffle=True,
seed=42,
validation_split=0.1,
subset='training',
interpolation="bilinear",
follow_links=False,
)
validation_dataset = tf.keras.preprocessing.image_dataset_from_directory(
'drive/MyDrive/cats vs dogs/cats vs dogs/training',
color_mode="rgb",
batch_size=32,
image_size=(150, 150),
shuffle=True,
seed=42,
validation_split=0.1,
subset='validation',
interpolation="bilinear",
follow_links=False,
)
test_dataset = tf.keras.preprocessing.image_dataset_from_directory(
'drive/MyDrive/cats vs dogs/cats vs dogs/test',
batch_size = 32,
image_size = (150, 150),
interpolation="bilinear"
)
model = Sequential()
model.add(keras.Input(shape=(150, 150, 3)))
model.add(Conv2D(32, 5, strides=2, activation="relu"))
model.add(Conv2D(32, 3, activation="relu"))
model.add(MaxPooling2D(3))
model.add(Dense(250, activation='sigmoid'))
model.add(Dense(100))
model.add(MaxPooling2D(3))
model.add(Dense(2))
model.summary()
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
history = model.fit(train_dataset, validation_data=validation_dataset, epochs=5, verbose=2)
我得到了这个错误
Incompatible shapes: [29] vs. [29,7,7,2]
[[node gradient_tape/binary_crossentropy/mul_1/BroadcastGradientArgs
(defined at /usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py:464)
]] [Op:__inference_train_function_4364]
Errors may have originated from an input operation.
Input Source operations connected to node
gradient_tape/binary_crossentropy/mul_1/BroadcastGradientArgs:
In[0] gradient_tape/binary_crossentropy/mul_1/Shape:
In[1] gradient_tape/binary_crossentropy/mul_1/Shape_1
我试图从 binary_crossentropy
更改为 categorical_crossentrapy
但没有帮助,我想我的错误是在数据集或输入中,但我不知道如何解决它:(
真的希望能在这里得到帮助!
[我的架构][1] [1]:https://i.stack.imgur.com/w4Y9N.png
【问题讨论】:
【参考方案1】:您需要在某处展平您的预测,否则您将输出图像(29 个大小为 7x7 的样本,带有 2 个通道),而您只需要一个平坦的二维 logits(因此形状为 29x2)。您使用的架构有点奇怪,您的意思是在第一个密集层之前进行展平操作,然后没有“maxpooling2d”(因为它对展平信号没有意义)?混合 relu 和 sigmoid 激活也是非常不标准的,我鼓励你从已建立的架构开始,而不是尝试编写自己的架构来获得一些直觉。
model = Sequential()
model.add(keras.Input(shape=(150, 150, 3)))
model.add(Conv2D(32, 5, strides=2, activation="relu"))
model.add(Conv2D(32, 3, activation="relu"))
model.add(MaxPooling2D(3))
model.add(Flatten())
model.add(Dense(250, activation="relu"))
model.add(Dense(100, activation="relu"))
model.add(Dense(2))
model.summary()
【讨论】:
以上是关于InvalidArgumentError:不兼容的形状:[29] 与 [29,7,7,2]的主要内容,如果未能解决你的问题,请参考以下文章
keras 分割 InvalidArgumentError:不兼容的形状:[32,256,256,3] 与 [32,256,256,4]
InvalidArgumentError:当前图与来自检查点的图不匹配
InvalidArgumentError:无法将张量添加到批次:元素数量不匹配。形状是:[张量]:[4],[批次]:[5] [Op:IteratorGetNext]
我不明白出了啥问题 InvalidArgumentError: Conv2DCustomBackpropInputOp only support NHWC