Tensorflow张量拆分(如何评价Google发布的第二代深度学习系统TensorFlow)

2024-09-18 01:10:05 :4

tensorflow张量拆分(如何评价Google发布的第二代深度学习系统TensorFlow)

大家好,今天小编来为大家解答以下的问题,关于tensorflow张量拆分,如何评价Google发布的第二代深度学习系统TensorFlow这个很多人还不知道,现在让我们一起来看看吧!

本文目录

如何评价Google发布的第二代深度学习系统TensorFlow

评价Google发布的第二代深度学习系统TensorFlow:

在尚未确定能否发布分布式版本之前,把一个单机工具描述成 ”Today we’re proud to announce the open source release of TensorFlow -- our second-generation  machine  learning  system ” ,  ” Why  Google  Is Giving  Away Its Artificial Intelligence Secrets ",这样的claim是否过大? 不管是工业界还是学术界,都应该珍惜机器学习(或者人工智能)今天这来之不易的局面,在宣传与推广自己工作的时候实事求是,不给公众造成误导。

仔细研读了TensorFlow的开源代码文档和slides,总体印象是:一个新的单机深度学习工具包,没有明显的理论和系统创新,开源版本不支持分布式,所以对大规模深度学习没有太大益处。

1、编程模式。采用了一种称作“computation graph”的数据流编程模式,这种模式在之前很多系统中已有实现,如微软Dryad , Spark。

2、数据表示。称作为”Tensor“,统一来表示向量、矩阵、三维及以上张量。类似的抽象在之前很多系统与工具中已有。大部分机器学习操作的对象(数据或者参数)都是以向量、矩阵的形式存在,少部分是张量。统一表征成"tensor"没有问题,但在创新性上贡献有限。 

3、开源版本不支持分布式。单机的深度学习工具已经不下10个,Google没有提供测评数据显示TensorFlow相比这些工具在性能上有优势。市面上真正缺乏的是能够支持大规模深度学习的分布式框架或系统,而TensorFlow开源版本并没有提供。

希望TensorFlow能够开源分布式版本。如果不方便开源的话,希望在以后的宣传中清晰指出开源版本是一个单机深度学习工具,而不是支持大规模深度学习的系统,这二者有本质的区别。

这个张量拆分成分量形式应该是怎样的

我用o表示应力符号,用e表示应变符号(假设j,k遍历1,2,3):那么最后一项为:((o11+o22+o33)dejj)/3=(o11dejj+o22dejj+o33dejj)/3=(o11(de11+de22+de33)+o22(de11+de22+de33)+o33(de11+de22+de33))/3只有就只需要展开就行了。

tensorflow tensor shape依赖另外一个tensor值

一、环境TensorFlow API r1.12CUDA 9.2 V9.2.148cudnn64_7.dllPython 3.6.3Windows 10二、官方说明1、tf.shape(tensor)参数:input:张量或稀疏张量name:可选参数,操作的名称out_type:可选参数,指定输出张量的数据类型(int32 或 int64),默认是 tf.int32返回:指定 out_type 数据类型的张量2、tensor.shape张量的形状属性返回一个表示该张量的形状 tf.TensorShape对于每个操作,通过注册在 Op 中的形状推断函数来计算该张量的形状,形状表示的更多信息请参考 tf.TensorShape

怎么用python写tensorflow

开始使用

TensorFlow并不是一个纯粹的神经网络框架, 而是使用数据流图进行数值分析的框架.

TensorFlow使用有向图(graph)表示一个计算任务.图的节点称为ops(operations)表示对数据的处理,图的边flow 描述数据的流向.

该框架计算过程就是处理tensor组成的流. 这也是TensorFlow名称的来源.

TensorFlow使用tensor表示数据. tensor意为张量即高维数组,在python中使用numpy.ndarray表示.

TensorFlow使用Session执行图, 使用Variable维护状态.tf.constant是只能输出的ops, 常用作数据源.

下面我们构建一个只有两个constant做输入, 然后进行矩阵乘的简单图:

