Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【完结】TensorFlow2.0 快速上手手册

【完结】TensorFlow2.0 快速上手手册

作者头像
用户1508658
发布于 2019-07-25 02:35:26
发布于 2019-07-25 02:35:26
3.9K0
举报
文章被收录于专栏:有三AI有三AI

1 默认动态图机制

在tensorflow2.0中,动态图是默认的不需要自己主动启用它。

import tensorflow as tf a = tf.constant([1,2,3]) b = tf.constant([4,5,6]) print(a+b)

上面的结果是tf.Tensor([5 7 9], shape=(3,), dtype=int32)

可以说有了动态图,计算是非常方便的了,再也不需要理解复杂的graph和Session了。

另外我们在对比看下Pytorch中是如何计算上面的结果的。

import torch

a = torch.Tensor([1,2,3])

b = torch.Tensor([4,5,6])

print(a+b)

可以发现TensorFlow2.0和Pytorch一样简单了,而且代码基本一样。

2 弃用collections

我们知道在TensorFlow1.X中可以通过集合 (collection) 来管理不同类别的资源。例如使用tf.add_to_collection 函数可以将资源加入一个或多个集合。使用tf.get_collection获取一个集合里面的所有资源。这些资源可以是张量、变量或者运行 Tensorflow程序所需要的资源。我们在训练神经网络时会大量使用集合管理技术。如通过tf.add_n(tf.get_collection("losses")获得总损失。

由于collection控制变量很不友好,在TensorFlow2.0中,弃用了collections,这样代码会更加清晰。

我们知道TensorFlow2.0非常依赖Keras API,因此如果你使用tf.keras,每个层都会处理自己的变量,当你需要获取可训练变量的列表,可直接查询每个层。

from tensorflow import keras from tensorflow.keras import Sequential model = Sequential([ keras.layers.Dense(100,activation="relu",input_shape=[2]), keras.layers.Dense(100,activation="relu"), keras.layers.Dense(1) ])

我们通过model.weights,就可以查询每一层的可训练的变量。结果如下面这种形式。

<tf.Variable'dense/kernel:0' shape=(2,100)

dtype=float32, numpy=array([[...]]), dtype=float32)>,

另外在TensorFlow2.0中,也删除了Variable_scopes和tf.get_variable(),需要用面向对象的方式来处理变量共享。

3 删除杂乱的API,重用Keras

之前TensorFlow1.X中包含了很多重复的API或者不推荐使用的 API,杂乱无章,例如可以使用 tf.layers或tf.keras.layers创建图层,这样会造成很多重复和混乱的代码。

如今TensorFlow 2.0正在摆脱tf.layers,重用Keras 层,可以说如果你使用TensorFlow2.0,那么使用Keras构建深度学习模型是你的不二选择。

详细介绍请看文后第二篇文章《以后我们再也离不开Kera了》。

另外tf.contrib的各种项目也已经被合并到Keras等核心API 中,或者移动到单独的项目中,还有一些将被删除。

可以说TensorFlow 2.0会更好地组织API,使编码更简洁。

4 学习TensorFlow2.0的建议

不管你是AI小白,还是已经学习很久的大神,对于TensorFlow2.0,我们或许都需要重新学,因为它的变化太多了。当你学习TensorFlow2.0时,有如下建议供你参考:

首先不要上来就是import tensorflow as tf。其实没有必要,我建议大家先把数据预处理先学会了。比如数据你怎么read,怎么数据增强。

这个可以查看文后第三篇文章《数据读取与使用方式》。

这篇文章介绍了Tensorflow2.0读取数据的二种方式,分别是Keras API和Dataset类对数据预处理。

另外对于数据导入方式,最好使用Dataset类,个人认为这个比较方便。一个简单的例子如下:

import tensorflow as tf import tensorflow_datasets as tfds dataset, metadata = tfds.load('fashion_mnist', as_supervised=True, with_info=True) train_dataset, test_dataset = dataset['train'], dataset['test'] train_dataset = train_dataset.shuffle(100).batch(12).repeat() for img, label in train_dataset.take(1): img = img.numpy() print(img.shape) print(img)

