ValueError:`logits` 和 `labels` 必须具有相同的形状,收到((无,3)与(无,1))

问题描述 投票:0回答:0

我的数据集由图像组成,有 3 个类别。我的课程是“AD”、“MCI”和“CN”。在标记这些类和我的图像时,我设置了 AD=1、MCI=2 和 CN=3,并将我的类标签保存在 data_label.npy 文件中。我将调整大小的图像转换为 resized_images.npy 文件并将其保存为 numpy 数组。我的标记数据总数是 16667。我想将这个数据集分成训练和测试,然后将其插入到带有 CNN 的模型中。

# import the necessary packages
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import VGG16
from tensorflow import keras
from tensorflow.keras.layers import AveragePooling2D
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Activation, Dense, MaxPool2D, Conv2D, Flatten
from tensorflow.keras.metrics import categorical_crossentropy
from tensorflow.keras.utils import to_categorical
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import argparse
import cv2
import os
import tensorflow as tf
from keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
import numpy as np
import argparse
import cv2
import os
from imutils import paths
lb = LabelBinarizer()

trainY=np.load(r'data_label.npy')
labels=trainY


trainX=np.load(r'resized_images.npy')
trainX = np.expand_dims(trainX, axis=3)

trainX, testX, trainY, testY = train_test_split(trainX, trainY,test_size=0.30, stratify=trainY, random_state=42)
print(trainX.shape, trainY.shape)

trainAug = ImageDataGenerator(
    rotation_range=15,
    fill_mode="nearest")
#trainX = np.expand_dims(trainX, axis=3)
baseModel = VGG16(weights=None, include_top=False,
    input_tensor=Input(shape=(224, 224, 1)))
headModel = baseModel.output
headModel = AveragePooling2D(pool_size=(4, 4))(headModel)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(64, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(3, activation="softmax")(headModel)

#headModel.add(Flatten())
model = Model(inputs=baseModel.input, outputs=headModel)
model.summary()

for layer in baseModel.layers:
    layer.trainable = False
     

INIT_LR = 1e-3
EPOCHS = 20
BS = 32
print("[INFO] compiling model...")
opt = keras.optimizers.Adam(learning_rate=0.01)
model.compile(loss="binary_crossentropy", optimizer=opt,
    metrics=["accuracy"])
#annealer = ReduceLROnPlateau(monitor='val_accuracy', factor=0.5, patience=5, verbose=1, min_lr=1e-3)
print("[INFO] training head...")

print('shape', trainY.shape)
#trainY=(11736,1)
np.squeeze(trainY, axis=1).shape 
H = model.fit_generator(
    trainAug.flow(trainX, trainY, batch_size=BS),
    steps_per_epoch=len(trainX) // BS,
    validation_data=(testX, testY),
    validation_steps=len(testX) // BS, epochs=EPOCHS)
    #print('shape', trainY.shape))
     

这个问题的原因是什么

python machine-learning image-processing deep-learning conv-neural-network
© www.soinside.com 2019 - 2024. All rights reserved.