我有一个规范化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)>
如何规范化这个数据集?
还有我的模型。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)
有什么建议吗?谢谢! !
尝试使用map
:
train_ds = train_ds.map(lambda x, y: (tf.divide(x, 255), y))
我还建议你在"sigmoid"
激活的最后一层使用1个神经元
您指定图像数据集中的图像尺寸为256 × 256,但在您的模型中您指定的输入形状为224 × 224。要重新调整图像输入,将其直接放在输入层
之后tf.keras.layers.experimental.preprocessing.Rescaling(1/255)