tensorflow 转张量类型为float_5个简单的步骤掌握Tensorflow的Tensor

6f326c8ba80749fbaa7834c692053f45

在这篇文章中,我们将深入研究Tensorflow Tensor的细节。我们将在以下五个简单步骤中介绍与Tensorflow的Tensor中相关的所有主题:

  • 第一步:张量的定义→什么是张量?
  • 第二步:创建张量→创建张量对象的函数
  • 第三步:张量对象的特征
  • 第四步:张量操作→索引、基本张量操作、形状操作、广播
  • 第五步:特殊张量

张量的定义:什么是张量

c6f11acd9f06407bba0cfff5e4ed55a1

张量是TensorFlow的均匀型多维数组。它们非常类似于NumPy数组,并且它们是不可变的,这意味着一旦创建它们就不能被更改。只能使用编辑创建新副本。

让我们看看张量如何与代码示例一起工作。但是首先,要使用TensorFlow对象,我们需要导入TensorFlow库。我们经常将NumPy与TensorFlow一起使用,因此我们还可以使用以下行导入NumPy:

import tensorflow as tfimport numpy as np

张量的创建:创建张量对象

有几种方法可以创建tf.Tensor对象。让我们从几个例子开始。可以使用多个TensorFlow函数创建张量对象,如下例所示:

# 你可以用`tf.constant`函数创建tf.Tensor对象:x = tf.constant([[1, 2, 3, 4 ,5]])# 你可以用`tf.ones`函数创建tf.Tensor对象:y = tf.ones((1,5))# 你可以用`tf.zeros`函数创建tf.Tensor对象:z = tf.zeros((1,5))# 你可以用`tf.range`函数创建tf.Tensor对象:q = tf.range(start=1, limit=6, delta=1)print(x)print(y)print(z)print(q)
输出:tf.Tensor([[1 2 3 4 5]], shape=(1, 5), dtype=int32)tf.Tensor([[1. 1. 1. 1. 1.]], shape=(1, 5), dtype=float32) tf.Tensor([[0. 0. 0. 0. 0.]], shape=(1, 5), dtype=float32) tf.Tensor([1 2 3 4 5], shape=(5,), dtype=int32)

如你所见,我们使用三个不同的函数创建了形状(1,5)的张量对象,使用tf.range()函数创建了形状(5,)的第四个张量对象。注意,tf.ones的和tf.zeros接受形状作为必需的参数,因为它们的元素值是预先确定的。

张量对象的特征

tf.Tensor创建对象,它们有几个特征。首先,他们有维度数量。其次,它们有一个形状,一个由维度的长度组成的列表。所有张量都有一个大小,即张量中元素的总数。最后,它们的元素都被记录在一个统一的数据类型(datatype)中。让我们仔细看看这些特征。

维度

张量根据其维数进行分类:

  • Rank-0(标量)张量:包含单个值且没有轴的张量(0维);
  • Rank-1张量:包含单轴(一维)值列表的张量;
  • Rank-2张量:包含2个轴(2维)的张量;以及
  • Rank-N张量:包含N轴的张量(三维)。
cb0b75c18abd4e76b4adc3d80b6790c8

例如,我们可以通过向tf.constant传递一个三层嵌套的list对象来创建一个Rank-3张量。对于这个例子,我们可以将数字分割成一个3层嵌套的列表,每个层有3个元素:

three_level_nested_list = [[[0, 1, 2],                              [3, 4, 5]],                            [[6, 7, 8],                             [9, 10, 11]] ]rank_3_tensor = tf.constant(three_level_nested_list)print(rank_3_tensor)
Output:tf.Tensor( [[[ 0  1  2]                [ 3  4  5]]               [[ 6  7  8]                [ 9 10 11]]],  shape=(2, 2, 3), dtype=int32)

我们可以查看“rank_3_tensor”对象当前具有“.ndim”属性的维度数。

tensor_ndim = rank_3_tensor.ndimprint("The number of dimensions in our Tensor object is", tensor_ndim)
Output:The number of dimensions in our Tensor object is 3

形状

形状特征是每个张量都具有的另一个属性。它以列表的形式显示每个维度的大小。我们可以查看使用.shape属性创建的rank_3_tensor对象的形状,如下所示:

