【小白学PyTorch】15 TF2实现一个简单的服装分类任务
【新闻】:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测、医学图像、时间序列等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会。微信:cyx645016617.
参考目录:
0 为什么学TF
之前的15节课的pytorch的学习,应该是让不少朋友对PyTorch有了一个全面而深刻的认识了吧 (如果你认真跑代码了并且认真看文章了的话) 。
大家都会比较Tensorflow2和pytorch之间孰优孰劣,但是我们也并不是非要二者选一,两者都是深度学习的工具,其实我们或多或少应该了解一些比较好。 就好比,PyTorch是冲锋枪,TensorFlow是步枪,在上战场前,我们可以选择带上冲锋枪还是步枪,但是在战场上,可能手中的枪支没有子弹了,你只能在地上随便捡了一把枪。 很多时候,用Pytorch还是Tensorflow的选择权不在自己。
此外,了解了TensorFlow,大家才能更好的理解PyTorch和TF究竟有什么区别。我见过有的大佬是TF和PyTorch一起用在一个项目中,数据读取用PyTorch然后模型用TF构建。
总之,大家有时间有精力的话,顺便学学TF也不亏,更何况TF2.0现在已经优化了很多。本系列预计用3节课来简单的入门一下Tensorflow2.
和PyTorch的第一课一样,我们直接做一个简单的小实战。MNIST手写数字分类,Fashion MNIST时尚服装分类。
1 Tensorflow的安装
安装TensorFlow的方法很简单,就是在控制台执行:
pip install tensorflow --user
这里的--user
是赋予这个命令执行权限的,一般我都会带上。
2 数据集构建
# keras是TF的高级API,用起来更加的方便,一般也是用keras。
import tensorflow as tf
from tensorflow import keras
import numpy as np
导入需要用到的库函数. 正如torchvision.datasets
中一样,keras.datasets
中也封装了一些常用的数据集。
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
print('train_images shape:',train_images.shape)
print('train_labels shape:',train_labels.shape)
print('test_images shape:',test_images.shape)
print('test_labels shape:',test_labels.shape)
输出结果是:
训练数据集中有60000个样本,每一个样本和MNIST手写数字大小是一样的,是\(28\times 28\)大小的,然后每一个样本有一个标签,这个标签和MNIST也是一样的,是从0到9,是一个十分类任务。
来看一下这些类别有哪些:
标签 | 类别 | 标签 | 类别 |
---|---|---|---|
0 | T-shirt | 5 | Sandal |
1 | Trouser | 6 | Shirt |
2 | Pullover | 7 | Sneaker |
3 | Dress | 8 | Bag |
4 | Coat | 9 | Ankle boot |
这里学学单词吧:
- T-shirt就是T型的衬衫,就是短袖,我感觉前面没有扣子的那种也叫T-shirt;
- Shirt就是长袖的那种衬衫;
- Trouser是裤子;
- pullover是毛衣,套头毛衣,就是常说的卫衣吧感觉;
- dress连衣裙;
- coat是外套;
- sandal是凉鞋;
- sneaker是运动鞋;
- ankle boot是短靴,是到脚踝的那种靴子;
- 这里补充一个吧,sweater,是毛线衣,运动衫,这个和pullover有些类似,个人感觉主要的区分在于运动系列的可以叫做sweater,其他的毛衣卫衣是pullover。
运动短袖T-shirt+运动卫衣sweater是我秋天去健身房的穿搭。
2 预处理
这里不做图像增强之类的了,上面的数据中,图像像素值是从0到255的,我们要把这些标准化成0到1的范围。
train_images = train_images / 255.0
test_images = test_images / 255.0
3 构建模型
# 模型搭建
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
这就是一个用keras构建简单模型的例子:
keras.layers.Flatten
是把\(28\times 28\)的二维度拉平成一个维度,因为这里是直接用全连接层而不是卷积层进行处理的;- 后面跟上两个全连接层
keras.layers.Dense()
就行了。我们可以发现,这个全连接层的参数和PyTorch是有一些区别的:- PyTorch的全连接层需要一个输入神经元数量和输出数量
torch.nn.Linear(5,10)
,而keras中的Dense是不需要输入参数的keras.layers.Dense(10)
; - keras中的激活层直接封装在了Dense函数里面,所以不需要像PyTorch一样单独写一个
nn.ReLU()
了。
- PyTorch的全连接层需要一个输入神经元数量和输出数量
4 优化器
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
定义优化器和损失函数,在keras中叫做对模型进行编译compile(在C语言中,在运行代码之前都需要对代码进行编译嘛)。损失函数和优化器还有metric衡量指标的设置都在模型的编译函数中设置完成。
上面使用Adam作为优化器,然后损失函数用了交叉熵,然后衡量模型性能的使用了准确率Accuracy。
5 训练与预测
model.fit(train_images, train_labels, epochs=10)
这就是训练过程,相比PyTorch而言,更加的简单简洁,但是不像PyTorch那样灵活。
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('\nTest accuracy:', test_acc)
这个.evaluate
方法是对模型的验证集进行验证的,因为本次任务中并没有对训练数据再划分出验证集,所以这里直接使用测试数据了。
大家应该能理解训练集、验证集和测试集的用途和区别吧,我在第二课讲过这个内容,在此不多加赘述。
predictions = model.predict(test_images)
这个.predict
方法才是用在测试集上,进行未知标签样本的类别推理的。
本次内容到此为止,大家应该对keras和tensorflow有一个直观浅显的认识了。当然tensorflow也有一套类似于PyTorch中的dataset,dataloader的那样自定义的数据集加载器的方法,在后续内容中会深入浅出的学一下。
【小白学PyTorch】15 TF2实现一个简单的服装分类任务的更多相关文章
- 【小白学PyTorch】1 搭建一个超简单的网络
文章目录: 目录 1 任务 2 实现思路 3 实现过程 3.1 引入必要库 3.2 创建训练集 3.3 搭建网络 3.4 设置优化器 3.5 训练网络 3.6 测试 1 任务 首先说下我们要搭建的网络 ...
- 【小白学PyTorch】20 TF2的eager模式与求导
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx64501661 ...
- 学习用node.js建立一个简单的web服务器
一.建立简单的Web服务器涉及到Node.js的一些基本知识点: 1.请求模块 在Node.js中,系统提供了许多有用的模块(当然你也可以用JavaScript编写自己的模块,以后的章节我们将详细讲解 ...
- 【小白学PyTorch】10 pytorch常见运算详解
参考目录: 目录 1 矩阵与标量 2 哈达玛积 3 矩阵乘法 4 幂与开方 5 对数运算 6 近似值运算 7 剪裁运算 这一课主要是讲解PyTorch中的一些运算,加减乘除这些,当然还有矩阵的乘法这些 ...
- 【小白学PyTorch】21 Keras的API详解(上)卷积、激活、初始化、正则
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑答疑解惑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx6450 ...
- 【小白学PyTorch】18 TF2构建自定义模型
[机器学习炼丹术]的炼丹总群已经快满了,要加入的快联系炼丹兄WX:cyx645016617 参考目录: 目录 1 创建自定义网络层 2 创建一个完整的CNN 2.1 keras.Model vs ke ...
- 【小白学PyTorch】16 TF2读取图片的方法
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.NLP等多个学术交流分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx645016617. 参考 ...
- 【小白学PyTorch】19 TF2模型的存储与载入
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx64501661 ...
- 【小白学PyTorch】5 torchvision预训练模型与数据集全览
文章来自:微信公众号[机器学习炼丹术].一个ai专业研究生的个人学习分享公众号 文章目录: 目录 torchvision 1 torchvision.datssets 2 torchvision.mo ...
随机推荐
- v-html渲染富文本图片宽高问题
v-html渲染富文本v-html是用来渲染html的节点及字符串的,但是渲染后富文本里的图片宽高会溢出所在div的区域但是使用css直接给img是没有办法设置img的宽高的,需要使用深层级来给img ...
- 面试中的这些点,你get了吗?
一.前言 因为疫情的原因,小农从七月份开始找工作,到现在已经工作了一个多月了,刚开始找工作的时候,小农也担心出去面试技能不够,要懂的东西很多,自己也准备可能会面试一段时间,从找工作到入职花了十几天,总 ...
- 关于Chrome浏览器自动同步的问题
Chrome浏览器是开发者最喜欢的浏览器,没有之一,那么公司办公和在家办公的话数据需要有一致性,这个时候就用到了浏览器的自动同步的功能 因为网络的问题,谷歌账户很难登录,基本需要VPN翻墙处理之后才能 ...
- 基于JSP+Servlet的学生信息管理系统
JavaWeb期末项目,一个基于JSP和Servlet的学生信息管理系统实现,前端用了bootstrap和一些自定义的css样式,数据库用了mysql 传送门: GitHub 实现功能 登录(教师, ...
- 总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇
本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...
- Python淘宝商品比价定向爬虫
1.项目基本信息 目标: 获取淘宝搜索页面的信息,提取其中的商品名称和价格理解: 淘宝的搜索接口.翻页的处理 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道 ...
- android Studio(3.2.1) NDK配置
1.创建as工程 2. 创建class类 3. 生成头文件 3.1 配置命令工具 添加工具: 配置工具: Program: $JDKPath$\bin\javah.exe Arugments:-d j ...
- vmware-workstation迁移虚拟机 15pro到12版本
最近将测试的几台虚拟机进行了迁移,有几个点要注意,分享一下 1.环境介绍: 源服务器-ip-172.16.96.x 目标服务器-ip-172.16.96.x VMware版本-VMwareworkst ...
- redis在windows下安装教程
安装过程 1.首先先把下载的压缩包解压到一个文件夹中2.打开cmd指令窗口3.输入你刚才解压的文件路径4.然后输入redis-server redis.windows.conf 命令接下来部署Redi ...
- springboot x.x.x RELEASE pom 第一行报错解决办法
springboot x.x.x RELEASE pom 第一行报错解决办法 在pom.xml 文件的properties中加入maven jar插件的版本号 <properties> & ...