使用机器学习对图片进行分类
来源:51CTO.COM
时间:2023-04-15 08:01:07 302浏览 收藏
知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个科技周边开发实战,手把手教大家学习《使用机器学习对图片进行分类》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!
服装数据集
服装数据集和MNIST数据集很像,有需要的可以查看教程《MNIST数据集》,包含70000个灰度图,每个图片28 x 28像素。
时装数据集
在这里将使用60000张图片进行训练,使用10000张图片进行评估,可以直接使用Keras进行加载。
fashion_mnist = tf.keras.datasets.fashion_mnist(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
所有的图片可分为10个种类:
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
数据预处理:
在将数据送入到神经网络训练之前,需要对数据进行预处理,查看一张训练的图片,像素值的分布范围为[0, 255]
鞋子
对数据进行归一化处理:
train_images = train_images / 255.0test_images = test_images / 255.0
为了验证数据的正确性,展示前25张图片以及图片的分类:
服装
建立模型
神经网络基础模块就是层(Layer),层会从传递的数据中提取特征,这些特征对问题的解决很有帮助。
很多深度学习都是由一系列简单的层串联而成,大部分的层比如Dense,在训练过程中有可学习的参数。
model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10)])
Flatten层将二维(28 x 28)的图片转化为一维的数组,这一层没有参数可以学习,仅仅只是格式化数据。
第一个Dense层有128个节点或者说神经元,第二个Dense层返回长度为10的数组,每个节点包含当前图片属于哪个分类的得分。
模型编译
模型需要进行三个设置:
- 损失函数 - 这个主要用于评估模型在训练过程中的准确性
- 优化器 - 模型如何更新
- 量度 - 用于监测训练和测试步骤
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
填入训练数据:
model.fit(train_images, train_labels, epochs=10)
评估模型的正确性:
test_loss, test_acc = model.evaluate(test_images,test_labels, verbose=2)print('Test accuracy:', test_acc)
显示结果:
Test accuracy: 0.8835999965667725
训练过程输出:
1875/1875 [==============================] - 1s 523us/step - loss: 0.2379 - accuracy: 0.9110
可以看到测试数据的正确性是要略低于训练数据的正确性的,这个训练和测试的差距叫做overfitting(过拟合),过拟合发生在机器学习模型对于没有处理过的数据表现更差。
预测
模型训练之后,你可以使用它来对一些图片进行预测,添加一个Softmax层将结果转换为置信度,它更容易被理解
predictions = probability_model.predict(test_images)print(predictions[0])
可以看到第0张测试图片属于每个分类的置信度:
[4.7003473e-07 2.8711662e-09 1.8403462e-08 3.7643213e-09 2.0236126e-08 8.2177273e-04 1.0194674e-06 9.5114678e-02 2.8414237e-07 9.0406173e-01]
第9个数据的置信度最高,通过打印图片的标签也是9,说明预测正确。
随机选择一些图片输出:
置信度分布
第13张图片81%的可能性是凉鞋,说明机器学习预测错误,它应该是跑鞋。
也可以对单张图片进行预测,虽然是单张图片,但是Keras仍然需要数组进行传递,将图片添加到集合中。
img = (np.expand_dims(img, 0))
进行预测:
predictions_single = probability_model.predict(img)
总结
以上就是建立神经网络的简单过程,分为数据处理、模型的训练、预测等几个步骤。
今天带大家了解了的相关知识,希望对你有所帮助;关于科技周边的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
489 收藏
-
257 收藏
-
196 收藏
-
337 收藏
-
464 收藏
-
415 收藏
-
140 收藏
-
282 收藏
-
125 收藏
-
414 收藏
-
356 收藏
-
462 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 511次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 498次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习