使用SingleStore DB、Keras和Tensorflow进行图像分类

网站建设3年前发布
31 0 0

​译者 | 陈峻,审校 | 孙淑娟,鉴于图像分类在机器学习中的实际应用价值,本文将使用​​Fashion MNIST​​案例进行图像分类。其中,我们会将图像存储在SingleStore DB数据库中,使用Keras和Tensorflow来构建图像分类模型,并将预测结果存储在SingleStore DB中。最后,我们将使用Streamlit为数据库系统构建一个快速的可视化前端,使我们能够检索图像,并确定模型能否正确地识别它。文中使用到的SQL脚本、Python代码和notebook文件(包含DBC、HTML和iPython格式),都可以在​​GitHub​​上获得。,由于Fashion MNIST数据集被内置在Keras中,因此我们能够直接使用该数据集。正因为图像数据与模型预测一起存储在数据库系统中,我们可以创建独立于应用程序、且无需重新加载的原始数据集。,首先,我们需要在SingleStore网站上创建一个免费的Cloud帐户,并在Databricks网站上创建一个免费的CommunityEdition(CE)帐户。在撰写本文时,SingleStore的云帐户售价为500美元。而对于Databricks CE而言,我们需要的是注册免费帐户,而不是试用版。,接着,我们可以通过准备如下三个方面,来配置Databricks CE:,让我们在SingleStore Cloud帐户中,使用SQL编辑器创建一个新的数据库--ml:,接着我们通过如下代码,创建tf_images、img_use、categories、prediction_results四张表:,我们简单介绍一下上述四张表:,下面让我们通过如下SQL代码,从img_use和categories开始:,首先,让我们创建一个新的Databricks CE版的Python notebook。在此,我们将其称为Fashion MNIST的数据加载器,以便将新的notebook附加到Spark集群中。下面是设置环境的代码:,接下来,我们将获取用于训练和测试的数据:,我们可以打印出各种数据的形状:,其结果应类似如下内容:,至此,我们有了60,000张用于训练的图像、以及10,000张用于测试的图像。这些图像是灰度的,大小为28像素x28像素。让我们来查看其中一张:,其结果如下(28列x28行):,我们可以通过打印,来检查与该图像关联的标签:,其结果为:,该数值代表了Ankle Boot(短靴)。,我们可以使用如下代码,做出一个快速绘图:,其结果如下图所示:,202303061210326348d4949d8fd059aae947ccb5e7dcfe2b3a35109,图1:时尚MNIST,为了重塑数据集以便在后期能够正确地存储,我们将通过如下方式,创建两个临时Numpy数组:,我们可以通过打印,来检查其形状:,其结果为:,由于我们已经扁平化了图像的结构,因此接下来需要设置训练值和测试值,以匹配存储在img_useuse_id表中的列值:,现在我们将通过如下代码,创建两个列表来匹配tf_images表的结构:,同时,我们可以通过如下代码,定义自己的模式(schema),并创建两个Spark DataFrame:,现在我们将通过如下代码,连接两个DataFrame:,下面,让我们通过显示几个数值,来检查DataFrame的结构:,其结果应类似如下信息:,为了将img列中的数值转换为适合SingleStore DB的格式,我们可以使用以下UDF函数来实现:,我们可以按照如下方式应用该UDF:,同时,我们通过如下代码,来再次检查DataFrame的结构:,其结果应类似如下内容:,现在,我们可以删除img列了:,至此,我们已准备好处理原始训练和测试数据。首先,我们通过如下代码,在0和1之间缩放数值:,接下来,我们将构建自己的模型:,其结果应类似如下内容:,现在,我们将此模型应用于训练数据:,其结果应类似如下内容:,我们可以看到模型的精确度随着时间的推移而提高,我们可以据此创建一个图:,其结果应类似如下图表:,20230306121033551e0b259421256b621745b14ff73e923a86da504,图2:模型精确度,同时,我们也可以绘制出模型的损耗(Model Loss):,其结果应类似如下图表:,20230306121033488916e01bfa61abd71623bdd05703823845b2885,图3:模型损耗,再通过如下代码,测试数据的准确性:,其结果应类似如下内容:,让我们使用该模型进行预测,并查看其中的一组预测:,其结果应类似如下内容:,我们可以创建一个混淆矩阵(Confusion Matrix)来获得更多的洞见。,首先,我们将通过如下代码,来创建分类值:,接下来,我们采用Plotly和Stack Overflow上提及的​​解决方案​​:,其结果应类似如下内容:,2023030612125995a0b281287f1b2513775192de8b4ab89f69c7403,图4:混淆矩阵,我们可以看到,由于诸如:Shirts(衬衫)和T-Shirts(T恤)等项看起来非常相似,因此该模型对于某些时尚单品的准确性是比较低的。,同时,我们也可以绘制出​​精准率和召回率​​。其中精准率可以通过如下代码来实现:,其结果应类似如下内容:,20230306121034a3adf0a517c9546151029192c3d67bc73847e4668,图5:精准率,而通过如下代码,则可以实现召回率:,其结果应类似如下内容:,20230306121300f70bf56008607be557f649db202ee4cac3bd1d235,图6:召回率,下面,我们将通过如下代码,创建一个列表,来匹配prediction_results表的结构:,我们可以通过如下代码,定义自己的模式,并创建Spark DataFrame:,让我们通过显示几个数值,来检查DataFrame的结构:,其结果应类似如下内容:,接着,我们通过如下代码,将prediction_results根据十个穿戴类别,为列中的每个值创建一个单独的列:,为了将DataFramestf_images_df和prediction_results_df分别写入表tf_images和prediction_results,我们首先需要建立与SingleStore DB的连接:,在Setup中,我们需要确保已为SingleStore DB的云集群添加了服务器地址和密码。我们可以通过如下代码,为SingleStore Spark连接器设置一些参数:,最后,为了使用Spark连接器将DataFrame写入SingleStore DB。我们首先可以对tf_images使用如下代码:,然后对prediction_results使用如下代码:,至此,我们已经构建出了系统。下面,我们将针对前文提到的两部分,来运行一些查询示例。,首先,让我们查询在tf_images中存储了多少张图片:,其结果应类似如下内容:,让我们查看其中的几行:,其结果应类似如下内容:,我们再来查看img_use表:,其结果应类似如下内容:,接着,我们来查找如下类别:,其结果应类似如下内容:,此外,我们还可以通过如下代码,找到不同类别的穿戴单品:,其结果应类似如下内容:,为了获得训练和测试图像数量的摘要,我们可以输入如下代码:,其结果应类似如下内容:,而为了获取有关特定图像ID的详细信息,我们可以输入:,其结果应类似如下内容:,我们可以使用Streamlit创建一个小应用,以实现选择图像,并显示模型预测。,我们需要安装如下软件包:,上述列表可以在​​GitHub​​上的requirements.txt文件中找到。您可以通过运行如下命令,来一次性进行安装:,以下是streamlit_app.py的完整代码清单:,我们的本地Streamlit应用程序可以从应用根目录中的.streamlit/secrets.toml文件中读取密钥。请参照如下方式创建该文件:,在真实创建集群时,上述代码中的<TO DO>应被替换为从SingleStore Cloud处获取的数值。,我们可以按如下方式运行Streamlit应用程序:,我们可以在浏览器中看到类似于下面图7和图8的输出。我们可以通过移动滑块来选择图像。它将向我们展示对该图像的各种预测。,202303061210352700e8773747d7bad6d5618ebd9fc136029480647,图7:Streamlit(上半部分),20230306121036f52daad365eb01546d218835b11697098540d4840,图8:Streamlit(下半部分),在图7中,我们使用滑块来选择图像ID,我们选择了图像632。而在图8中,我们可以看到穿戴单品被预测为Shirt(衬衫),而实际上却是Pullover(套头衫)。如您所见,图7中的图片看起来太大太粗糙,因此您可以按需改进对灰度图像的渲染。,在本文中,我们讨论了SingleStore DB如何与Keras和Tensorflow一起协同工作。在SingleStore DB中,我们既可以存储测试和训练数据,又能够预测各种模型。最后,我们通过一个Streamlit应用展示了如何查看对于图像的预测。,陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验;持续以博文、专题和译文等形式,分享前沿技术与新知;经常以线上、线下等方式,开展信息安全类培训与授课。,原文标题:Image Classification Using SingleStore DB, Keras, and Tensorflow​,作者:Akmal Chaudhri

© 版权声明

相关文章