本文地址:https://www.cnblogs.com/tujia/p/13862364.html

系列文章:

【0】TensorFlow光速入门-序

【1】TensorFlow光速入门-tensorflow开发基本流程

【2】TensorFlow光速入门-数据预处理(得到数据集)

【3】TensorFlow光速入门-训练及评估

【4】TensorFlow光速入门-保存模型及加载模型并使用

【5】TensorFlow光速入门-图片分类完整代码

【6】TensorFlow光速入门-python模型转换为tfjs模型并使用

【7】TensorFlow光速入门-总结

一、完整代码

import pathlib
import random
import tensorflow as tf
from tensorflow import keras
import numpy as np
import IPython.display as display
import matplotlib.pyplot as plt # 读取文件夹图片数据
data_path = '/tf/datasets/wnw'
all_image_paths = []
all_image_labels = []
label_names = []
data_root = pathlib.Path(data_path)
i = 0
for item in data_root.iterdir():
label_names.append(item.name)
for image in item.iterdir():
all_image_paths.append(str(image))
all_image_labels.append(i)
i = i + 1
print(label_names)
print(len(all_image_paths))
print(len(all_image_labels)) # 抽样检查
image_count = len(all_image_paths)
for x in range(5):
i = random.randint(0, image_count-1);
image_path = all_image_paths[i]
display.display(display.Image(image_path, width=100, height=100))
print(label_names[all_image_labels[i]]) # 图片 转 tensor3D 格式
def load_and_preprocess_image(path):
# 文件 转 tensor
image = tf.io.read_file(path)
# 普通 tensor 转 图片tensor,channels 为颜色通道,1表示灰图
image = tf.image.decode_jpeg(image, channels=1)
# 缩放图片尺寸为 100*100
image = tf.image.resize(image, [100, 100])
# 颜色的数值范围是0-255,所以 image/255,进一步将图片tensor数据数值范围缩到 0-1
image /= 255
return image # 批量处理图片
path_ds = tf.data.Dataset.from_tensor_slices(all_image_paths)
image_ds = path_ds.map(load_and_preprocess_image, num_parallel_calls=tf.data.experimental.AUTOTUNE) # 抽样检查
for i, image in enumerate(image_ds.take(5)):
plt.imshow(image.numpy().squeeze(), cmap=plt.cm.gray_r)
plt.grid(False)
plt.xlabel(label_names[all_image_labels[i]])
plt.show() # label 数据集
label_ds = tf.data.Dataset.from_tensor_slices(tf.cast(all_image_labels, tf.int64)) # 打包图片及其label
image_label_ds = tf.data.Dataset.zip((image_ds, label_ds)) # 打乱数据
image_count = len(all_image_paths)
ds = image_label_ds.shuffle(buffer_size=image_count)
ds = ds.repeat()
ds = ds.batch(32)
ds = ds.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
print(ds) # 模型初始化(配置神经网络层)
model = keras.Sequential([
# 展平数据,输入类型要和数据集保持一致,我这里是100*100的灰图
keras.layers.Flatten(input_shape=(100, 100, 1)),
# 第二层是神经元
keras.layers.Dense(128, activation='relu'),
# 第三层的参数很重要,2表示分两类,如果要分5类就传5,10类就传10
keras.layers.Dense(2, activation='softmax')
]) # 优化器、损失函数及指标
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']) # 训练 100 次
model.fit(ds, epochs=100, steps_per_epoch=10) # 评估
test_loss, test_acc = model.evaluate(ds, verbose=2, steps=10) # 预测
predictions = model.predict(ds, steps=10)
label = np.argmax(predictions[0])
print(label_names[label]) # 保存模型
model.save('/tf/saved_model/wnw')

二、jupyter 笔记本

附件下载: wnw.ipynb

解压缩后,上传 wnw.ipynb 到 tensorflow-tutorials 目录就行了

参考【2】TensorFlow光速入门-数据预处理(得到数据集) 准备好图片数据后,直接运行 wnw.ipynb 就行了

注:图片数据需为jpg格式,不能用png或gif格式的,否则会报错~~

下一节,我们来看一下训练好的模型如果在 web 项目中应用:

【6】TensorFlow光速入门-python模型转换为tfjs模型并使用

本文链接:https://www.cnblogs.com/tujia/p/13862364.html


