Python Tensorflow Keras中的水印二值分类器
我的目标是创建一个模型,该模型可以根据是否存在一个特定的水印对图片进行分类。如果我想检查一个不同的水印,理想的情况是用新的水印创建另一个数据集,然后重新训练模型。据我所知,这是一个二进制分类器 这是正确的方法吗 我一直用我的模型来识别图片上是否有水印。我的指标不会从。例如:Python Tensorflow Keras中的水印二值分类器,python,tensorflow,keras,watermark,image-classification,Python,Tensorflow,Keras,Watermark,Image Classification,我的目标是创建一个模型,该模型可以根据是否存在一个特定的水印对图片进行分类。如果我想检查一个不同的水印,理想的情况是用新的水印创建另一个数据集,然后重新训练模型。据我所知,这是一个二进制分类器 这是正确的方法吗 我一直用我的模型来识别图片上是否有水印。我的指标不会从。例如: loss: 0.6931 - accuracy: 0.5000 - val_loss: 0.6931 - val_accuracy: 0.5000 我准备了一个数据文件夹结构,如: 训练 水印 无水印 验证 水印 无
loss: 0.6931 - accuracy: 0.5000 - val_loss: 0.6931 - val_accuracy: 0.5000
我准备了一个数据文件夹结构,如:
训练
- 水印
- 无水印
- 水印
- 无水印
谢谢因为您正在执行二进制分类,您是否在
ImageDataGenerator.flow\u从_目录
方法到'binary'
中设置了class\u模式
参数?默认值是“分类的”
,这不是您应该在这里使用的,因为您只有一个输出节点
这是一个常见的陷阱。我猜准确度的值一开始是0.5,因为有水印图像和无水印图像的数量可能相等,而且性能永远不会提高,因为您传递了错误的class\u mode
值
TL;DR:Set
class\u mode='binary'
(而不是默认的class\u mode='classifical'
)在flow\u from\u directory
中设置class\u mode='binary'
),因为您正在执行二进制分类,您是否在ImageDataGenerator.flow\u from\u directory
方法中将class\u mode
参数设置为'binary'
?默认值是“分类的”
,这不是您应该在这里使用的,因为您只有一个输出节点
这是一个常见的陷阱。我猜准确度的值一开始是0.5,因为有水印图像和无水印图像的数量可能相等,而且性能永远不会提高,因为您传递了错误的class\u mode
值
TL;DR:从目录中设置
flow\u中的class\u mode='binary'
(而不是默认的class\u mode='classifical'
)!这改变了一切。太棒了!这改变了一切。
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)