天道酬勤,学无止境

Tensorflow: compute Hessian with respect to each sample

I have a tensor X of size M x D. We can interpret each row of X as a training sample and each column as a feature.

X is used to compute a tensor u of size M x 1 (in other words, u depends on X in the computational graph). We can interpret this as a vector of predictions; one for each sample. In particular, the m-th row of u is computed using only the m-th row of X.

Now, if I run tensor.gradients(u, X)[0], I obtain an M x D tensor corresponding to the "per-sample" gradient of u with respect to X.

How can I similarly compute the "per-sample" Hessian tensor? (i.e., an M x D x D quantity)


Addendum: Peter's answer below is correct. I also found a different approach using stacking and unstacking (using Peter's notation):

hess2 = tf.stack([
    tf.gradients( tmp, a )[ 0 ]
    for tmp in tf.unstack( grad, num=5, axis=1 )
], axis = 2)

In Peter's example, D=5 is the number of features. I suspect (but I have not checked) that The above is faster for M large, as it skips over the zero entries mentioned in Peter's answer.

评论

tf.hessians() is calculating the Hessian for the provided ys and xs reagardless of the dimensions. Since you have a result of dimension M x D and xs of dimension M x D therefore the result will be of dimension M x D x M x D. But since the outputs per exemplar are independent of each other, most of the Hessian will be zero, namely only one slice in the third dimension will have any value whatsoever. Therefore to get to your desired result, you should take the diagonal in the two M dimensions, or much easier, you should simply sum and eliminate the third dimension like so:

hess2 = tf.reduce_sum( hess, axis = 2 )

Example code (tested):

import tensorflow as tf