从上面的代码我们可以看出在2.0中导入数据没有make_one_shot_iter() 这样的方法了。这个方法已经被弃用了,直接用 take(1)。

当你学会了读取数据和数据增强后,你就需要学会如何使用TensorFlow2.0构建网络模型,在TensorFlow2.0中搭建网络模型主要使用的就是Keras高级API。

如果你想要学会这个本领,可以参考文后的第四篇文章《如何搭建网络模型》。

在这篇文章我们详细介绍了如何使用Keras API搭建线性模型VGG16和非线性模型Resnet。如果你是AI小白,想要更好的掌握TensorFlow2.0,建议你使用TensorFlow2.0完成搭建VGG、GoogLeNet、Resnet等模型,这样对你掌握深度学习框架和网络结构更有帮助。

当你完成了数据读取和模型搭建后,现在你需要做的就是训练模型和可视化了。一个简单的示例如下:

import tensorflow as tf from tensorflow.keras.callbacks import TensorBoard from tensorflow.keras.optimizers import SGD from tensorflow.keras.preprocessing.image import ImageDataGenerator model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(12, (3,3), activation='relu', input_shape=(48, 48, 3),strides=(2, 2), padding='same'), tf.keras.layers.BatchNormalization(axis=3), tf.keras.layers.Conv2D(24, (3,3), activation='relu',strides=(2, 2), padding='same'), tf.keras.layers.BatchNormalization(axis=3), tf.keras.layers.Conv2D(48, (3,3), activation='relu',strides=(2, 2), padding='same'), tf.keras.layers.BatchNormalization(axis=3), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') ]) model.compile(loss='binary_crossentropy', optimizer = SGD(lr=0.001, decay=1e-6, momentum=0.9), metrics=['acc']) train_datagen = ImageDataGenerator(rescale=1/255, shear_range=0.2,zoom_range=0.2, horizontal_flip=True) validation_datagen = ImageDataGenerator(rescale=1/255) train_generator = train_datagen.flow_from_directory( r"D://Learning//tensorflow_2.0//data//train", # 训练集的根目录 target_size=(48, 48), # 所有图像的分辨率将被调整为48x48 batch_size=32, # 每次读取32个图像 # 类别模式设为二分类 class_mode='binary') # 对验证集做同样的操作 validation_generator = validation_datagen.flow_from_directory( r"D://Learning//tensorflow_2.0//data//val", target_size=(48, 48), batch_size=16, class_mode='binary') history = model.fit_generator( train_generator, steps_per_epoch=28, epochs=500, verbose=1, validation_data = validation_generator, callbacks=[TensorBoard(log_dir=(r"D:\Learning\logs"))], validation_steps=6)

上面简单示例的数据集是我们框架系列文章一直所用的表情二分类数据集。从上面的代码我们可以看出从数据读取到模型定义再到训练和可视化基本用的都是Keras 高级API,这里不再赘述。需要下载数据集的请移步github

acc和loss可视化结果如下两图,可以看出效果还是比较可以的,上面的代码已经同步到有三AI的GitHub项目,如下第一个。

5 TensorFlow2.0优秀的github

1、https://github.com/tangxingwang/yousan.ai

1、https://github.com/czy36mengfei/tensorflow2_tutorials_chinese

3、https://github.com/jinfagang/yolov3_tf2

总结