tensor_shape = rank_3_tensor.shapeprint("The shape of our Tensor object is", tensor_shape)
Output:The shape of our Tensor object is (2, 2, 3)

如你所见,我们的张量在第一层有两个元素,第二层有两个元素,第三层有三个元素。

大小

大小是张量的另一个特征,它意味着张量有多少个元素。我们不能用张量对象的属性来测量大小。相反,我们需要使用tf.size函数。最后,我们将使用实例函数.NumPy()将输出转换为NumPy,以获得更具可读性的结果:

tensor_size = tf.size(rank_3_tensor).numpy()print("The size of our Tensor object is", tensor_size)
Output:The size of our Tensor object is 12

数据类型

张量通常包含数字数据类型,如浮点和整数,但也可能包含许多其他数据类型,如复数和字符串。

但是,每个张量对象必须将其所有元素存储在一个统一的数据类型中。因此,我们还可以使用.dtype属性查看为特定张量对象选择的数据类型,如下所示:

tensor_dtype = rank_3_tensor.dtypeprint("The data type selected for this Tensor object is", tensor_dtype)
Output:The data type selected for this Tensor object is 

张量运算

索引

索引是项目在序列中位置的数字表示。这个序列可以引用很多东西:一个列表、一个字符串或任意的值序列。

TensorFlow还遵循标准的Python索引规则,这类似于列表索引或NumPy数组索引。

关于索引的一些规则:

  1. 索引从零(0)开始。
  2. 负索引(“-n”)值表示从末尾向后计数。
  3. 冒号(“:”)用于切片:开始:停止:步骤。
  4. 逗号(“,”)用于达到更深层次。

让我们用以下几行创建rank_1_tensor:

single_level_nested_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]rank_1_tensor = tf.constant(single_level_nested_list)print(rank_1_tensor)
Output: tf.Tensor([ 0  1  2  3  4  5  6  7  8  9 10 11],   shape=(12,), dtype=int32)

测试一下我们的规则1,2,3:

# 规则1,索引从0开始print("First element is:",  rank_1_tensor[0].numpy())# 规则2,负索引print("Last element is:",  rank_1_tensor[-1].numpy())# 规则3,切片print("Elements in between the 1st and the last are:",  rank_1_tensor[1:-1].numpy())
Output: First element is: 0 Last element is: 11 Elements in between the 1st and the last are: [ 1  2  3  4  5  6  7  8  9 10]

现在,让我们用以下代码创建rank_2_tensor:

two_level_nested_list = [ [0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11] ]rank_2_tensor = tf.constant(two_level_nested_list)print(rank_2_tensor)
Output:tf.Tensor( [[ 0  1  2  3  4  5]              [ 6  7  8  9 10 11]], shape=(2, 6), dtype=int32)

并用几个例子来测试第4条规则:

print("The 1st element of the first level is:",  rank_2_tensor[0].numpy())print("The 2nd element of the first level is:",  rank_2_tensor[1].numpy())# 规则4, 逗号代表进入更深层print("The 1st element of the second level is:",  rank_2_tensor[0, 0].numpy())print("The 3rd element of the second level is:",  rank_2_tensor[0, 2].numpy())
Output: The first element of the first level is: [0 1 2 3 4 5] The second element of the first level is: [ 6  7  8  9 10 11] The first element of the second level is: 0 The third element of the second level is: 2

现在,我们已经介绍了索引的基本知识,让我们看看我们可以对张量进行的基本操作。

张量基本运算

你可以轻松地对张量进行基本的数学运算,例如:

  1. 加法
  2. 元素乘法
  3. 矩阵乘法
  4. 求最大值或最小值
  5. 找到Max元素的索引
  6. 计算Softmax值

让我们看看这些运算。我们将创建两个张量对象并应用这些操作。

a = tf.constant([[2, 4],                  [6, 8]], dtype=tf.float32)b = tf.constant([[1, 3],                  [5, 7]], dtype=tf.float32)

我们可以从加法开始。

# 我们可以使用' tf.add() '函数并将张量作为参数传递。add_tensors = tf.add(a,b)print(add_tensors)
Output:tf.Tensor( [[ 3.  7.]              [11. 15.]], shape=(2, 2), dtype=float32)

乘法