a = tf.constant( [ [ 1.0, 1, 1, 1, 1 ], [ 2, 2, 2, 2, 2 ], [ 3, 3, 3, 3, 3 ] ] )
b = tf.constant( [ [ 1.0 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] )
c = tf.matmul( a, b )
c_sq = tf.square( c )

grad = tf.gradients( c_sq, a )[ 0 ]

hess = tf.hessians( c_sq, a )[ 0 ]
hess2 = tf.reduce_sum( hess, axis = 2 )


with tf.Session() as sess:
    res = sess.run( [ c_sq, grad, hess2 ] )

    for v in res:
        print( v.shape )
        print( v )
        print( "=======================")

will output:

(3, 1)
[[ 225.]
[ 900.]
[2025.]]
=======================
(3, 5)
[[ 30. 60. 90. 120. 150.]
[ 60. 120. 180. 240. 300.]
[ 90. 180. 270. 360. 450.]]
=======================
(3, 5, 5)
[[[ 2. 4. 6. 8. 10.]
[ 4. 8. 12. 16. 20.]
[ 6. 12. 18. 24. 30.]
[ 8. 16. 24. 32. 40.]
[10. 20. 30. 40. 50.]]

[[ 2. 4. 6. 8. 10.]
[ 4. 8. 12. 16. 20.]
[ 6. 12. 18. 24. 30.]
[ 8. 16. 24. 32. 40.]
[10. 20. 30. 40. 50.]]

[[ 2. 4. 6. 8. 10.]
[ 4. 8. 12. 16. 20.]
[ 6. 12. 18. 24. 30.]
[ 8. 16. 24. 32. 40.]
[10. 20. 30. 40. 50.]]]
=======================

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Tensorflow: Compute Hessian matrix (only diagonal part) with respect to a high rank tensor
    I would like to compute the first and the second derivatives(diagonal part of Hessian) of my specified Loss with respect to each feature map of a vgg16 conv4_3 layer's kernel which is a 3x3x512x512 dimensional matrix. I know how to compute derivatives if it is respected to a low-rank one according to How to compute all second derivatives (only the diagonal of the Hessian matrix) in Tensorflow? However, when it turns to higher-rank, I got completed lost. # Inspecting variables under Ipython notebook In : Loss Out : <tf.Tensor 'local/total_losses:0' shape=() dtype=float32> In : conv4_3_kernel
  • 如何计算Tensorflow中的所有二阶导数(仅是Hessian矩阵的对角线)?(How to compute all second derivatives (only the diagonal of the Hessian matrix) in Tensorflow?)
    问题 我有一个损失值/函数,我想计算一个张量f (大小为n)的所有二阶导数。 我设法两次使用了tf.gradients,但是当第二次应用它时,它会将第一个输入中的导数求和(请参见我的代码中的second_derivatives )。 另外,我设法检索了Hessian矩阵,但我只想计算其对角线,以避免进行过度计算。 import tensorflow as tf import numpy as np f = tf.Variable(np.array([[1., 2., 0]]).T) loss = tf.reduce_prod(f ** 2 - 3 * f + 1) first_derivatives = tf.gradients(loss, f)[0] second_derivatives = tf.gradients(first_derivatives, f)[0] hessian = [tf.gradients(first_derivatives[i,0], f)[0][:,0] for i in range(3)] model = tf.initialize_all_variables() with tf.Session() as sess: sess.run(model) print "\nloss\n", sess.run(loss) print "\nloss'\n"
  • How to compute all second derivatives (only the diagonal of the Hessian matrix) in Tensorflow?
    I have a loss value/function and I would like to compute all the second derivatives with respect to a tensor f (of size n). I managed to use tf.gradients twice, but when applying it for the second time, it sums the derivatives across the first input (see second_derivatives in my code). Also I managed to retrieve the Hessian matrix, but I would like to only compute its diagonal to avoid extra-computation. import tensorflow as tf import numpy as np f = tf.Variable(np.array([[1., 2., 0]]).T) loss = tf.reduce_prod(f ** 2 - 3 * f + 1) first_derivatives = tf.gradients(loss, f)[0] second_derivatives
  • 干货丨DolphinDB通用计算教程
    DolphinDB不仅可以分布式地存储数据,而且对分布式计算有良好支持。在DolphinDB中,用户可以用系统提供的通用分布式计算框架,通过脚本实现高效的分布式算法,而不需关注具体的底层实现。本文将对DolphinDB通用计算框架中的重要概念和相关函数作出详细解释,并提供丰富的具体使用场景和例子。1. 数据源数据源(Data Source)是DolphinDB的通用计算框架中的基本概念。它是一种特殊类型的数据对象,是对数据的元描述。通过执行数据源,用户可以获得诸如表、矩阵、向量等数据实体。在DolphinDB的分布式计算框架中,轻量级的数据源对象而不是庞大的数据实体被传输到远程结点,以用于后续的计算,这大大减少了网络流量。在DolphinDB中,用户常用sqlDS函数,基于一个SQL表达式产生数据源。这个函数并不直接对表进行查询,而是返回一个或多个SQL子查询的元语句,即数据源。之后,用户可以使用Map-Reduce框架,传入数据源和计算函数,将任务分发到每个数据源对应的结点,并行地完成计算,然后将结果汇总。关于几种常用的获得数据源的方法,本文的3.1, 3.2, 3.3, 3.4节中会详细介绍。2. Map-Reduce框架Map-Reduce函数是DolphinDB通用分布式计算框架的核心功能。2.1 mr函数DolphinDB的Map-Reduce函数mr的语法是mr(ds
  • 数据不平衡和加权交叉熵(Unbalanced data and weighted cross entropy)
    问题 我正在尝试使用不平衡的数据来训练网络。 我有A(198个样本),B(436个样本),C(710个样本),D(272个样本),并且我已经阅读了有关“ weighted_cross_entropy_with_logits”的信息,但是我发现的所有示例都是针对二进制分类的,因此我不太了解对如何设置这些权重充满信心。 样本总数:1616 A_weight:198/1616 = 0.12? 如果我理解的话,背后的想法是惩罚市长阶层的错误,更积极地重视少数族裔的打击,对吧? 我的一段代码: weights = tf.constant([0.12, 0.26, 0.43, 0.17]) cost = tf.reduce_mean(tf.nn.weighted_cross_entropy_with_logits(logits=pred, targets=y, pos_weight=weights)) 我已经阅读了这个和其他带有二进制分类的示例,但是仍然不太清楚。 提前致谢。 回答1 请注意, weighted_cross_entropy_with_logits是sigmoid_cross_entropy_with_logits的加权变体。 S形交叉熵通常用于二进制分类。 是的,它可以处理多个标签,但是S型交叉熵基本上是对每个标签做出(二进制)决策-例如,对于人脸识别网,那些(但不互斥
  • 12 _Custom Models and Training with TensorFlow_2_progress_status_bar_Training Loops_concrete
    12 _Custom Models and Training with TensorFlow_tensor_ structure_Activation_Layers_huber_Loss_Metrichttps://mp.csdn.net/console/editor/html/107294292 Computing Gradients Using Autodiff To understand how to use autodiff (see https://blog.csdn.net/Linli522362242/article/details/106849041 and https://blog.csdn.net/Linli522362242/article/details/106290394) to compute gradients automatically, let’s consider a simple toy function: def f(w1, w2): return 3*w1**2 + 2*w1*w2 If you know calculus, you can analytically find that the partial derivative of this function with regard to w1 is 6 * w1 + 2 * w2
  • tf.placeholder和tf.Variable有什么区别?(What's the difference between tf.placeholder and tf.Variable?)
    问题 我是TensorFlow的新手。 我对tf.placeholder和tf.Variable之间的区别感到困惑。 在我看来, tf.placeholder用于输入数据,而tf.Variable用于存储数据状态。 这就是我所知道的。 有人可以向我详细解释他们之间的差异吗? 特别是何时使用tf.Variable和何时使用tf.placeholder ? 回答1 简而言之,将tf.Variable用作模型的可训练变量,例如权重(W)和偏差(B)。 weights = tf.Variable( tf.truncated_normal([IMAGE_PIXELS, hidden1_units], stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))), name='weights') biases = tf.Variable(tf.zeros([hidden1_units]), name='biases') tf.placeholder用于提供实际的培训示例。 images_placeholder = tf.placeholder(tf.float32, shape=(batch_size, IMAGE_PIXELS)) labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))
  • 常见优化算法 (tensorflow对应参数)
    转载出处:http://www.2cto.com/kf/201612/572613.html常见算法SGD?1x+= -learning_rate*dxMomentumMomentum可以使SGD不至于陷入局部鞍点震荡,同时起到一定加速作用。Momentum最开始有可能会偏离较远(overshooting the target),但是通常会慢慢矫正回来。?12v = mu*v - learning_rate*dxx+= vNesterov momentum基本思路是每次不在x位置求dx,而是在x+mu*v处更新dx,然后在用动量公式进行计算相当于每次先到动量的位置,然后求梯度更新vt=μvt?1?ε▽f(θt?1+μvt?1)θt=θt?1+vt计算▽f(θt?1+μvt?1)不太方便,做如下变量替换:?t?1=θt?1+μvt?1 ,并带回上述公式可以得到vt=μvt?1+ε▽f(?t?1)?t?1=?t?1?μvt?1+(1+μ)vt?123v_prev = vv = mu*v-learning_rate*dxx += -mu*v_prev+(1+mu)*vAdaGrad使用每个变量的历史梯度值累加作为更新的分母,起到平衡不同变量梯度数值差异过大的问题?12cache += dx**2x += -learning_rate*dx/(np.sqrt(cache)+1e-7
  • 计算机视觉大型攻略 —— 特征与匹配(4)SIFT
    参考书籍:Computer Vision: Algorithms and Applications, Richard Szeliski 参考论文: [1] Distinctive Image Features from Scale-Invariant Keypoints Scale Invariant Feature Transfrom SIFT提出了一种尺度无关的特征变换算法。包括了特征点的检测,特征描述符的设计,[1]还提出了自己的特征匹配和SIFT在物体识别上的应用。特征点和特征描述符的介绍可参考之前的文章。 传送门:特征点检测 特征描述符 SIFT特征提取的步骤 尺度空间极值检测 (Scale-space extrema detection)角点(Keypoint)定位 (Keypoint localization)角点梯度方向的计算 (Orientation assignment)角点描述符 (Keypoint descriptor) 尺度空间极值检测(Scale-space extrema detaction) SIFT算法首先通过求尺度空间的极值获取角点(keypoints)坐标和scale的粗略估计。 首先简单说一下尺度。直观上来说,图像提供了2维的空间信息。尺度(Scale)定义了另外一个维度,即与观测者的距离。离着越远,图像越小,图像的细节越模糊。
  • 一个简单的深度学习模型,带你深度了解背后原理
    全文共4431字,预计学习时长9分钟 深度学习是目前在实际数据科学应用中最流行的模型之一。从图像到文本,再到语音/音乐等领域,它都是一个有效的模型。随着使用量的上升,快速且可扩展地实现深度学习变得至关重要。Tensorflow等深度学习平台的兴起可以帮助简化开发人员的实现方式。 在本文中,我们将学习深度学习的工作原理,并熟悉相关术语,例如反向传播和批量大小。我们将实现一个简单的深度学习模型 - 从理论到scratch实现 - 使用python预定义输入和输出,然后使用Keras和Tensorflow等深度学习平台实现相同的模型。 我们使用Keras和Tensorflow 1.x和2.0编写了这个简单的深度学习模型,该模型具有三种不同级别的复杂性和易编码性。 Scratch的深度学习实现 一个简单的多层感知器有4个输入神经元,隐含层有3个神经元,输出层有1个神经元。我们有三个输入数据样本,用表示,三个期望输出数据样本,用表示。因此,每个输入数据样本都有4个特征。 # Inputs and outputs of the neural net:import numpy as npX=np.array([[1.0, 0.0, 1.0, 0.0],[1.0, 0.0, 1.0, 1.0],[0.0, 1.0, 0.0, 1.0]])yt=np.array([[1.0],[1.0],[0.0]
  • 张量流中未聚合的梯度/每个示例的梯度(Unaggregated gradients / gradients per example in tensorflow)
    问题 给定tensorflow中mnist上的简单小批量梯度下降问题(如本教程中一样),我如何才能分别检索批中每个示例的梯度。 tf.gradients()似乎返回该批次中所有示例平均的梯度。 有没有一种方法可以在聚合之前检索梯度? 编辑:迈向此答案的第一步是弄清楚张量流在该点上平均批次中各个示例的梯度。 我以为这发生在_AggregatedGrads中,但事实并非如此。 有任何想法吗? 回答1 tf.gradients返回相对于损耗的梯度。 这意味着,如果您的损失是每个示例损失的总和,则梯度也是每个示例损失梯度的总和。 总结是隐式的。 例如,如果您想最小化Wx-y误差的平方范数的总和,则相对于W的梯度为2(WX-Y)X' ,其中X为观察值批次, Y为标记批次。 您永远不会显式地形成“按示例”的渐变,然后再对其进行总结,因此在渐变管线中删除某个阶段并不是一件简单的事情。 获取每个示例的k个损耗梯度的一种简单方法是使用大小为1的批次并进行k次传递。 伊恩·古德费洛(Ian Goodfellow)写下了如何单次获得所有k渐变的方法,为此,您需要显式指定渐变,而不要依赖于tf.gradients方法 回答2 修改了一段时间后,部分回答了我自己的问题。 似乎可以通过以下步骤在每个示例中操作渐变,同时仍可以批量处理: 创建一个tf.gradients()的副本
  • Tensorflow: simultaneous prediction on GPU and CPU
    I’m working with tensorflow and I want to speed up the prediction phase of a pre-trained Keras model (I'm not interested in the training phase) by using simultaneously the CPU and one GPU. I tried to create 2 different threads that feed two different tensorflow sessions (one that runs on CPU and the other that runs on GPU). Each thread feeds a fixed number of batches (e.g. if we have an overall of 100 batches, I want to assign 20 batches for CPU and 80 on GPU, or any possible combination of the two) in a loop and combine the result. It would be better if the split was done automatically
  • 【模型剪枝】|论文笔记 Optimal Brain Damage
    1 摘要 通过从网络中删除不重要的权重,可以有更好的泛化能力、需求更少的训练样本、更少的学习或分类时间。本文的基础思想是使用二阶导数将一个训练好的网络,删除一半甚至一半以上的权重,最终会和原来的网络性能一样好,甚至更好。最好的泛化能力是在训练误差和网络复杂度平衡的时候。 2 介绍 达到这种平衡的一种技术是最小化由两部分组成(原始的训练误差+网络复杂度的度量)的损失函数。 复杂度评估方法包括VC维度,描述长度、还有一个历史悠久的方法是:自由参数中的非零参数数量,这个方法也是本文选用的方法。 在很多统计推理的文章中,存在一些先验或者是启发式的信息规定了哪些参数应该被删除;例如,在一组多项式中,应该先删除高次项。但是在神经网络中,应该删除哪些次项的参数就不是那么明显了。 本文的技术是使用目标函数对参数求二阶导数表示参数的贡献度。而不是直观上用数值大小代替贡献度(即数值小的参数对对最终预测结果贡献度也小) 3 OBD 目标函数在神经网络领域扮演着重要的角色;因此使用“删除一个参数之后,目标函数的变化”来定义一个参数的贡献度是很合理的。但是计算每一个参数删除引发的目标函数的变化是很困难的。 幸运的是,我们可以通过建立一个误差函数的局部模型,来分析预测扰动参数向量引起的影响。我们用泰勒级数来近似目标函数e。 数向量的扰动 δ U \delta U δU 将会通过下面的式子来改变目标函数 其中,
  • 浏览器中实现深度学习?有人分析了7个基于JS语言的DL框架,发现还有很长的路要走
    深度学习(Deep Learning,DL)是一类利用多层非线性处理单元(称为神经元)进行特征提取和转换的机器学习算法。每个连续层使用前一层的输出作为输入。近十年来,深度学习技术的进步极大地促进了人工智能的发展。大量的人工智能应用,如图像处理、目标跟踪、语音识别和自然语言处理,都对采用 DL 提出了迫切的要求。因此,各种 DL 框架(Frameworks)和库(Libraries),如 TensorFlow、Caffe、CNTK 等,被提出并应用于实践。目前,这些应用程序可以在诸如 Windows、Linux、MacOS/iOS 和 Android 等异构开发环境上运行,此外,可以使用各种命令式编程语言开发,例如 Windows 上的 C/C++、iOS 和 MacOS 上的 Objective-C,以及 Android 上的 Java。不过,受限于 DL 框架和库的特点,例如训练数据量大、网络结构复杂、网络层级多、参数多等,通过本机程序调用运行 DL 的 AI 算法或模型的运算量非常大。最近,关于 DL 的一种应用趋势是应用程序直接在客户端中执行 DL 任务,以实现更好的隐私保护和获得及时的响应。其中,在 Web 浏览器中实现 DL,成为了人工智能社区关于客户端 DL 支持的重要研究目标。浏览器中的 DL 是用 JavaScript 实现的,依靠浏览器引擎来执行。基于 DL 的
  • Alink漫谈(十一) :线性回归 之 L-BFGS优化
    Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台,是业界首个同时支持批式算法、流式算法的机器学习平台。本文介绍了线性回归的L-BFGS优化在Alink是如何实现的,希望可以作为大家看线性回归代码的Roadmap。Alink漫谈(十一) :线性回归 之 L-BFGS优化目录Alink漫谈(十一) :线性回归 之 L-BFGS优化3.1 如何分布式实施3.2 CalcGradient3.3 AllReduce3.4 CalDirection3.5 CalcLosses3.6 UpdateModel3.7 OutputModel3.4.1 预先分配3.4.2 计算方向2.1 泰勒展开2.2 牛顿法2.3 拟牛顿法2.4 L-BFGS算法如何通俗推理?2.2.1 泰勒一阶展开2.2.2 泰勒二阶展开2.2.3 高维空间2.2.4 牛顿法基本流程2.2.5 问题点及解决1.1 优化基本思路1.2 各类优化方法0x00 摘要0x01 回顾0x02 基本概念0x03 优化模型 -- L-BFGS算法0x04 准备模型元数据0x05 建立模型0x06 使用模型预测0x07 本系列其他文章0xFF 参考0x00 摘要Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台,是业界首个同时支持批式算法、流式算法的机器学习平台
  • 分布式机器学习之——Spark MLlib并行训练原理
    1.Spark的分布式计算如何实现? 2.Spark MLlib如何并行训练? 3.Spark MLlib并行训练的局限性有哪些? 这里是 王喆的机器学习笔记 的第二十五篇文章。接下来的几篇文章希望与大家一同讨论一下机器学习模型的分布式训练的问题。这个问题在推荐、广告、搜索领域尤为突出,因为在互联网场景下,动辄TB甚至PB级的数据量,几乎不可能利用单点完成机器学习模型的训练,分布式机器学习训练成为唯一的选择。 在笔者看来,分布式机器学习训练有三个主要的方案,分别是Spark MLlib,Parameter Server和TensorFlow,倒不是说他们是唯三可供选择的平台,而是因为他们分别代表着三种主流的解决分布式训练方法。今天我们先从Spark MLlib说起,看看最流行的大数据计算平台是如何处理机器学习模型的并行训练问题的。 说起Spark,我想不会有任何算法工程师是陌生的。作为流行了至少五年的大数据项目,虽然受到了诸如Flink等后起之秀的挑战,但其仍是当之无愧的业界最主流的计算平台。而且为了照顾数据处理和模型训练平台的一致性,也有大量公司采用Spark原生的机器学习平台MLlib进行模型训练。选择Spark MLlib作为机器学习分布式训练平台的第一站,不仅因为Spark是流行的,更是因为Spark MLlib的并行训练方法代表着一种朴素的,直观的解决方案。
  • 玩PyTorch?你不得不看的PyTorch资源大列表
    写在前面 强烈安利,拿走不谢,顺手留个关注和点个赞,嘿嘿嘿 PyTorch我就不多说了吧,我搞CV平时也就用PyTorch和TensorFlow,不过最近更喜欢用PyTorch 了,因为TensorFlow的API真的搞的我头疼,不过因为我有时候用C++写算法的话,还是会用TensorFlow的。PyTorch 能在短时间内被众多研究人员和工程师接受并推崇是因为其有着诸多优点,如采用 Python 语言、动态图机制、网络构建灵活以及拥有强大的社群等。这里我介绍一个我再GitHub闲逛的时候发现的一个项目,这里面的资源真的是又强又全,惊为天人。 Pytorch & related libraries|Pytorch & 相关库 pytorch: Tensors and Dynamic neural networks in Python with strong GPU acceleration | 使用强GPU加速的Python张量计算和动态神经网络. NLP & Speech Processing|自然语言处理 & 语音处理: 2100+ text: 针对文本数据和NLP数据集的数据加载和抽象。1100+ pytorch-seq2seq: Pytorch中处理seq2seq的开源框架。1000- anuvada: NLP可解释模型。1000- audio: 简单的音频I/O。1000
  • 2-3 Coursera吴恩达《改善深度神经网络》第三周课程笔记-超参数调试、Batch正则化和编程框架
    上节课2-2 Coursera吴恩达《改善深度神经网络》第二周课程笔记-优化算法我们主要介绍了深度神经网络的优化算法。包括对原始数据集进行分割,使用mini-batch 梯度下降(mini-batch gradient descent),然后介绍了指数加权平均(Exponentially weighted averages)的概念以及偏移校正(bias correction)方法。接着,我们着重介绍了三种常用的加速神经网络学习速度的三种算法:动量梯度下降、RMSprop和Adam算法。其中,Adam结合了动量梯度下降和RMSprop各自的优点,实际应用中表现更好。然后,我们介绍了另外一种提高学习速度的方法:learning rate decay,通过不断减小学习因子,减小步进长度,来减小梯度振荡。最后,我们对深度学习中局部优化(local optima)的概念作了更深入的解释。本节课,我们将重点介绍三个方面的内容:超参数调试、Batch正则化和深度学习编程框架。 目录 《3.1调整过程》1. Tuning Process 《3.2 为超参数选择合适的范围》Using an appropriate scale to pick hyperparameters 《3.3 超参数调试实践:Pandas VS Caviar》Hyperparameters tuning in practice
  • 机器学习库初探之TensorFlow
    什么是TensorFlow?1TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。当前TensorFlow最新的开源版本是r0.9。什么是数据流图?数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算
  • Tensorflow2.0+Keras 快速入门教程
    文章目录 1. Tensorflow2.0+Keras综述2. Tensorflow基础2.1 Tensors张量2.2 Variables变量2.3 Tensorflow数学运算2.4 GradientTape计算梯度2.5 一个完整的例子2.6 tf.function 3. Keras API3.1 基础类Layer3.2 Trainable and non-trainable weights可训练和不可训练参数3.3 堆叠网络层3.4 内建层3.5 函数式编程3.6 损失函数类3.7 评估指标类 metric class3.8 优化类与一个完整的训练3.9 add_loss方法3.10 完整示例:变分自动编码器variational autoencoder(VAE)3.11 回调Callbacks 4. 总结5. 参考 1. Tensorflow2.0+Keras综述 作者:fchollet,2019年10月 本文是关于Tensorflow2.0 API的简要介绍课程 Tensorflow2.0和Keras都已经发布有四年之久(2015年3月Keras发布,同年11月Tensorflow发布)。在过去的日子里深度学习得到的迅速发展,同时我们也知道Tensorflow1.x和Keras的一些问题: 使用Tensorflow意味着要对静态图进行编程