数据基数是不明确的,确保所有数组包含相同数量的样本



我有一个文件img,每个img都有不同的维度,我把img放入列表中,像这样

files = []
for item in images:
img_org = nii_reader(item)
img = sitk.GetArrayFromImage(img_org) # example shape: (9, 40, 43), (6, 46, 45) and more
files.append(img)
train_files, val_files, train_labels,  val_labels = train_test_split(files, Label, test_size=0.33, random_state=42)

然后我把标签改成像这样的

n_classes = 2
train_label = np_utils.to_categorical(train_labels, n_classes)
val_label = np_utils.to_categorical(val_labels, n_classes)

我做了这样的CNN模型

model_cnn = keras.Sequential(
[
layers.Conv2D(32, (3, 3), activation="relu", input_shape=(32, 32, 3)),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, (3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(128, (3, 3), activation="relu"),
layers.Flatten(),
layers.Dense(64, activation="relu"),
layers.Dense(n_classes, activation="softmax"),
]
)
model_cnn.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), optimizer="adam", metrics=["accuracy"])
model_cnn.fit(train_files, val_files, epochs=5, validation_data=(train_label, val_label))

然后在model_cnn。fit

这行出现了错误
Data cardinality is ambiguous:
x sizes: 7, 10, 8, 9, 9, 8, 6, 8, 8, 8, 9, 8, 8, 7, 5, 10, 7, 7, 6, 7, 7, 8, 6, 7, 5, 6, 8, 5, 7, 8, 9, 6, 8, 7, 8, 5, 9, 7, 7, 5, 7, 9, 5, 5, 7, 5, 10, 6, 8, 7, 7, 9, 7, 8, 8, 7, 6, 6, 5, 8, 7, 6, 6, 5, 7, 7, 6
y sizes: 6, 7, 6, 9, 7, 8, 6, 6, 9, 9, 7, 7, 6, 10, 6, 4, 9, 9, 7, 6, 5, 7, 7, 7, 7, 7, 8, 6, 8, 6, 7, 7, 5
Make sure all arrays contain the same number of samples.

我能做什么来修复这个错误?

在回答您的问题之前,我假设您的示例模型需要如下所示。(查看如何使用fit方法,https://keras.io/api/models/model_training_apis/)

# Model construction
model_cnn = keras.Sequential(
[
layers.Conv2D(32, (3, 3), activation="relu", input_shape=(32, 32, 3)),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, (3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(128, (3, 3), activation="relu"),
layers.Flatten(),
layers.Dense(64, activation="relu"),
layers.Dense(2, activation="softmax"), # n_classes
]
)
# Model compile
model_cnn.compile(
# outputs are softmax results from one-hot encoded labels, thus not sparse one
loss=tf.keras.losses.CategoricalCrossentropy(from_logits=False),
optimizer="adam",
metrics=["accuracy"]
)
# (Optional) Visualize model structure and parameters
model_cnn.summary()
# Model train & val
model_cnn.fit(
# swap `val_files` and `train_label`
x=train_files,    # `Input data` with shape (train_size,32,32,3)
y=train_label,    # `Input data labels` with shape (train_size,2)
epochs=5, 
batch_size=32,    # If unspecified, batch_size will default to 32
validation_data=(
val_files,    # `Valid data` with shape (val_size,32,32,3)
val_label     # `Valid data labels` with shape (val_size,2)
)
)

然而,该模型期望接收32x32像素的RGB(3通道)图像。如果你用代替以(32,32,3)的形状作为输入,那么模型可能会抛出另一个错误消息。

最新更新