![](/img/trans.png)
[英]logits and labels must have the same first dimension, got logits shape [1568,10] and labels shape [32]
[英]logits and labels must have the same first dimension, got logits shape [2048,10] and labels shape [32]
我正在尝试使用以下代码让 CNN 对图像进行分类。
本质上,此代码接收一个包含文件夹和图像的目录,并训练 CNN 对它们进行分类。
这是我的代码:
self.model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', input_shape=(32, 32, 3)))
self.model.add(BatchNormalization())
self.model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
self.model.add(BatchNormalization())
self.model.add(MaxPooling2D((2, 2)))
self.model.add(Dropout(0.2))
self.model.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
self.model.add(BatchNormalization())
self.model.add(Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
self.model.add(BatchNormalization())
self.model.add(MaxPooling2D((2, 2)))
self.model.add(Dropout(0.3))
self.model.add(Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
self.model.add(BatchNormalization())
self.model.add(Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
self.model.add(BatchNormalization())
self.model.add(MaxPooling2D((2, 2)))
self.model.add(Dropout(0.4))
self.model.add(Flatten())
self.model.add(Dense(128, activation='relu', kernel_initializer='he_uniform'))
self.model.add(BatchNormalization())
self.model.add(Dropout(0.5))
self.model.add(Dense(10, activation='softmax'))
def processModel(self, split, epochs=10):
datagen = keras.preprocessing.image.ImageDataGenerator(
rescale=1./255,
rotation_range=5,
zoom_range=(0.95, 0.95),
horizontal_flip=False,
vertical_flip=False,
data_format='channels_last',
validation_split=split,
)
train_generator = datagen.flow_from_directory(
directory=self.path,
color_mode='rgb',
class_mode='sparse',
shuffle=True,
subset='training',
seed=7
)
test_generator = datagen.flow_from_directory(
directory=self.path,
color_mode='rgb',
class_mode='sparse',
shuffle=True,
subset='validation',
seed=7
)
self.model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=["accuracy"]
)
self.model.fit(train_generator, epochs=epochs, verbose=2)
self.score = self.model.evaluate(test_generator)
我不断收到此错误:
logits and labels must have the same first dimension, got logits shape [2048,10] and labels shape [32]
在线的:
self.model.fit(train_generator, epochs=epochs, verbose=2)
有谁知道为什么会这样?
在不知道您的数据和数据准备的情况下,很难重现,但我认为问题可能出在您的损失函数上
self.model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=["accuracy"]
)
尝试使用categorical_crossentropy
代替sparse_categorical_crossentropy
:
self.model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=["accuracy"]
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.