大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我 前言: TensorFlow 是 Google 于 2015 年发布的深度学习框架,最初版本只支持符号式编程。得益于发布时间较早,以及 Google 在深度学习领域的影响力,TensorFlow 很快成为最流行的深度学习框架。目前来看,TensorFlow 和 PyTorch 框架是业界使用最为广泛的两个深度学习框架,TensorFlow 在工业界拥有完备的解决方案和用户基础, PyTorch 得益于其精简灵活的接口设计,可以快速设计调试网络模型,在学术界获得好评。 由于 TensorFlow1 接口设计频繁变动,功能设计重复冗余,符号式编程开发和调试非常困难等问题,TensorFlow 1.x 版本一度被业界诟病。2019年,Google 推出 TensorFlow 2 正式版本,将以动态图优先模式运行,从而能够避免TensorFlow 1.x 版本的诸多缺陷,已获得业界的广泛认可。 TensorFlow 2 与 Keras 之间既有联系又有区别。Keras 可以理解为一套高层 API 的设计规范,Keras 本身对这套规范有官方的实现,在 TensorFlow2 中也实现了这套规范,称为 tf.keras 模块,并且 tf.keras 将作为 TensorFlow 2 版本的唯一高层接口,避免出现接口重复冗余的问题。 首先在这里,我先说一下自己的安装环境: 详细的安装教程可参见我之前的记录:Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建 为了大家更快的入门,下面我将展示一个简单的入门案例——用TensorFlow2实现手写数字识别。对于初学者,我建议使用tf.keras的高层API接口进行实现,这样代码会更简洁,更容易上手。具体步骤如下: 训练过程以及测试结果: 对于已有一定TensorFlow基础的同学,我建议使用相对底层的方式去实现。这样代码虽然显得冗长,但是操作会更灵活,更有助于我们进行更深入的学习。具体步骤如下: 这个部分主要涉及损失函数、优化器、评价标准的选择和构建 训练过程以及测试结果: 完整代码已经上传github仓库:https://github.com/Keyird/TensorFlow2-for-beginner 最好的关系是互相成就,各位的「三连」就是【AI 菌】创作的最大动力,我们下期见!
热爱AI、热爱、热爱开源
! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、数据结构与算法、编程
等感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github
在上一个专栏【TF2.0深度学习实战——图像分类】中,我了各种经典的深度神经网络的搭建和训练过程,比如有:LeNet-5、AlexNet、VGG系列、GoogLeNet、ResNet、DenseNet等。收到了粉丝们的很多好评,表示代码非常详细,理论部分也讲解到位。在这里先感谢你们的持续关注和支持~
但是也有些初学者表示,直接上手深度学习有些困难,希望出一期 TensorFlow2 的初学者教程。所以,这个专栏我将专门TensorFlow2的学习过程,力争打造一个的轻松的TensorFlow2入门学习教程,想学习的小伙伴可以关注我的动态!文章目录
一、认识 TensorFlow
(1)TensorFlow 简介
(2)TensorFlow2 新亮相
TensorFlow 2 是一个与 TensorFlow 1.x 使用体验完全不同的框架,TensorFlow 2 不兼容 TensorFlow 1.x 的代码,同时在编程风格、函数接口设计等上也大相径庭,TensorFlow 1.x 的代码需要依赖人工的方式迁移,自动化迁移方式并不靠谱。并且Google 即将停止支持 TensorFlow 1.x,所以不建议学习 TensorFlow 1.x 版本。(3)TensorFlow 2 与 Keras 的区别
二、环境配置与搭建
三、面对初学者的快速入门
(1)导入库
import tensorflow as tf # 导入TF库 from tensorflow.keras import datasets, Sequential, layers # 导入TF子库
(2)数据集准备
(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data() # 加载数据集,返回的是两个元组,分别表示训练集和测试集 x_train, x_test = x_train / 255.0, x_test / 255.0 # 归一化,将像素值缩放到0~1
(3)模型搭建
network = Sequential([ layers.Flatten(input_shape=(28, 28)), layers.Dense(128, activation='relu'), layers.Dropout(0.2), layers.Dense(10, activation='softmax') ])
(4)模型装配与训练,并验证模型
# 模型装配 network.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 模型训练 network.fit(x_train, y_train, epochs=5) # 验证模型 network.evaluate(x_test, y_test, verbose=2)
结果分析:
对mnist数据集训练完5个epos后,模型在验证集上的分类准确度达到97.68%。四、面对进阶者的快速入门
(1)导入库
import tensorflow as tf # 导入TF库 from tensorflow.keras import datasets, layers, Model, losses, optimizers, metrics # 导入TF子库
(2)数据集准备
# 加载数据集,返回的是两个元组,分别表示训练集和测试集 (x_train, y_train), (x_test, y_test) = datasets.mnist.load_data() # 归一化,将像素值缩放到0~1 x_train = tf.convert_to_tensor(x_train, dtype=tf.float32)/255. x_test = tf.convert_to_tensor(x_test, dtype=tf.float32)/255. # 使用 tf.data 来将数据集切分为 batch个一组,并对数据集进行打乱 train_ds = tf.data.Dataset.from_tensor_slices((x_train, y_train)).shuffle(10000).batch(32) test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)
(3)使用类构建网络模型
class Network(Model): def __init__(self): super(Network, self).__init__() self.conv1 = layers.Conv2D(32, 3, activation='relu') self.flatten = layers.Flatten() self.fc1 = layers.Dense(128, activation='relu') self.fc2 = layers.Dense(10, activation='softmax') def call(self, x): x = tf.reshape(x, (-1, 28, 28, 1)) x = self.conv1(x) x = self.flatten(x) x = self.fc1(x) y = self.fc2(x) return y network = Network() # 实例化
(4)模型的装配
# 确定目标损失函数、优化器、评价标准 loss_object = losses.SparseCategoricalCrossentropy() optimizer = optimizers.Adam() # 训练集上的损失值、精确度 train_loss = metrics.Mean(name='train_loss') train_accuracy = metrics.SparseCategoricalAccuracy(name='train_accuracy') # 测试集上的损失值、精确度 test_loss = metrics.Mean(name='test_loss') test_accuracy = metrics.SparseCategoricalAccuracy(name='test_accuracy')
(5)训练与测试函数的构建
# 训练 def train_step(images, labels): with tf.GradientTape() as tape: # 建立梯度环境 predictions = network(images) # 前向计算 loss = loss_object(labels, predictions) # 计算损失 gradients = tape.gradient(loss, network.trainable_variables) # 计算网络中各个参数的梯度 optimizer.apply_gradients(zip(gradients, network.trainable_variables)) # 更新网络参数 train_loss(loss) # 计算训练损失 train_accuracy(labels, predictions) # 计算训练精确度 # 测试 def test_step(images, labels): predictions = network(images) # 前向计算 t_loss = loss_object(labels, predictions) # 计算当前轮上的损失 test_loss(t_loss) # 计算测试集上的损失 test_accuracy(labels, predictions) # 计算测试集上的准确率
(6)迭代训练并验证模型
for epoch in range(EPOCHS): # 在下一个epoch开始时,重置评估指标:所有损失值、精确度清零 train_loss.reset_states() train_accuracy.reset_states() test_loss.reset_states() test_accuracy.reset_states() # 训练 for images, labels in train_ds: train_step(images, labels) # 测试 for test_images, test_labels in test_ds: test_step(test_images, test_labels) print('Accuracy:{}'.format(test_accuracy.result())) # 打印训练结果 template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}' print(template.format(epoch+1, train_loss.result(), train_accuracy.result(), test_loss.result(), test_accuracy.result()))
结果分析:
对mnist训练集玩5个epos后,模型在训练集上的分类准确度达到99.69%,测试集上的分类准确度达到98.43%。
如果对你有帮助的话,欢迎star~
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算