完。

【5】TensorFlow光速入门-图片分类完整代码的更多相关文章

  1. 【6】TensorFlow光速入门-python模型转换为tfjs模型并使用

    本文地址:https://www.cnblogs.com/tujia/p/13862365.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  2. 【0】TensorFlow光速入门-序

    本文地址:https://www.cnblogs.com/tujia/p/13863181.html 序言: 对于我这么一个技术渣渣来说,想学习TensorFlow机器学习,实在是太难了: 百度&qu ...

  3. 【1】TensorFlow光速入门-tensorflow开发基本流程

    本文地址:https://www.cnblogs.com/tujia/p/13862339.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  4. 【2】TensorFlow光速入门-数据预处理(得到数据集)

    本文地址:https://www.cnblogs.com/tujia/p/13862351.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  5. 【3】TensorFlow光速入门-训练及评估

    本文地址:https://www.cnblogs.com/tujia/p/13862357.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  6. 【4】TensorFlow光速入门-保存模型及加载模型并使用

    本文地址:https://www.cnblogs.com/tujia/p/13862360.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  7. 第二十二节,TensorFlow中的图片分类模型库slim的使用、数据集处理

    Google在TensorFlow1.0,之后推出了一个叫slim的库,TF-slim是TensorFlow的一个新的轻量级的高级API接口.这个模块是在16年新推出的,其主要目的是来做所谓的“代码瘦 ...

  8. 【搜索引擎Jediael开发4】V0.01完整代码 分类: H_HISTORY 2014-05-21 21:35 470人阅读 评论(0) 收藏

    截止目前,已完成如下功能: 1.指定某个地址,使用HttpClient下载该网页至本地文件 2.使用HtmlParser解释第1步下载的网页,抽取其中包含的链接信息 3.下载第2步的所有链接指向的网页 ...

  9. 写给程序员的机器学习入门 (八) - 卷积神经网络 (CNN) - 图片分类和验证码识别

    这一篇将会介绍卷积神经网络 (CNN),CNN 模型非常适合用来进行图片相关的学习,例如图片分类和验证码识别,也可以配合其他模型实现 OCR. 使用 Python 处理图片 在具体介绍 CNN 之前, ...

随机推荐

  1. shiro-重写标签功能----shiro:hasPermission 标签重写

    public abstract class ShiroAuthorizingRealm extends AuthorizingRealm{ private static final String OR ...

  2. Python-序列切片原理和切片协议-[start:end:step] __getitem__

    切片原理图(顾头不顾尾的正则原理) # [0:1] 其实只取到C, 取e则 [-1:], 如果步长为负数则倒过来取,从第几个往回取 name = "ChuiXue" print(n ...

  3. Oracle 11G RAC11.2.0.4 + Redhat7.3安装手册

    安装思路: 1.安装两台redhat7 linux系统 2.网络配置(双网卡,public,vip,private,scan) 3.存储配置(内存配置,ASM共享存储:6块5G共享盘udev,根目录留 ...

  4. 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.安装目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...

  5. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  6. VS2015建立一个完整的c++工程:头文件.h 源文件.cpp,自动生成类

    https://blog.csdn.net/weixin_40539125/article/details/81430801 打开VS2015 ,新建VS win32工程,前面步骤很简单,不再阐述 下 ...

  7. Gearman实战第一弹:异步处理结算单

    昨天梦回jm,醒来之后看着窗外万里晴空,想大声喊一句:爷青回! 我想起之前使用gearman的岁月.不知不觉也过了快5年,想总结一篇关于gearman的技术文章算是一种对青春的祭奠,再不写的话更少有p ...

  8. C#数据结构-静态链表

    对于双向链表中的节点,都包括一个向前.向后的属性器用于指向前后两个节点,对于引用类型,对象存储的是指向内存片段的内存指针,那么我们可以将其简化看作向前向后的两个指针. 现在我们将引用类型替换为值类型i ...

  9. 记录小坑-tp5 使用模型select查询

    场景: 使用模型去select查询后进行业务处理 再进行 saveAll 提示缺少更新条件 坑点:此时取出的数据结构是 query对象 { array:[ xxxx => xxx ] }: sa ...

  10. 左叶子之和(sum-of-left-leaves)

    LeetCode题目--左叶子之和(sum-of-left-leaves) 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 ...