0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【连载】深度学习笔记7:Tensorflow入门

人工智能实训营 2018-08-24 18:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

从前面的学习笔记中,笔者和大家一起使用了 numpy 一步一步从感知机开始到两层网络以及最后实现了深度神经网络算法搭建。而后我们又讨论了改善深度神经网络的基本方法,包括神经网络的正则化、参数优化和调参等问题。这一切工作我们都是基于numpy 完成的,没有调用任何深度学习框架。在学习深度学习的时候,一开始不让大家直接上手框架可谓良苦用心,旨在让大家能够跟笔者一样,一步一步通过 numpy 搭建神经网络的过程就是要让你能够更加深入的理解神经网络的架构、基本原理和工作机制,而不是黑箱以视之。

但学习到这个阶段,你已充分理解了神经网络的工作机制,马上就要接触更深层次的卷积神经网络(CNN)和递归神经网络(RNN),依靠纯手工去搭建这些复杂的神经网络恐怕并不现实。这时候就该深度学习框架出场了。针对深度学习,目前有很多优秀的学习框架,比如说笔者马上要讲的 Tensorflow,微软的 CNTK,伯克利视觉中心开发的 caffe,以及别具一格的 PyTorch 和友好易用的 keras,本系列深度学习笔记打算从 Tensorflow 开始,对三大主流易用的深度学习框架 TensorflowPyTorchkeras 进行学习和讲解。选择这三个框架的原因在于其简单易用、方便编程和运行速度相对较快。

作为谷歌的深度学习框架, Tensorflow 在深度学习领域可谓风头无二。其中 Tensor 可以理解为类似于 numpy 的 N 维数组,名为张量; flow 则意味着 N 维数组的流计算,而 Tensor 的数据流计算形式则为一个计算图的形式进行计算。这里重点提一下,如果大学本科期间的线性代数忘记了的话,我劝你赶紧回去翻一翻,线性代数和矩阵论是深度学习的基础,希望你能熟练掌握。


先看个简单的例子。

importtensorflowastf#Definey_hatconstant.Setto36.y_hat=tf.constant(36,name='y_hat')
#Definey.Setto39y=tf.constant(39,name='y')#Createavariableforthelossloss=tf.Variable((y-y_hat)**2,name='loss')#Wheninitisrunlater(session.run(init)),thelossvariablewillbeinitializedandreadytobecomputedinit=tf.global_variables_initializer()#Createasessionandprinttheoutputwithtf.Session()assession:
#Initializesthevariables
session.run(init)
#Printstheloss
print(session.run(loss))
9

在上述代码中,我们首先定义了两个常量,然后定义了一个 loss Tensor(变量),之后对变量进行初始化,创建计算会话,最后执行会话计算并打印结果。所以我们可以看到运行 Tensorflow 的基本机制:
创建一些尚未被执行的张量——
定义这些张量之间的运算操作——初始化这些张量——创建会话——执行会话

需要注意的一点是,创建会话后一定要执行这个会话,且看下面示例:

a=tf.constant(2)
b=tf.constant(10)
c=tf.multiply(a,b)
print(c)
Tensor("Mul:0",shape=(),dtype=int32)

在上面的示例中,我们创建了两个 TensorTensor 之间的乘积运算,但直接打印的结果却不是我们想要看到的 20. 原因则在于这里我们没有创建会话并执行,只是打印了两个张量运算之后的张量。创建会话并执行操作如下:

sess=tf.Session()
print(sess.run(c))
20

除了直接定义变量之外,我们还可以通过创建占位符变量来稍后为之赋值,然后在运行会话中传入一个 feed_dict ,示例如下:

x=tf.placeholder(tf.int64,name='x')
print(sess.run(2*x,feed_dict={x:3}))
sess.close()
6

相信你已经大致明白了基于张量运算的 Tensorflow 的底层运行机制了。总结而言就是:创建张量、初始化张量、创建会话并执行。

下面展示几个 Tensorflow 的神经网络计算的基础函数示例。

线性函数
def linear_function():  
""" Implements a linear function: Initializes W to be a random tensor of shape (4,3) Initializes X to be a random tensor of shape (3,1) Initializes b to be a random tensor of shape (4,1) Returns: result -- runs the session for Y = WX + b """ np.random.seed(1) X = tf.constant(np.random.randn(3,1), name='X') W = tf.constant(np.random.randn(4,3), name='W') b = tf.constant(np.random.randn(4,1), name='b') Y = tf.add(tf.matmul(W, X), b) # Create the session using tf.Session() and run it with sess.run(...) on the variable you want to calculate init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) result = sess.run(Y) # close the session sess.close()
return result
计算sigmoid函数
def sigmoid(z):  
""" Computes the sigmoid of z Arguments: z -- input value, scalar or vector Returns: results -- the sigmoid of z """ x = tf.placeholder(tf.float32, name='x') sigmoid = tf.sigmoid(x)
with tf.Session() as sess: result = sess.run(sigmoid, feed_dict={x: z})
return result
计算损失函数

