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

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

3天内不再提示

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

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

扫码添加小助手

加入工程师交流群

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

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

作为谷歌的深度学习框架, 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)

在上面的示例中,我们创建了两个 Tensor和 Tensor之间的乘积运算,但直接打印的结果却不是我们想要看到的 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

计算损失函数

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 编码

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 搭建神经网络。

本文来自《自兴动脑人工智能》项目部:凯文

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

    关注

    1813

    文章

    49772

    浏览量

    261733
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136247
  • 深度学习
    +关注

    关注

    73

    文章

    5591

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    学习物联网怎么入门?

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

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

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

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

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

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

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

    嵌入式AI技术之深度学习:数据样本预处理过程中使用合适的特征变换对深度学习的意义

      作者:苏勇Andrew 使用神经网络实现机器学习,网络的每个层都将对输入的数据做一次抽象,多层神经网络构成深度学习的框架,可以深度理解数据中所要表示的规律。从原理上看,使用
    的头像 发表于 04-02 18:21 1295次阅读

    用树莓派搞深度学习TensorFlow启动!

    介绍本页面将指导您在搭载64位Bullseye操作系统的RaspberryPi4上安装TensorFlowTensorFlow是一个专为深度学习开发的大型软件库,它消耗大量资源。您可
    的头像 发表于 03-25 09:33 980次阅读
    用树莓派搞<b class='flag-5'>深度</b><b class='flag-5'>学习</b>?<b class='flag-5'>TensorFlow</b>启动!

    IPC2221简略学习笔记

    关于IPC2221的学习笔记
    发表于 03-14 18:07 7次下载

    如何排除深度学习工作台上量化OpenVINO™的特定层?

    无法确定如何排除要在深度学习工作台上量化OpenVINO™特定层
    发表于 03-06 07:31

    军事应用中深度学习的挑战与机遇

    人工智能尤其是深度学习技术的最新进展,加速了不同应用领域的创新与发展。深度学习技术的发展深刻影响了军事发展趋势,导致战争形式和模式发生重大变化。本文将概述
    的头像 发表于 02-14 11:15 828次阅读

    模电手账笔记7

    模电手账笔记7
    的头像 发表于 02-13 16:31 544次阅读
    模电手账<b class='flag-5'>笔记</b>(<b class='flag-5'>7</b>)

    BP神经网络与深度学习的关系

    BP神经网络与深度学习之间存在着密切的关系,以下是对它们之间关系的介绍: 一、BP神经网络的基本概念 BP神经网络,即反向传播神经网络(Backpropagation Neural Network
    的头像 发表于 02-12 15:15 1364次阅读

    深度学习入门:简单神经网络的构建与实现

    深度学习中,神经网络是核心模型。今天我们用 Python 和 NumPy 构建一个简单的神经网络。 神经网络由多个神经元组成,神经元之间通过权重连接。我们构建一个包含输入层、隐藏层和输出层的简单
    的头像 发表于 01-23 13:52 857次阅读

    ES7P0214应用笔记

    电子发烧友网站提供《ES7P0214应用笔记.pdf》资料免费下载
    发表于 01-16 16:06 0次下载
    ES<b class='flag-5'>7</b>P0214应用<b class='flag-5'>笔记</b>

    ES7P0213应用笔记

    电子发烧友网站提供《ES7P0213应用笔记.pdf》资料免费下载
    发表于 01-16 15:26 0次下载
    ES<b class='flag-5'>7</b>P0213应用<b class='flag-5'>笔记</b>