# 我们可以使用' tf.multiply() '函数并将张量作为参数传递。multiply_tensors = tf.multiply(a,b)print(multiply_tensors)
Output:tf.Tensor( [[ 2. 12.]              [30. 56.]], shape=(2, 2), dtype=float32)

矩阵乘法:

# 我们可以使用' tf.matmul() '函数并将张量作为参数传递。matmul_tensors = tf.matmul(a,b)print(matmul_tensors)
Output:tf.Tensor( [[ 2. 12.]              [30. 56.]], shape=(2, 2), dtype=float32)

注意:Matmul操作是深度学习算法的核心。因此,尽管你不会直接使用matmul,但了解这些操作是至关重要的。

我们上面列出的其他操作示例:

# 使用' tf.reduce_max() '和' tf.reduce_min() '函数可以找到最大值或最小值print("The Max value of the tensor object b is:",  tf.reduce_max(b).numpy())# 使用' tf.argmax() '函数可以找到最大元素的索引print("The index position of the max element of the tensor object b is:",  tf.argmax(b).numpy())# 使用 tf.nn.softmax'函数计算softmaxprint("The softmax computation result of the tensor object b is:",  tf.nn.softmax(b).numpy())
Output:The Max value of the tensor object b is: 1.0 The index position of the Max of the tensor object b is: [1 1] The softmax computation result of the tensor object b is: [[0.11920291 0.880797  ]  [0.11920291 0.880797  ]]

操纵形状

就像在NumPy数组和pandas数据帧中一样,你也可以重塑张量对象。

这个变形操作非常快,因为底层数据不需要复制。对于重塑操作,我们可以使用tf.reshape函数

# 我们的初始张量a = tf.constant([[1, 2, 3, 4, 5, 6]])print('The shape of the initial Tensor object is:', a.shape)b = tf.reshape(a, [6, 1])print('The shape of the first reshaped Tensor object is:', b.shape)c = tf.reshape(a, [3, 2])print('The shape of the second reshaped Tensor object is:', c.shape)# 如果我们以shape参数传递-1,那么张量就变平坦化。print('The shape of the flattened Tensor object is:', tf.reshape(a, [-1]))
Output:The shape of our initial Tensor object is: (1, 6) The shape of our initial Tensor object is: (6, 1) The shape of our initial Tensor object is: (3, 2) The shape of our flattened Tensor object is: tf.Tensor([1 2 3 4 5 6], shape=(6,), dtype=int32)

如你所见,我们可以很容易地重塑我们的张量对象。但要注意的是,在进行重塑操作时,开发人员必须是合理的。否则,张量可能会混淆,甚至会产生错误。所以,小心点.

广播

当我们尝试使用多个张量对象进行组合操作时,较小的张量可以自动伸展以适应较大的张量,就像NumPy数组一样。例如,当你尝试将标量张量与秩2张量相乘时,标量将被拉伸以乘以每个秩2张量元素。参见以下示例:

m = tf.constant([5])n = tf.constant([[1,2],[3,4]])print(tf.multiply(m, n))
Output:tf.Tensor( [[ 5 10]              [15 20]], shape=(2, 2), dtype=int32)

多亏了广播,在对张量进行数学运算时,你不必担心大小匹配。

张量的特殊类型

我们倾向于生成矩形的张量,并将数值存储为元素。但是,TensorFlow还支持不规则或特殊的张量类型,这些类型包括:

  1. 参差不齐的张量
  2. 字符串张量
  3. 稀疏张量
80c0fd95e62943a186c184e00f26dacc

让我们仔细看看每一个都是什么。

参差不齐的张量

参差不齐张量是沿着尺寸轴具有不同数量元素的张量

可以构建不规则张量,如下所示

ragged_list = [[1, 2, 3],[4, 5],[6]]ragged_tensor = tf.ragged.constant(ragged_list)print(ragged_tensor)
Output:

字符串张量

字符串张量是存储字符串对象的张量。我们可以建立一个字符串张量,就像你创建一个普通的张量对象。但是,我们将字符串对象作为元素而不是数字对象传递,如下所示:

string_tensor = tf.constant(["With this",                              "code, I am",                              "creating a String Tensor"])print(string_tensor)
Output:tf.Tensor([b'With this'            b'code, I am'            b'creating a String Tensor'],  shape=(3,), dtype=string)

