【发布时间】:2021-05-12 17:12:22
【问题描述】:
我的目标是创建一个模型,该模型可以根据一个特定的水印是否存在来对图片进行分类。如果我想检查不同的水印,理想情况下是使用该新水印创建另一个数据集,然后重新训练模型。据我了解,这是一个二元分类器。
这是正确的方法吗?
我坚持使用我的模型来识别图片上是否有水印。我的指标没有变化。示例:
loss: 0.6931 - accuracy: 0.5000 - val_loss: 0.6931 - val_accuracy: 0.5000
我已经准备了一个数据文件夹结构,例如:
培训
- 水印
- 无水印
验证
- 水印
- 无水印
我使用了一个数据集,每个类别包含 1000 张图像。这是带有我自己的水印的数据集的示例:
- https://drive.google.com/file/d/1JBdbIw1yehx9XX9S6X7esVhVL8NG1dAK/view?usp=sharing
- https://drive.google.com/file/d/14Rxul13zGzXgKD9GZeudn_K69BRBJ1tR/view?usp=sharing
- https://drive.google.com/file/d/1oeXxSjppDMScoj04hzEEl3587ccCFqrB/view?usp=sharing
希望你能帮上忙……
- 如何更改模型以“识别”水印?
- 为什么我的“损失”和“准确度”即使更改图像大小、时期、数据集也不会移动?
- 我是否应该只使用带有增强功能且没有背景的水印图像来训练模型?
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)
谢谢
【问题讨论】:
标签: python tensorflow keras watermark image-classification