我有5张作为基准的图片,它们的大小和内容相同。可以说它们之间有一些细微的差异,但总体上是相似的。
现在我有一张测试图片,它可能与这5张图片中的一张相同,也可能不同。我想知道我的测试图片与基准图片的匹配度是多少百分比。
基准图片将存放在训练文件夹中,而测试图片将存放在测试文件夹中。
我该如何使用机器学习来实现这一点,以便以后可以用于处理大量文件呢?
TensorFlow、Scikit-learn、Scikit-image,哪一个更适合呢?如果你能提供一个示范代码,我将不胜感激..!
回答:
在我看来,你可以通过使用卷积神经网络(CNN)来实现这一点。然而,你需要的图片数量要远多于5张。你可以使用Keras库(参见文档),它使用TensorFlow
或Theano
作为后端。
在Keras文档中,你可以找到一个示例,展示了如何从文件夹中预处理你的数据,正如你所提到的。然后,你只需将其适应于你的CNN模型,如何实现这个模型你也可以在Keras文档中找到。
(通常遵循这样的结构:卷积层 -> 最大池化 -> 平坦化 -> 神经网络
):
使用.flow_from_directory(directory)
的示例:
train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)test_datagen = ImageDataGenerator(rescale=1./255)train_generator = train_datagen.flow_from_directory( 'data/train', target_size=(150, 150), batch_size=32, class_mode='binary')validation_generator = test_datagen.flow_from_directory( 'data/validation', target_size=(150, 150), batch_size=32, class_mode='binary')model.fit_generator( train_generator, steps_per_epoch=2000, epochs=50, validation_data=validation_generator, validation_steps=800)
如果你更喜欢带有图形用户界面的方法,或许你可以尝试使用Orange软件,它提供了数据挖掘/机器学习功能,并带有用户界面。他们有一个博客和一些YouTube视频,你可以观看以获取更多信息。