稀疏张量

最后,稀疏张量是稀疏数据的矩形张量。当数据中有空值时,稀疏张量就是对象。创建稀疏张量有点耗时,应该更主流一些。这里有一个例子:

sparse_tensor = tf.sparse.SparseTensor(indices=[[0, 0], [2, 2], [4, 4]],                                        values=[25, 50, 100],                                        dense_shape=[5, 5])# 我们可以把稀疏张量转换成密集张量print(tf.sparse.to_dense(sparse_tensor))
Output:tf.Tensor( [[ 25   0   0   0   0]            [  0   0   0   0   0]            [  0   0  50   0   0]            [  0   0   0   0   0]            [  0   0   0   0 100]], shape=(5, 5), dtype=int32)

结尾

我们已经成功地介绍了TensorFlow的张量对象的基础知识。

这应该会给你很大的信心,因为你现在对TensorFlow框架的基本知识了解得更多了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为手机怎么使用读卡器_华为手机使用小窍门

华为手机电池耐用,信号好,系统流畅,外观也一改以往的呆板现在追求时尚,所以深得国人的喜爱,也因为美国的打压激起了国人的爱国意识,华为在国内手机销量高居第一,使用的人很多。现在国产最好的手…

报告 | 数字孪生城市研究报告(2019年)

来源 :数据观数字孪生技术应用最早起源于工业领域,尤其飞机、火车发动机等高端制造领域,对产品、生产线和工艺等进行数字仿真、实时跟踪,研发周期大幅缩减,生产成本大幅降低,形成多设备互联、协同和优化的建…

win10开始不显示python_win10从零安装配置pytorch全过程图文详解

1.安装anaconda (anaconda内置python在内的许多package,所以不用另外下载python) 可以点击下面的清华开源软件镜像站,在官网下载anaconda不如在这下的快 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 镜像站 我下载的…

暗备用的运行状态_瞧:我利用“无偏二极管”发明设计出了【宇宙“暗物质”、“暗能量”探测器】...

《瞧:我利用“无偏二极管”发明设计出了【宇宙“暗物质”、“暗能量”探测器】》楔子:首先,我要在此留下“2020”——“爱你爱你”印迹的一张照片:这不是口罩而是爱!中国人以【爱家人、爱自己】这一特殊形式的“爱”战…

【必读】2019年深度学习自然语言处理最新十大发展趋势, 附报告下载

https://blog.floydhub.com/ten-trends-in-deep-learning-nlp/来源:专知2018年是基于深度学习的自然语言处理(NLP)研究发展快速的一年。在此之前,最引人注目的是Word2Vec,它于2013年首次发布。在此期间,深度学习模型在语言建模领域…

spring 事务隔离级别和传播行为_Spring事务的传播行为案例分析

网上关于Spring事务传播性以及隔离型的文章漫天盖地,还有不负责任的直接复制名词意思,文章虽然很多却是看的云里雾里,我们今天将给出案例分别和大家一起学习。1、spring给出经常面试的考点Spring事务的4个特性含义---这个很容易理解2、spring…

Science:睡眠剥夺影响大脑思考竟是因为蛋白质罢工了!

来源:生物探索睡眠会影响我们的思维,当我们获得充足的睡眠后,大脑思维会变得清晰;而当我们睡眠不足时,大脑会变得迟钝。那么进入睡眠状态后,大脑又是如何调整以保证睡醒后脑回路清晰的呢?近日&a…

element ui input视图没刷新_[Selenium自动化测试实战] 如何在UI自动化测试中加入REST API的操作...

问题当我们描述一个“好的自动化测试用例”时,经常出现标准是:精确。自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败。独立。自动化测试用例不应该受测试套件中任何其他测试用例…

语句中如何结束本循环进入下一循环_Python3基础语法(八)--控制循环 while...

一、while 简介Python 的循环有 for 和 while 两种&#xff0c;while 为条件控制循环&#xff0c;通过循环控制条件表达式控制循环结束。流程图如下&#xff1a;Python 中 while 语句的格式如下&#xff1a;while <条件表达式>:【语句块】释&#xff1a;当 while 的 <…

关于生命、宇宙和万事万物的42个终极问题