本期我们总结了TensorFlow2.0的变化及使用方法,而且还介绍了学习它的方法和一些比较好的Github。希望您尽快能掌握它!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有三AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Tensorflow2.0
tf.test.is_gpu_available() # 判断gpu可用与否 ``` 2. 从镜像配置 ```shell # 云端的系统镜像直接有开发环境 # 升级tensorflow 版本 pip install --upgrade tensorflow-gpu==2.0.0 pip3 install --upgrade tensorflow-gpu==2.0.0 ```
Dean0731
2020/05/25
1.7K0
Tensorflow2.0
MOOC TensorFlow入门实操课程代码回顾总结(一)
0 T-shirt/top(体恤) 1 Trouser(裤子) 2 Pullover(套头衫) 3 Dress(连衣裙) 4 Coat(外套) 5 Sandal(凉鞋) 6 Shirt(衬衫) 7 Sneaker(运动鞋) 8 Bag(袋子) 9 Ankle boot(短靴)
荣仔_最靓的仔
2022/01/05
7400
MOOC TensorFlow入门实操课程代码回顾总结(一)
在TensorFlow 2中实现完全卷积网络(FCN)
卷积神经网络(CNN)非常适合计算机视觉任务。使用对大型图像集(如ImageNet,COCO等)进行训练的预训练模型,可以快速使这些体系结构专业化,以适合独特数据集。此过程称为迁移学习。但是有一个陷阱!用于图像分类和对象检测任务的预训练模型通常在固定的输入图像尺寸上训练。这些通常从224x224x3到某个范围变化,512x512x3并且大多数具有1的长宽比,即图像的宽度和高度相等。如果它们不相等,则将图像调整为相等的高度和宽度。
代码医生工作室
2020/01/17
5.3K0
在TensorFlow 2中实现完全卷积网络(FCN)
使用深度学习和OpenCV的早期火灾探测系统
嵌入式处理技术的最新发展已使基于视觉的系统可以在监视过程中使用卷积神经网络检测火灾。在本文中,已经实现了两个定制的CNN模型,以实现用于监视视频的具有成本效益的火灾探测CNN体系结构。第一个模型是受AlexNet架构启发的定制的基本CNN架构。将实现并查看其输出和限制,并创建一个定制的InceptionV3模型。为了平衡效率和准确性,考虑目标问题和火灾数据的性质对模型进行了微调。将使用三个不同的数据集来训练模型。数据集的链接在本文结尾处可用。进入编码部分。
代码医生工作室
2020/07/09
1.2K0
使用深度学习和OpenCV的早期火灾探测系统
从零开始构建:使用CNN和TensorFlow进行人脸特征检测
人脸检测系统在当今世界中具有巨大的用途,这个系统要求安全性,可访问性和趣味性!今天,我们将建立一个可以在脸上绘制15个关键点的模型。
deephub
2020/05/09
1.1K0
从零开始构建:使用CNN和TensorFlow进行人脸特征检测
【TensorFlow2.0】以后我们再也离不开Keras了?
在TensorFlow2.0中,Keras是一个用于构建和训练深度学习模型的高阶 API。因此如果你正在使用TensorFow2.0,那么使用Keras构建深度学习模型是您的不二选择。在Keras API中总共有如下三大块:
用户1508658
2019/07/28
1.3K0
TensorFlow 基础学习 - 4 (重点是调参)
简而言之:训练集就是用来告诉神经网络模型"这就是马的样子"、"这就是人的样子"等数据。
叉叉敌
2021/12/06
7790
TensorFlow 基础学习 - 4 (重点是调参)
一文上手Tensorflow2.0之tf.keras|三
【磐创AI导读】:本系列文章介绍了与tensorflow的相关知识,包括其介绍、安装及使用等。本篇文章将接着上篇文章继续介绍它的使用。查看上篇:一文上手最新TensorFlow2.0系列(二)。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2019/08/23
1.7K0
MOOC TensorFlow入门实操课程代码回顾总结(二)
欢迎来到TensorFlow入门实操课程的学习 MOOC TensorFlow入门实操课程代码回顾总结(一) MOOC TensorFlow入门实操课程代码回顾总结(三) 注: 用于表示python代码 粘贴运行结果 目录 5 图像分类基础应用——猫狗分类案例 5.1 导入库 5.2 下载数据集 5.3 查看样本数目 5.4 创建文件夹,存放训练测试数据 5.5 切分为训练数据和测试数据 5.6 模型构建 5.7 数据预处理 5.8 模型训练 5.9 训练结果可视化 5.10 模型推理 6 迁移学
荣仔_最靓的仔
2022/01/05
5550
MOOC TensorFlow入门实操课程代码回顾总结(二)
AI识万物:从0搭建和部署手语识别系统 ⛵
据北京听力协会预估数据,我国听障人群数量已过千万。而在全球范围内有4.66亿人患有残疾性听力损失,约占全世界人口的5%。聋哑人士很特殊,他们需要使用手语进行交流,其他与常人无异,我国存在特殊教育水平在各城市中发展力度具有较大差异,国家通用手语推广程度浅,但不懂手语,与听力障碍者交流会非常困难。
ShowMeAI
2022/08/09
1.1K0
AI识万物:从0搭建和部署手语识别系统 ⛵
TensorFlow2.0 实战强化专栏(二):CIFAR-10项目
Alex Krizhevsky,Vinod Nair和Geoffrey Hinton收集了8000万个小尺寸图像数据集,CIFAR-10和CIFAR-100分别是这个数据集的一个子集(http://www.cs.toronto.edu/~kriz/cifar.html)。CIFAR-10数据集由10个类别共60000张彩色图片组成,其中每张图片的大小为32X32,每个类别分别6000张。
磐创AI
2020/03/04
1.1K0
【TensorFlow2.0】如何搭建网络模型?
我们知道在不考虑输入层的情况下,一个典型的卷积神经网络通常由若干个卷积层、激活层、池化层及全连接层组成,无论是最经典的LeNet5,还是前两天刚出现的MobileNet V3,无一不都包含这些层。今天就带大家学习下如何使用TensorFlow2.0搭建卷积神经网络模型。
用户1508658
2019/07/23
1.2K0
Tensorflow2——卷积神经网络的搭建
***** 以下有关代码全是在jupyter notebook 里面调试完后曾,如果直接复制粘贴到pycharm可能不太行,自己得改改
Albert_xiong
2021/06/21
1.3K0
Tensorflow2——卷积神经网络的搭建
TensorFlow 2.0入门
谷歌于2019年3月6日和7日在其年度TensorFlow开发者峰会上发布了最新版本的TensorFlow机器学习框架。这一新版本使用TensorFlow的方式进行了重大改进。TensorFlow拥有最大的开发者社区之一,从机器学习库到完善的机器学习生态系统已经走过了漫长的道路。
代码医生工作室
2019/06/21
1.9K0
TensorFlow 2.0入门
用AI训练AI:制作一个简单的猫狗识别模型
这是腾讯云加社区共创官的选题互换挑战赛,一搭眼看到了这个题目,因为之前写过 自己制作数据集并训练,这无非是换个数据源进行训练而已,于是果断选择了这个题目
yichen
2024/03/23
1.4K2
用AI训练AI:制作一个简单的猫狗识别模型
Fast-SCNN的解释以及使用Tensorflow 2.0的实现
Fast Segmentation Convolutional Neural Network (Fast- scnn)是一种针对高分辨率图像数据的实时语义分割模型,适用于低内存嵌入式设备上的高效计算。原论文的作者是:Rudra PK Poudel, Stephan Liwicki and Roberto Cipolla。本文中使用的代码并不是作者的正式实现,而是我对论文中描述的模型的重构的尝试。
智能算法
2020/08/20
9610
Fast-SCNN的解释以及使用Tensorflow 2.0的实现
【TensorFlow2.0】数据读取与使用方式
大家好,这是专栏《TensorFlow2.0》的第三篇文章,讲述如何使用TensorFlow2.0读取和使用自己的数据集。
用户1508658
2019/07/28
4.6K1
深度学习实战-CNN猫狗识别
本文记录了第一个基于卷积神经网络在图像识别领域的应用:猫狗图像识别。主要内容包含:
皮大大
2023/08/23
7370
【Keras速成】Keras图像分类从模型自定义到测试
这一次我们讲讲keras这个简单、流行的深度学习框架,一个图像分类任务从训练到测试出结果的全流程。
用户1508658
2019/07/25
1.1K0
【Keras速成】Keras图像分类从模型自定义到测试
tensorflow2.2_实现Resnet34_花的识别[通俗易懂]
    Resnet是由许多残差块组成的,而残差块可以解决网络越深,效果越差的问题。     残差块的结构如下图所示。
全栈程序员站长
2022/11/10
6380
tensorflow2.2_实现Resnet34_花的识别[通俗易懂]
推荐阅读
相关推荐
Tensorflow2.0
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档