640?wx_fmt=png

def cost(logits, labels):  
""" Computes the cost using the sigmoid cross entropy Arguments: logits -- vector containing z, output of the last linear unit (before the final sigmoid activation) labels -- vector of labels y (1 or 0) Note: What we've been calling "z" and "y" in this class are respectively called "logits" and "labels" in the TensorFlow documentation. So logits will feed into z, and labels into y. Returns: cost -- runs the session of the cost (formula (2)) """ # Create the placeholders for "logits" (z) and "labels" (y) (approx. 2 lines) z = tf.placeholder(tf.float32, name='z') y = tf.placeholder(tf.float32, name='y') # Use the loss function (approx. 1 line) cost = tf.nn.sigmoid_cross_entropy_with_logits(logits=z, labels=y) # Create a session (approx. 1 line). See method 1 above. sess = tf.Session() # Run the session (approx. 1 line). sess.run(cost, feed_dict={z: logits, y: labels}) # Close the session (approx. 1 line). See method 1 above. sess.close()
return cost
one hot 编码

640?wx_fmt=png

def one_hot_matrix(labels, C):  
""" Creates a matrix where the i-th row corresponds to the ith class number and the jth column corresponds to the jth training example. So if example j had a label i. Then entry (i,j) will be 1. Arguments: labels -- vector containing the labels C -- number of classes, the depth of the one hot dimension Returns: one_hot -- one hot matrix """ # Create a tf.constant equal to C (depth), name it 'C'. (approx. 1 line) C = tf.constant(C) # Use tf.one_hot, be careful with the axis (approx. 1 line) one_hot_matrix = tf.one_hot(labels, C, axis=0) # Create the session (approx. 1 line) sess = tf.Session() one_hot = sess.run(one_hot_matrix) # Close the session (approx. 1 line). See method 1 above. sess.close()
return one_hot
参数初始化
def ones(shape):  """
  Creates an array of ones of dimension shape
  Arguments:
  shape -- shape of the array you want to create

  Returns: 
  ones -- array containing only ones
  """
  # Create "ones" tensor using tf.ones(...). (approx. 1 line)
  ones = tf.ones(shape)  # Create the session (approx. 1 line)
  sess = tf.Session()  # Run the session to compute 'ones' (approx. 1 line)
  ones = sess.run(ones)  # Close the session (approx. 1 line). See method 1 above.
  sess.close()  
return ones

一顿操作之后,我们已经将神经网络的一些基础运算利用 Tensorflow 定义好了。在下一期笔记中,我们将学习如何使用 Tensorflow 搭建神经网络。