来源&#xff1a;世界科技创新论坛" 我们的宇宙是否稳定&#xff0c;黑洞熵的起源和温度是什么&#xff0c;爱因斯坦的相对论和标准场论总是有效的吗&#xff0c;时空几何中是否存在奇异的性质&#xff0c;化学、应用物理和科技的极限是什么……“在达到完全开悟的道路上&…

python decimal_【进阶】嫌弃Python慢,试试这几个方法?

(给机器学习算法与Python学习加星标&#xff0c;提升AI技能)选自towardsdatascience&#xff0c;作者&#xff1a;Martin Heinz本文转自机器之心(nearhuman2014)本文将介绍如何提升 Python 程序的效率&#xff0c;让它们运行飞快&#xff01;计时与性能分析在开始优化之前&…

王道8套有变化吗_求求你别再套花艺设计公式了

花艺设计也有公式吗&#xff1f;确实有花艺设计只有公式吗&#xff1f;并不是无论是哪门设计学科&#xff0c;公式这种东西&#xff0c;谈多了是否有种千篇一律的感觉&#xff1f;设计风格相似的花艺师要越来越多&#xff0c;一时间竟然以为都是一个人。就和网红一样&#xff0…

对象构造函数的原型图

对象的定义其实很广泛,万物皆为对象,我们创建对象一般都是用构造函数来创建的,这里我们来说说构造函数创建对象的原型图把. 这个问题有点抽象,举个例子来说,方便一点: 这是我们构造函数,这里我们要结合一张 图来说明就更清楚了,这里我们就用一个实例p1好了,其他两个就不用了. 这…

站在AI与神经科学交叉点上的强化学习

来源&#xff1a; 混沌巡洋舰一&#xff0c;强化学习概述让机器来决策&#xff0c;首先体现在如何模仿人类的决策。对于决策这个问题&#xff0c; 对于人类是困难的&#xff0c; 对于机器就更难。而强化学习&#xff0c; 就是一套如何学习决策的方法论。强化学习最初的体现就是…

澜起科技云计算服务器_服务器严重缺货!云应用大爆发!云计算正强势起爆(附龙头)...

催化因素&#xff1a;这两天全国上千万企业、近两亿人开启在家办公模式。阿里、华为、腾讯等各大网络办公平台纷纷告急。对云服务的需求大增也让服务器生产企业开足马力&#xff0c;春节假期里&#xff0c;山东浪潮集团就接到了1500台服务器的订单。目前&#xff0c;多家软件服…

车险赔付率分析报告_车险有变!价格…

各位车友请注意&#xff01;《商业车险综合示范条款(2020版征求意见稿)》于近日发布向社会公开征求意见从修订版条款的内容来看大幅删减了责任免除项目扩展了保险责任在最大化让利于消费者的同时努力提升消费者体验那么&#xff0c;此次修订版有哪些具体的亮点呢&#xff1f;一…

“众声喧哗”中的VR,谁来买单?

来源&#xff1a;VR每日必看未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&…

.npy文件_Numpy库使用入门(六)文件的存取

ERNIE&#xff1a;BERT&#xff0c;你看到我的npy了吗&#xff0c;我记得我放在这个文件夹里的呀(」&#xff1e;&#xff1c;)」BERT&#xff1a;就你还有npy&#xff1f;我还单着呢&#xffe3;へ&#xffe3;ERNIE&#xff1a;你想什么呢&#xff1f;我指的是numpy储存数据的…

redis rua解决库存问题_如何解决高并发下的库存安全问题,没你想得那么复杂(附源码)...

一、 问题不知道大家该开发中有没有遇到这样的一个问题&#xff0c;在电影院购票或者去网上买东西的时候&#xff0c;比方说当年哪吒大电影出来的时候&#xff0c;那抢票相当火爆啊&#xff0c;一票难求&#xff0c;那购票系统的后台是如何保证观众能买到自己喜欢的票同时不用担…

AI 白皮书:赢家、输家

来源&#xff1a;云头条引言&#xff1a;纵观历史&#xff0c;对企业界而言改变游戏规则的始终是技术。制造商取代手艺人&#xff0c;工厂从制造商手里接过接力棒&#xff0c;自动化和遥测技术取代大部分重复性的人力劳动。从个人计算机到互联网和移动商务&#xff0c;在过去的…