gpt4 book ai didi

python - ValueError : Shape mismatch: The shape of labels (received (15, )) 应该等于 logits 的形状,除了最后一个维度(收到 (5, 3))

转载 作者:行者123 更新时间:2023-12-03 09:54:39 27 4
gpt4 key购买 nike

尝试拟合模型时出现此错误:

ValueError: Shape mismatch: The shape of labels (received (15,)) should equal the shape of logits except for the last dimension (received (5, 3)).



产生错误的代码:
history = model.fit_generator(
train_generator,
epochs=10,
validation_data=validation_generator)

这是train_generator,验证生成器类似:
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(IMG_WIDTH, IMG_HEIGHT),
batch_size=5)

我尝试获得形状:
for data_batch, labels_batch in train_generator:
print('data batch shape:', data_batch.shape)
print('labels batch shape:', labels_batch.shape)
break

data batch shape: (5, 192, 192, 3) labels batch shape: (5, 3)



当我更改批量大小时,错误中的标签形状会相应更改(批量大小为 3 时会给出标签形状 (9,) 的错误,例如,我有 3 个类)。但我担心它是由 train_generator 完成的,我能做些什么来解决这个问题?此外,当我从 train_generator 打印形状时,似乎是正确的。

这是模型,以防万一:
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
input_shape=(IMG_WIDTH, IMG_HEIGHT, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
for i in range(2):
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Flatten())
model.add(layers.Dense(3, activation='softmax'))


model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

谢谢!

编辑 - 完整代码 :

该目录包含两个文件夹 - train 和 validation,每个文件夹都有三个子文件夹,其中包含相应类的图像。
try:
%tensorflow_version 2.x # enable TF 2.x in Colab
except Exception:
pass

from tensorflow.keras import datasets, layers, models

IMG_WIDTH = 192
IMG_HEIGHT = 192
train_dir = 'train'
validation_dir = 'validation'

from google.colab import drive
drive.mount('/content/drive')

import os
os.chdir("drive/My Drive/colab")

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(IMG_WIDTH, IMG_HEIGHT),
batch_size=5)

validation_datagen = ImageDataGenerator(rescale=1./255)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=(IMG_WIDTH, IMG_HEIGHT),
batch_size=5)

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
input_shape=(IMG_WIDTH, IMG_HEIGHT, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
for i in range(2):
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Flatten())
model.add(layers.Dense(3, activation='softmax'))

model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

history = model.fit_generator(
train_generator,
epochs=10,
validation_data=validation_generator)

谢谢!

最佳答案

sparse_categorical_crossentropy的区别和 categorical_crossentropy是您的目标是否是单热编码。

标签批次形状为(5,3) ,这意味着它已被单热编码。所以你应该使用 categorical_crossentropy损失函数。

model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])

关于python - ValueError : Shape mismatch: The shape of labels (received (15, )) 应该等于 logits 的形状,除了最后一个维度(收到 (5, 3)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com