使用Python的简易图像分类器(卷积神经网络)
卷积神经网络对编码来说是一个真正令人头痛的问题。他们的先进结构和数据处理需要提供图像使它比一般的神经网络更难。
deployml新补丁支持卷积网络训练和部署。在本教程中,我们可以通过几行Python代码来训练、评估和部署一个应用程序。
首先,我们必须安装deployml:
pip install deployml==0.0.3bis
使用OpenCV 2,可以通过以下命令安装:
pip install opencv-python
安装依赖项后,我们需要设置训练环境。现在,deployml仅支持二进制结果。在未来将支持两种以上结果的分类器的训练,评估和部署。现在,我们需要两个文件夹。一个叫positive_images和negative_images:
比方说,你想识别出cat与dog,您将所有狗图片放在positive_images中,并将cat图片放在negative_images中。现在,您的图像必须具有PNG的扩展名,但将来可以使用其他文件格式。现在我们将图片排序,我们可以在托管两个图像文件的文件夹中运行我们的python脚本。在脚本中我们导入卷积神经网络和加载器:
from deployml.keras import ConvolutionalNeuralNetwork from deployml.keras import KerasLoader import cv2
然后我们定义我们的神经网络
net = ConvolutionalNeuralNetwork(dropout_option=False, batch_norm=False, first_layer=(32, 3, 3), con_hidden_layers=[(32, 3, 3), (32, 2, 2), (15, 1, 1)], hidden_layers=(10, 10, 5), optimizer='adam', activation_fn='relu', input_dims=(28, 28))
这里有4个卷积层,3个普通隐藏层。我们还有relu函数的层。然后我们训练我们的网络,Python代码如下:
net.train()
在背后发生的是,这些图片被贴上标签并被打乱。数据被拆分成测试和训练,然后将转换应用到训练图片上以生成更多的图片,以不同角度对这些图片进行投影。您将得到:
现在我们对神经网络进行了训练,我们可以评估结果:
net.evaluate_outcome()
这将为您提供以下报告:
好吧这不是很好但是你可以看到这里只有7个图像用于本教程的情况。建议您使用更多。现在我们要部署它。我们可以通过调用deploy函数来执行此操作,从而在模板名称“test.sav”下保存模型:
net.deploy_model(description="this is a test", author="maxwell flitton", organisation='test', contact="ex", file_name="test.sav")
Deployml支持Keras模型的pickling。截至目前,该文件具有一系列参数,包括模型,配置参数(用于KerasLoader)。如果需要,上面显示的报告也包含在保存的文件中以供参考。现在我们要加载我们的机器学习模型:
loader = KerasLoader(file_path="test.sav")
然后我们使用OpenCV来获取我们想要提供给保存的神经网络的新图片:
image = cv2.imread("some_file_path/test.png")
现在我们可以计算出该图像是positive_image组成员的概率:
loader.calculate(image=image)
这里发生的是输入图像的尺寸已由加载器从文件加载。您输入计算函数的图像将重新整形为正确的尺寸。