本文由《自兴动脑人工智能》项目部 凯文 投稿。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1820

    文章

    50324

    浏览量

    266923
  • 机器学习
    +关注

    关注

    67

    文章

    8564

    浏览量

    137217
  • 深度学习
    +关注

    关注

    73

    文章

    5607

    浏览量

    124625
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    人工智能-Python深度学习进阶与应用技术:工程师高培解读

    深度学习的工程化落地,早已不是纸上谈兵的事。从卷积神经网络到Transformer,从目标检测到大模型私有化部署,技术栈不断延伸,工程师面临的知识体系也越来越庞杂。现根据中际赛威工程师培训老师的一份
    的头像 发表于 04-21 11:01 296次阅读
    人工智能-Python<b class='flag-5'>深度</b><b class='flag-5'>学习</b>进阶与应用技术:工程师高培解读

    模拟电路入门难?掌握这7大核心电路,你也能轻松上手!

    很多电子工程师在入门模拟电路时,都会觉得它“知识点杂、电路形式多”,学起来一头雾水。其实,模拟电路的学习是有规律可循的,今天就为大家拆解7大核心模拟电路,掌握它们,你会发现模拟电路其实没那么难!一
    的头像 发表于 03-28 21:01 273次阅读
    模拟电路<b class='flag-5'>入门</b>难?掌握这<b class='flag-5'>7</b>大核心电路,你也能轻松上手!

    机器学习深度学习中需避免的 7 个常见错误与局限性

    无论你是刚入门还是已经从事人工智能模型相关工作一段时间,机器学习深度学习中都存在一些我们需要时刻关注并铭记的常见错误。如果对这些错误置之不理,日后可能会引发诸多麻烦!只要我们密切关注
    的头像 发表于 01-07 15:37 349次阅读
    机器<b class='flag-5'>学习</b>和<b class='flag-5'>深度</b><b class='flag-5'>学习</b>中需避免的 <b class='flag-5'>7</b> 个常见错误与局限性

    如何在TensorFlow Lite Micro中添加自定义操作符(1)

    相信大家在部署嵌入式端的AI应用时,一定使用过TensorFlow Lite Micro,以下简称TFLm。TFLm 是专为微控制器和嵌入式设备设计的轻量级机器学习推理框架,它通过模块化的操作符系统
    的头像 发表于 12-26 10:34 5763次阅读

    穿孔机顶头检测仪 机器视觉深度学习

    LX01Z-DG626穿孔机顶头检测仪采用深度学习技术,能够实现顶头状态的在线实时检测,顶头丢失报警,顶头异常状态报警等功能,响应迅速,异常状态视频回溯,检测顶头温度,配备吹扫清洁系统,维护周期长
    发表于 12-22 14:33

    【团购】独家全套珍藏!龙哥LabVIEW视觉深度学习实战课(11大系列课程,共5000+分钟)

    大系列课程,形成\"传统视觉算法→深度学习建模→工业级部署\"的完整技术链,不论是新手、老手都适合学习。 1. 新手入门 课程通过三层保障体系降低
    发表于 12-04 09:28

    【团购】独家全套珍藏!龙哥LabVIEW视觉深度学习实战课程(11大系列课程,共5000+分钟)

    大系列课程,形成\"传统视觉算法→深度学习建模→工业级部署\"的完整技术链,不论是新手、老手都适合学习。 1. 新手入门 课程通过三层保障体系降低
    发表于 12-03 13:50

    如何深度学习机器视觉的应用场景

    深度学习视觉应用场景大全 工业制造领域 复杂缺陷检测:处理传统算法难以描述的非标准化缺陷模式 非标产品分类:对形状、颜色、纹理多变的产品进行智能分类 外观质量评估:基于学习的外观质量标准判定 精密
    的头像 发表于 11-27 10:19 326次阅读

    学习物联网怎么入门?

    景等。同时,学习物联网的基本技术,如传感器技术、通信技术、云计算等,也是非常重要的。 其次,选择适合自己的学习方式也是入门学习物联网的重要一步。
    发表于 10-14 10:34

    【上海晶珩睿莓1开发板试用体验】TensorFlow-Lite物体归类(classify)

    目前尚未得知睿莓1开发板上面有NPU或者DPU之类的额外处理器,因此使用树莓派系列使用最广泛的TensorFlow-Lite库进行物体归类,使用CPU运行代码,因此占用的是CPU的算力。在
    发表于 09-12 22:43

    如何在机器视觉中部署深度学习神经网络

    图 1:基于深度学习的目标检测可定位已训练的目标类别,并通过矩形框(边界框)对其进行标识。 在讨论人工智能(AI)或深度学习时,经常会出现“神经网络”、“黑箱”、“标注”等术语。这些概
    的头像 发表于 09-10 17:38 1049次阅读
    如何在机器视觉中部署<b class='flag-5'>深度</b><b class='flag-5'>学习</b>神经网络

    深度学习对工业物联网有哪些帮助

    深度学习作为人工智能的核心分支,通过模拟人脑神经网络的层级结构,能够自动从海量工业数据中提取复杂特征,为工业物联网(IIoT)提供了从数据感知到智能决策的全链路升级能力。以下从技术赋能、场景突破
    的头像 发表于 08-20 14:56 1204次阅读

    自动驾驶中Transformer大模型会取代深度学习吗?

    [首发于智驾最前沿微信公众号]近年来,随着ChatGPT、Claude、文心一言等大语言模型在生成文本、对话交互等领域的惊艳表现,“Transformer架构是否正在取代传统深度学习”这一话题一直被
    的头像 发表于 08-13 09:15 4365次阅读
    自动驾驶中Transformer大模型会取代<b class='flag-5'>深度</b><b class='flag-5'>学习</b>吗?

    ARM入门学习方法分享

    。 以下是一些入门学习方法的分享: 一、 理解基本概念:首先,了解ARM是什么以及它的基本概念是很重要的。ARM(Advanced RISC Machines)指的是一种精简指令集计算机(RISC
    发表于 07-23 10:21

    硬件原理图学习笔记

    这一个星期认真学习了硬件原理图的知识,做了一些笔记,方便以后查找。硬件原理图分为三类1.管脚类(gpio)和门电路类输入输出引脚,上拉电阻,三极管与门,或门,非门上拉电阻:正向标志作用,给悬空的引脚
    的头像 发表于 04-30 18:40 1633次阅读
    硬件原理图<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>