from tensorflow import Session, device, constant, matmul’’’构建一个只有两个constant做输入, 然后进行矩阵乘的简单图:’’’#如果不使用with session()语句, 需要手动执行session.close().#with device设备指定了执行计算的设备:#    "/cpu:0": 机器的 CPU.#    "/gpu:0": 机器的第一个 GPU, 如果有的话.#    "/gpu:1": 机器的第二个 GPU, 以此类推.with Session() as session:  # 创建执行图的上下文with device(’/cpu:0’):  # 指定运算设备mat1 = constant()  # 创建源节点mat2 = constant()product = matmul(mat1, mat2) # 指定节点的前置节点, 创建图result = session.run(product) # 执行计算        print(result)123456789101112131415161718

下面使用Variable做一个计数器:

from tensorflow import Session, constant, Variable, add, assign, initialize_all_variablesstate = Variable(0, name=’counter’) # 创建计数器one = constant(1) # 创建数据源: 1val = add(state, one) # 创建新值节点update = assign(state, val) # 更新计数器setup = initialize_all_variables() # 初始化Variablewith Session() as session:session.run(setup) # 执行初始化print(session.run(state)) # 输出初值for i in range(3):session.run(update) # 执行更新print(session.run(state)) # 输出计数器值12345678910111213

 在使用变量前必须运行initialize_all_variables()返回的图, 运行Variable节点将返回变量的值.

本示例中将构建图的过程写在了上下文之外, 而且没有指定运行设备.

上面示例中session.run只接受一个op作为参数, 实际上run可以接受op列表作为输入:

session.run()1

上述示例一直使用constant作为数据源, feed可以在运行时动态地输入数据:

from tensorflow import Session, placeholder, mul, float32input1 = placeholder(float32)input2 = placeholder(float32)output = mul(input1, input2)with Session() as session:    print session.run(output, feed_dict={input1: })1234567

实现一个简单神经网络

神经网络是应用广泛的机器学习模型, 关于神经网络的原理可以参见这篇随笔, 或者在tensorflow playground上体验一下在线demo.

首先定义一个BPNeuralNetwork类:

class BPNeuralNetwork:def __init__(self):self.session = tf.Session()self.input_layer = Noneself.label_layer = Noneself.loss = Noneself.trainer = Noneself.layers =    def __del__(self):self.session.close()1234567891011

编写一个生成单层神经网络函数,每层神经元用一个数据流图表示.使用一个Variable矩阵表示与前置神经元的连接权重, 另一个Variable向量表示偏置值, 并为该层设置一个激励函数.

def make_layer(inputs, in_size, out_size, activate=None):weights = tf.Variable(tf.random_normal())basis = tf.Variable(tf.zeros() + 0.1)result = tf.matmul(inputs, weights) + basis    if activate is None:        return result    else:        return activate(result)12345678

使用placeholder作为输入层.

self.input_layer = tf.placeholder(tf.float32, )1

placeholder的第二个参数为张量的形状, 表示行数不限, 列数为1的二维数组, 含义与numpy.array.shape相同.这里, self.input_layer被定义为接受二维输入的输入层.

同样使用placeholder表示训练数据的标签:

self.label_layer = tf.placeholder(tf.float32, )1

使用make_layer为神经网络定义两个隐含层, 并用最后一层作为输出层:

self.loss = tf.reduce_mean(tf.reduce_sum(tf.square((self.label_layer - self.layers))1

tf.train提供了一些优化器, 可以用来训练神经网络.以损失函数最小化为目标:

self.trainer = tf.train.GradientDescentOptimizer(learn_rate).minimize(self.loss)1

使用Session运行神经网络模型:

initer = tf.initialize_all_variables()# do trainingself.session.run(initer)for i in range(limit):self.session.run(self.trainer, feed_dict={self.input_layer: cases, self.label_layer: labels})12345

使用训练好的模型进行预测:

self.session.run(self.layers, feed_dict={self.input_layer: case})1

完整代码:

import tensorflow as tfimport numpy as npdef make_layer(inputs, in_size, out_size, activate=None):weights = tf.Variable(tf.random_normal())basis = tf.Variable(tf.zeros() + 0.1)result = tf.matmul(inputs, weights) + basis    if activate is None:        return result    else:        return activate(result)class BPNeuralNetwork:def __init__(self):self.session = tf.Session()self.input_layer = Noneself.label_layer = Noneself.loss = Noneself.optimizer = Noneself.layers =    def __del__(self):self.session.close()    def train(self, cases, labels, limit=100, learn_rate=0.05):# 构建网络self.input_layer = tf.placeholder(tf.float32, )self.label_layer = tf.placeholder(tf.float32, )self.layers.append(make_layer(self.input_layer, 2, 10, activate=tf.nn.relu))self.layers.append(make_layer(self.layers, 10, 2, activate=None))self.loss = tf.reduce_mean(tf.reduce_sum(tf.square((self.label_layer - self.layers))self.optimizer = tf.train.GradientDescentOptimizer(learn_rate).minimize(self.loss)initer = tf.initialize_all_variables()        # 做训练self.session.run(initer)        for i in range(limit):self.session.run(self.optimizer, feed_dict={self.input_layer: cases, self.label_layer: labels})    def predict(self, case):return self.session.run(self.layers, feed_dict={self.input_layer: case})    def test(self):x_data = np.array()y_data = np.array().transpose()test_data = np.array()self.train(x_data, y_data)print(self.predict(test_data))nn = BPNeuralNetwork()nn.test()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

上述模型虽然简单但是使用不灵活, 作者采用同样的思想实现了一个可以自定义输入输出维数以及多层隐含神经元的网络, 可以参见dynamic_bpnn.py

import tensorflow as tfimport numpy as npdef make_layer(inputs, in_size, out_size, activate=None):weights = tf.Variable(tf.random_normal())basis = tf.Variable(tf.zeros() + 0.1)result = tf.matmul(inputs, weights) + basis    if activate is None:        return result    else:        return activate(result)class BPNeuralNetwork:def __init__(self):self.session = tf.Session()self.loss = Noneself.optimizer = Noneself.input_n = 0self.hidden_n = 0self.hidden_size = self.output_n = 0self.input_layer = Noneself.hidden_layers = self.output_layer = Noneself.label_layer = Nonedef __del__(self):self.session.close()    def setup(self, ni, nh, no):# 设置参数个数self.input_n = niself.hidden_n = len(nh)  #隐藏层的数量self.hidden_size = nh  #每个隐藏层中的单元格数self.output_n = no        #构建输入层self.input_layer = tf.placeholder(tf.float32, )        #构建标签层self.label_layer = tf.placeholder(tf.float32, )        #构建隐藏层in_size = self.input_nout_size = self.hidden_sizeinputs = self.input_layerself.hidden_layers.append(make_layer(inputs, in_size, out_size, activate=tf.nn.relu))        for i in range(self.hidden_n-1):in_size = out_sizeout_size = self.hidden_sizeinputs = self.hidden_layersself.hidden_layers.append(make_layer(inputs, in_size, out_size, activate=tf.nn.relu))        #构建输出层self.output_layer = make_layer(self.hidden_layers, self.output_n)    def train(self, cases, labels, limit=100, learn_rate=0.05):self.loss = tf.reduce_mean(tf.reduce_sum(tf.square((self.label_layer - self.output_layer)), reduction_indices=))self.optimizer = tf.train.GradientDescentOptimizer(learn_rate).minimize(self.loss)initer = tf.initialize_all_variables()        #做训练self.session.run(initer)        for i in range(limit):self.session.run(self.optimizer, feed_dict={self.input_layer: cases, self.label_layer: labels})    def predict(self, case):return self.session.run(self.output_layer, feed_dict={self.input_layer: case})    def test(self):x_data = np.array()y_data = np.array().transpose()test_data = np.array()self.setup(2, , 1)self.train(x_data, y_data)print(self.predict(test_data))nn = BPNeuralNetwork()nn.test()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

标量、向量、张量之间的关系

张量(tensor) 在某些情况下,我们会讨论坐标超过两维的数组。一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量(tensor, TensorFlow 名称的由来)。使用粗体A来表示张量“A"。张量A中坐标为(i,j,k)的元素记作 A(i, j,k )。

标量、向量、张量之间的关系 标量是0阶张量,向量是一阶张量。举例: 标量就是知道棍子的长度,但是你不会知道棍子指向哪儿。 向量就是不但知道棍子的长度,还知道棍子指向前面还是后面。 张量就是不但知道棍子的长度,也知道棍子指向前面还是后面,还能知道这棍子又向上/下和左/右偏转了多少。

***隐藏网址***

关于tensorFlow的一些概念!

tensorFlow是用于人工智能的开源神器之一,是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在tensorFlow图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。tensorFlow灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。tensorFlow拥有高度的灵活性、真正的可移植性(Portability)、将科研和产品联系在一起、自动求微分、多语言支持、性能最优化等优势。任何人都可以用Tensorflow。学生、研究员、爱好者、极客、工程师、开发者、发明家、创业者等等都可以在Apache 2.0 开源协议下使用Tensorflow。tensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护,拥有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在内的多个项目以及各类应用程序接口(Application Programming Interface, API),其功能还在不断完善。

tensorflow 变量和张量的区别

importtensorflowastf#创建一个常量op,产生一个1x2矩阵,这个op被作为一个节点#加到默认视图中#构造器的返回值代表该常量op的返回值matrix1=tr.constant()#创建一个矩阵乘法matmulop,把matrix1和matrix2作为输入:product=tf.matmul(matrix1,matrix2)

Tensorflow(4) 张量属性:维数、形状、数据类型

tensorflow的命名来源于本身的运行原理,tensor(张量)意味着N维数组,flow(流)意味着基于数据流图的计算,所以tensorflow字面理解为张量从流图的一端流动到另一端的计算过程。 tensorflow中的所有数据如图片、语音等都是以张量这种数据结构的形式表示的。张量是一种组合类型的数据类型,表示为一个多维数组,通用的表示形式为 ,其中 T 可以是在tensorflow中指定类型的单个数字,也可以是一个矩阵。 张量(tensor)的属性——维数(阶)、形状和数据类型。 张量的维数又叫张量的阶,是张量维数的一个数量描述。如下分别表示0维、1维、2维和3维的张量: 维度要看张量的最左边有多少个左中括号,有n个,则这个张量就是n维张量。 张量的形状以 的形式表示,D0 到Dn 是任意的正整数。 如形状表示一个3行4列的矩阵。 在形状的中括号中有多少个数字,就代表这个张量是多少维的张量。 形状的第一个元素要看张量最外边的中括号中有几个元素(被最外边的中括号里边的内中括号括起来的所有数据算作一个元素)被逗号隔开,有n1个则这个张量就是n1维的,形状的第一个元素就是n1; 形状的第二个元素要看张量中最左边的第二个中括号中有几个被逗号隔开的元素,有n2个则shape的第二个元素就是n2;形状的第二个元素之后的第3,4…n个元素依次类推,分别看第n个中括号中有几个元素即可: 张量的数据类型 张量的数据类型可以是以下数据类型中的任意一种:

TensorFlow如何入门

1. TensorFlow是什么是一个深度学习库,由 Google 开源,可以对定义在 Tensor(张量)上的函数自动求导。Tensor(张量)意味着 N 维数组,Flow(流)意味着基于数据流图的计算,TensorFlow即为张量从图的一端流动到另一端。它的一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从电话、单个CPU / GPU到成百上千GPU卡组成的分布式系统。支持CNN、RNN和LSTM算法,是目前在 Image,NLP 最流行的深度神经网络模型。2. 为什么需要TensorFlow等库深度学习通常意味着建立具有很多层的大规模的神经网络。除了输入X,函数还使用一系列参数,其中包括标量值、向量以及最昂贵的矩阵和高阶张量。在训练网络之前,需要定义一个代价函数,常见的代价函数包括回归问题的方差以及分类时候的交叉熵。训练时,需要连续的将多批新输入投入网络,对所有的参数求导后,代入代价函数,从而更新整个网络模型。这个过程中有两个主要的问题:1. 较大的数字或者张量在一起相乘百万次的处理,使得整个模型代价非常大。2. 手动求导耗时非常久。所以TensorFlow的对函数自动求导以及分布式计算,可以帮我们节省很多时间来训练模型。3. TensorFlow的优点第一,基于Python,写的很快并且具有可读性。第二,在多GPU系统上的运行更为顺畅。第三,代码编译效率较高。第四,社区发展的非常迅速并且活跃。第五,能够生成显示网络拓扑结构和性能的可视化图。4. TensorFlow的工作原理TensorFlow是用数据流图(data flow graphs)技术来进行数值计算的。数据流图是描述有向图中的数值计算过程。有向图中,节点通常代表数学运算,边表示节点之间的某种联系,它负责传输多维数据(Tensors)。节点可以被分配到多个计算设备上,可以异步和并行地执行操作。因为是有向图,所以只有等到之前的入度节点们的计算状态完成后,当前节点才能执行操作。

关于tensorflow张量拆分和如何评价Google发布的第二代深度学习系统TensorFlow的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

tensorflow张量拆分(如何评价Google发布的第二代深度学习系统TensorFlow)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.