我的目标是创建一个模型,该模型可以根据是否存在一个特定的水印来对图片进行分类。如果我想检查一个不同的水印,理想情况下,它将创建另一个数据集与新的水印,并重新训练模型。据我所知,这是一个二进制分类器。
这样做对吗?
我被困在我的模型,以确定一个图片上是否有水印。我的指标不会从。示例:
loss: 0.6931 - accuracy: 0.5000 - val_loss: 0.6931 - val_accuracy: 0.5000我已经准备了一个数据文件夹结构,类似于:
培训
验证
我使用了一个数据集,每个类别中有1000幅图像。下面是我的数据集的示例,其中有我自己的水印:
希望你能帮上忙.
如果我改变了图像的大小、年代和dataset?
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(250, 250, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(loss = 'binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
history = model.fit(train_generator,
epochs=25,
validation_data = validation_generator,
verbose = 1,
validation_steps=3)谢谢
发布于 2021-05-12 17:36:23
由于您正在执行二进制分类,您是否将ImageDataGenerator.flow_from_directory方法中的ImageDataGenerator.flow_from_directory参数设置为'binary'?默认的是'categorical',这不是您在这里应该使用的,因为您只有一个输出节点。
这是一个常见的陷阱。我猜一开始的准确性值是0.5,因为您可能有相同数量的水印图像和非水印图像,而且性能从未提高,因为您传递了class_mode的错误值。
TL;DR:在class_mode='binary'中设置flow_from_directory (而不是默认的class_mode='categorical')。
https://stackoverflow.com/questions/67508174
复制相似问题