簡體   English   中英

logits 和 labels 必須具有相同的第一維,得到 logits 形狀 [2048,10] 和標簽形狀 [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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM