如何取消BatchDataset的访问并在模型中使用它?

2024-04-19 11:19:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在规范化BatchDataset时遇到问题。我尝试了很多不同的方法,但我总是会遇到一些错误,例如,当我想知道它是否有效时,无法呼叫

train_ds = tf.keras.preprocessing.image_dataset_from_directory(training_folder,
                                                               image_size=(256, 256),
                                                              label_mode="binary")                                                      
valid_ds = tf.keras.preprocessing.image_dataset_from_directory(validation_folder,
                                                               image_size=(256, 256),
                                                              label_mode="binary")   

所以我得到了这个数据集的形状

<BatchDataset shapes: ((None, 256, 256, 3), (None, 1)), types: (tf.float32, tf.float32)>

如何规范化此数据集

此外,我的model.fit不起作用,但我找不到问题

num_classes = 2
input_shape = (224, 224, 3)

model = keras.Sequential(
    [
        keras.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

history = model.fit(train_ds, 
          epochs=5,
          batch_size=128,
          validation_data = valid_ds)

有什么建议吗? 谢谢


Tags: imagesizemodellayerstfdsactivationkernel
2条回答

在图像数据集中指定图像尺寸为256 x 256,但在模型中指定输入形状为224 x 224。要重新缩放图像输入,请将其直接放在输入层之后

tf.keras.layers.experimental.preprocessing.Rescaling(1/255)

尝试使用map

train_ds = train_ds.map(lambda x, y: (tf.divide(x, 255), y))

我还建议你在最后一层使用1个神经元,激活"sigmoid"

相关问题 更多 >