ds_train的形状为(2,224,224,3)而不是(None, 224, 224, 3)



我用下面的代码创建了我自己的自定义数据集(包含2个类):

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
ds_train = tf.keras.preprocessing.image_dataset_from_directory(
'C:/Users/mydir/Source_Images/',
labels = 'inferred', # from subfolders in alphabetical order
label_mode = "int",
class_names = ["CVS", "No_CVS"],
color_mode = 'rgb',
batch_size = 2,
image_size = (224, 224),
shuffle = True, # randomized order of images
seed = 123, #set the seed if  train, valid images are the same when you run again   
validation_split = 0.1,
subset = "training"
)

df_train结果:

<BatchDataset shapes: ((None, 224, 224, 3), (None,)), types: (tf.float32, tf.int32)>

现在,我想通过查看9张图像来可视化我的数据:

for i, (image, label) in enumerate(ds_train.take(9)):
ax = plt.subplot(3, 3, i + 1)
plt.imshow(image.numpy().astype("uint8"))
plt.axis("off")

但是,我得到以下错误:

第61行
plt.imshow(image.numpy().astype("uint8"))
TypeError: Invalid shape (2, 224, 224, 3) for image data

我正在寻找一种方法来解决这个问题,并能够与matplotlib绘制我的图像。

编辑:

更重要的是,在训练模型时似乎不能使用数据中的数据,因为我得到了这个错误:

ValueError: Input 0 is incompatible with layer EfficientNet: expected shape=(None, 224, 224, 3), found shape=(2, None, 224, 224, 3)

在运行Keras示例代码后,我在这里找到(在这里我用image_dataset_from_directory而不是tdsf.load()函数创建了ds_train)。

所以我认为我创建ds_train的方式出了问题。任何决议都非常欢迎。

当你这样做时,似乎你正在离开batch_size:

plt.imshow(image.numpy().astype("uint8"))

使用原始代码,您仍然无法看到9个图像,因为您的batch_size。我想如果你这样做会很好:

不应该抛出像TypeError: Invalid shape...:

这样的错误
plt.imshow(image[i].numpy().astype("uint8"))

此外,您可以执行以下操作查看batch_size:

for img_batch_size, labels_batch_size in train_df:
print(img_batch_size.shape)
print(labels_batch_size.shape)

对于您的情况,img_batch_size.shape应该打印(2,224,224,3),其中该元组对应于图像张量.

对于input_shape问题,您需要添加您的模型,以便我们可以看到input_shape的问题。

相关内容

  • 没有找到相关文章

最新更新