第8讲 TensorFlow基础
tensorflow简介
端到端 开源(开放源代码,开放设计实现框架) 机器学习生态系统
tensorflow1.x | tensorflow2.x |
延迟执行,构建与执行分开 采用静态图优化 优点:效率高,便于优化 存在冗余重复的API,不利于共享,维护成本高 缺点:不够简洁
适用于:部署阶段
| 采用动态图执行机制,立即执行 保留静态图执行机制 优点:构建快 整合冗余API 将tf.keras作为训练构建模型标准的高级API 支持更多平台语言 缺点:执行效率低,不利于优化
适用于:调试阶段 |
注意:
在Tensorflow2.0环境中,运行Tensorflow1.x代码,常常会出现错误AttributeError:module 'tensorflow' has no attribute 'session'
可以使用如下代码:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
练习一
1下列说法中,错误的是_______。
A.Tensorflow1.x采用静态图机制
B.Tensorflow2.0默认采用动态图机制
C.在TensorFlow2.0中,不能够使用静态图
D.Tensorflow不仅可以应用于深度学习,还能实现大量机器学习算法
正确答案:C
2TensorFlow会自动检测GPU和CPU,并充分利用它们并行、分布的执行程序。
A.对
B.错
正确答案:A
3Tensorflow2.0采用的动态图机制,其执行效率要高于Tensorflow1.x的静态图机制。
A.对
B.错
正确答案:B
4在Tensorflow2.0中为了确保兼顾易用性和执行效率,在构建、训练和迭代模型阶段可使用动态图机制,在部署阶段可采用静态图机制。
A.对
B.错
正确答案:A
Tensor多维数组---张量
Tensor对象操作:
导入 | import tensorflow as tf |
张量(Tensor对象)创建 | obj=tf.constant(数组/python数组/Numpy数组,数据类型,形状) 为数字时,shape=() 整数张量,默认int32 字符串:numpy=b"XXX",b表示这是字节串 python3字符串默认unicode,转成字节串加个b 注意:numpy创建数组时,浮点型默认为float64,tensorflow接收numpy数组时,将float64一起接收保存 |
张量对应的numpy数组 | obj.numpy(); |
转变张量数据类型 | obj_new=tf.cast(obj,新的数据类型) 整型->布尔型:非0都是true |
将其他类型转成Tensor对象 | na=np.arrange(6).reshape(2,3) ta=tf.convert_to_tensor(na) |
是否是Tensor对象 | result=tf.is_tensor(na);//结果是布尔型 |
是否是该类型的对象 | result2=na.isinstance(na,tf.Tensor); |
创建特殊的张量:
创建全是0的张量 | t_zero=tf.zeros(形状,数据类型); |
创建全是1的张量 | t_one=tf.ones(形状,数据类型); |
创建元素相同的张量 | t_same=tf.fill(dims=形状,value=填充数字); 没有数据类型,根据填充的数字,自动判断数据类型 t_same2=tf.constant(value=填充数字,shape=形状) |
创建随机数张量—正态分布 | r_normal=tf.random.normal(形状,均值,标准差,数据类型(默认32位浮点数)) |
创建随机数张量—截断正态分布 | r_t_normal=tf.random.truncated_normal(形状,均值,标准差,数据类型) 返回一个截断得得正态分布,截断的标准是2倍的标准差 eg:tf.truncated_normal()不可能出现[-2,2]外的点(均值0,标准差1)
|
设置随机种子 | tf.random.set_seed(数字) 设置随机种子,可以产生同样的随机张量 |
创建随机数张量—均匀分布 | t_uniform=tf.random.uniform(形状,最小值,最大值,数据类型) 数据范围前闭后开,不包括最大值 |
随机打乱 | tf.random.shuffle(r_normal) 参数为张量,随机打乱第一维 |
创建序列 | tf.range(起始数字,结束数字,步长,数据类型) 数字范围前闭后开,不包含结束数字 |
练习二
1可以在JupyterNotbook中直接使用_______命令,来更新Tensorflow版本。
A.!pip install -upgrade tensorflow
B.pip install --upgrade tensorflow
C.!pip install --upgrade tensorflow
D.pip install -upgrade tensorflow
正确答案:C
2下列说法中,错误的是_______。
A.Python列表中的元素必须使用相同的数据类型
B.TensorFlow张量可以运行于GPU和TPU上
C.Python列表不适合用来做多维数组数值计算
D.NumPy数组不支持GPU运算
正确答案:A
3下列说法中,错误的是_______。
A.Tensorflow2.0中所有的张量都可以通过.numpy()方法,得到其对应的NumPy数组
B.改变张量中的数据类型时,一般是将低精度的数据向高精度的转换
C.tf.constant()创建张量时,value参数可以为数字、Python列表或Numpy数组等
D.TensorFlow创建浮点数张量时,默认的浮点数是64位
正确答案:D
4执行下列代码后,得到的结果是_______。
import tensorflow as tf
import numpy as np
a = np.arange(12).reshape(3,4)
b = tf.convert_to_tensor(a)
print(tf.is_tensor(a))
print(tf.is_tensor(b))
A.False
True
B.False
False
C.True
True
D.True
False
正确答案:A
5下列_______函数可以用来改变张量中元素的数据类型。
A.tf.constant()
B.tf.cast()
C.tf.is_tensor()
D.tf.convert_to_tensor()
正确答案:B
6下列_______语句不能用来创建数据类型为int32,shape为2×3且元素值全为1的张量。
A.tf.ones([2, 3], tf.int32)
B.tf.zeros(shape=(2,3),dtype=tf.int32)
C.tf.fill([2, 3], 1)
D.tf.constant(1, shape=[2,3])
正确答案:B
7运行下面程序,结果正确的是_______。
import tensorflow as tf
import numpy as np
tf.constant(np.array([1.0, 2.0]))
A.<tf.Tensor: id=9, shape=(2,), dtype=float64, numpy=array([1., 2.])>
B.<tf.Tensor: id=9, shape=(1,2), dtype=float64, numpy=array([1., 2.])>
C.<tf.Tensor: id=9, shape=(2,), dtype=float32, numpy=array([1., 2.])>
D.<tf.Tensor: id=9, shape=(2,1), dtype=float32, numpy=array([1., 2.])>
正确答案:A
8下列函数中,_______用于创建元素取值符合截断正态分布的张量。
A.tf.random.normal()
B.tf.normal.truncated_normal()
C.tf.random.uniform()
D.tf.random.set_seed()
正确答案:B
9执行_______语句可以创建一个10以内的奇数序列。
A.tf.range(1, 9, delta=2)
B.tf.range(10, delta=2)
C.tf.range(1, 10,delta=2)
D.tf.range(1, 10, delta=1)
正确答案:C
10下列_______函数可以用来获取张量中的元素总数。
A.tf.shape()
B.tf.size()
C.tf.rank()
D.tf.ndim()
正确答案:B
11下列关于tf.random.shuffle()函数,说法错误的是_______。
A.该函数的作用是随机打乱数据
B.当参数为张量时,会随机打乱张量的第一维
C.该函数的参数可以是Python列表或Numpy数组
D.通过设置维度,可以随机打乱张量的指定维度
正确答案:D
12tf.__version__可以用来查看当前Tensorflow的版本号。
A.对
B.错
正确答案:A
13在TensorFlow2.0中,可以直接运行TensorFlow1.x的代码。
A.对
B.错
正确答案:B
14在TensorFlow中,所有的运算都是在张量之间进行的,张量既可以运行于CPU,也可以运行于GPU和TPU中。
A.对
B.错
正确答案:A
张量的逻辑结构——视图
改变维度 | tf.reshape(张量,形状); shape形状参数=-1,自动推导出长度 | 只改变视图,不改变存储 |
增加维度 | t_add=tf.expand_dims(张量,axis轴的索引) | |
删除维度 | t_sub=tf.squeeze(原始张量,axis=None要删除的维度) axis=None 只能删除长度为1的维度 axis参数省略时删除所有长度为1 的维度 | |
交换维度 | tf.transpose(张量,轴的索引顺序) 对二位张量交换维度,就是矩阵的转置 改变轴的顺序,从而改变张量形状 x=tf.constant([[1,2,3],[4.5.6]]); tf.transpose(x,perm=[1,0]); | 不仅改变视图 而且改变存储 |
拼接张量 | tf.concat(张量,axis轴的索引) 将多个张量在某个维度上合并 拼接并不会产生新的维度 | |
分割张量 | tf.split(待分割张量,分割方案,指明分割的轴) 将一个张量拆分成多个张量,分割后维度不变 分割方案: 是一个数值时,表示等长分割,数值是切割的份数 是一个列表时,标识不等长切割,列表中是切割后每份的长度 | |
堆叠张量 | x=tf.stack(要堆叠的多个张量,axis指定插入新维度的位置) eg: x=tf.stack((x,x),axis=0) 在合并张量时,创建一个新的维度 和Numpy中堆叠函数的功能完全一样 | |
分解张量 | tf.unstack(值,axis轴) eg: c=tf.constant([[1,2,3],[4,5,6]]) c_1,c_2=tf.unstack(c,axis=0) 张量堆叠的逆运算 张量分解为多个张量 分解后得到的每个张量,和原来的张量相比,维度都少了一维 |
练习三
1下列说法中正确的是_______。
A.多维张量在物理上以一维的方式连续存储
B.多维张量进行维度变换时,一定会改变内存中的存储顺序
C.使用tf.reshape()进行形状变换时,改变了张量的存储顺序
D.增加维度和删除维度不会改变张量的视图
正确答案:A
2下面对程序输出结果的描述中,错误的是_______。
import tensorflow as tf
a = tf.range(18)
b = tf.reshape(a, [2, 3, -1])
A.a是Tensor对象
B.a的形状为(2, 3, 2)
C.b是一个三维张量
D.b数据类型为int32
正确答案:B
3对下列函数的功能描述中,错误的是_______。
A.tf.expand_dims():增加维度
B.tf.squeeze():删除维度
C.tf.transpose():交换维度
D.tf.concat():堆叠维度
正确答案:D
4执行下列程序段,结果正确的是_______。
import tensorflow as tf
t1 = tf.constant([[[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8]],
[[ 9, 10, 11],[12, 13, 14],[15, 16, 17]]])
t2 = tf.expand_dims(t1, -4)
print(t2.shape)
A.(1, 2, 2, 3)
B.(1, 2, 3, 3)
C.(2, 1, 3, 3)
D.(2, 3, 3, 1)
正确答案:B
5下列关于维度变换的说法中,错误的是_______。
A.使用tf.stack()函数堆叠张量时,会创建一个新的维度
B.使用tf.squeeze()函数删除维度时,只能删除长度为1的维度
C.使用tf.concat()函数拼接张量时,会创建一个新的维度
D.使用tf.split()函数分割张量后,其维度不变
正确答案:C
6执行下面程序段,张量c的值是_______。
import tensorflow as tf
a = tf.range(8)
b = tf.reshape(a, [4, 2])
c=tf.transpose(b, (1,0))
A.[[0, 2, 4, 6], [1, 3, 5, 7]]
B.[[0, 1], [2, 3], [4, 5], [6, 7]]
C.[[0, 1, 2, 3], [4, 5, 6, 7]]
D.[[0, 2],[4, 6],[1, 3],[5, 7]]
正确答案:A
7执行下列程序段后,正确的结果是_______。
import tensorflow as tf
a = [[1, 1, 1], [2, 2, 2]]
b = [[3, 3, 3], [4, 4, 4]]
c=tf.concat( [a, b], 1)
print(c.numpy())
A.[[1 1 1 3 3 3] [2 2 2 4 4 4]]
B.[[1 1 1] [2 2 2] [3 3 3] [4 4 4]]
C.[[1 1 1 2 2 2] [3 3 3 4 4 4]]
D.[[1 1 1] [3 3 3] [2 2 2] [4 4 4]]
正确答案:A
8使用tf.squeeze()函数删除维度,若省略axis参数,则会删除所有长度为1的维度。
A.对
B.错
正确答案:A
9使用tf.unstack()函数分解张量,分解后得到的每个张量,和原来的张量相比减少一维。
A.对
B.错
正确答案:A
部分采样
索引 | #一维变量 a[1] #二维变量 b[1][1] b[1,1] #三位变量 c[1][1][1] c[1,1,1] |
切片 | 起始位置:结束位置:步长
起始位置:结束位置,是前闭后开的,切片中不包含结束位置 起始位置、结束位置、步长都可以省略 步长可以是负数,这时起始位置的索引号,应该大于结束位置
#一维张量切片 a[::-1]从最后一个元素开始,逆序取出所有元素
#二维张量切片 维度之间可以用逗号隔开 iris[0,:]读取第一个样本的所有列(属性和标记) iris[0:5,0:4]
#三维张量切片 mnist[0,::,::]] mnist[0:10,0:28:2,:]
#四维张量切片 image[0:2,0:512:2,:,2] 采用切片的方式,只能进行连续的、或者有规律的采样 |
数据提取 | 根据索引,抽取出没有规律的,特定的数据 |
gather(输入张量,索引值列表) 一次对一个维度进行索引 eg: a=tf.range(5) a=tf.gather(a,indices=[0,2,3]) 用一个索引列表,将给定的张量中对应索引值的元素提取出来
| |
gather(输入张量,axis说明采样在哪个轴,索引值列表) 对多维张量采样 a=tf.range(20) a=tf.reshape(a,[4,5]) a=tf.gather(a,axis=0,indices=[0,2,3]) | |
gather_nd(张量,点的坐标) eg: tf.gather_nd(a,[[0,0],[1,1],[2,2]]) 通过指定坐标,同时采样多个点 可以同时对多个维度进行索引 |
练习四
1下列关于切片的描述,正确的是_______。
A.步长不能为负数,且起始位置的索引号,应该小于结束位置
B.起始位置:结束位置,是前闭后闭的
C.当起始位置、结束位置省略时,表示读取所有数据
D.起始位置、结束位置可以省略,步长不可以省略
正确答案:C
2使用索引读取MNIST数据集中train_x训练集,下列语句描述正确的是_______。
A.train_x[0]:取第1张图片中的数据
B.train_x[2][1] :取第2张图片中的第1行
C.train_x[0][1][2]:取第1张图片中的第2行的第1列
D.train_x[2][1] :取第1张图片中的第2行
正确答案:A
3下列关于采样的说法中,错误的是_______。
A.采用切片的方式,只能进行连续的或者有规律的采样
B.gather()函数可以同时对多个维度进行索引
C.gather_nd()函数通过指定采样的坐标,来同时采样多个点
D.gather_nd()函数可以同时对多个维度进行索引
正确答案:B
4下面程序的执行结果后,得到的张量切片是_______。
import tensorflow as tf
t = tf.range(10)
t[3::-1]
A.[3, 4, 5, 6, 7, 8, 9]
B.[9, 8, 7]
C.[2, 1, 0]
D.[3, 2, 1, 0]
正确答案:D
5对手写数字数据集MNIST中的train_x训练集(60000,28,28)进行切片,下面对切片结果描述错误的是_______。
import tensorflow as tf
import numpy as np
mnist = tf.keras.datasets.mnist
(train_x, train_y), (test_x, test_y) = mnist.load_data()
A.train_x[0, :, :]:第1张图片
B.train_x[0:10, :, :]:前10张图片
C.train_x[:, 0:28:2, :]:对所有图片隔行采样
D.train_x[0:28:2, :, :]:对所有图片隔列采样
正确答案:D
6执行下列程序段后,输出的结果是_______。
import tensorflow as tf
a = tf.range(6)
b = tf.reshape(a, [3, 2])
c=tf.gather(b, axis=0, indices=[0, 2])
print(c.numpy())
A.[[0 1] [4 5]]
B.[[0 1] [2 3]]
C.[[2 3] [4 5]]
D.[[0 1] [2 3] [4 5]]
正确答案:A
张量运算
加减乘除 | |
tf.add(x,y) | 将x和y逐元素相加 |
tf.subtract(x,y) | 将x和y逐元素相减 |
tf.multiply(x,y) | 将x和y逐元素相乘 |
tf.divide(x,y) | 将x和y逐元素相除 |
tf.math.mod(x,y) | 对x逐元素取模 |
幂指对数 | |
tf.pow(x,y) | 对x求y的幂次方 |
tf.square(x) | 对x逐元素求计算平方 |
tf.sqrt(x) | 对x逐元素开平方 |
tf.exp(x) | 计算e的x次方 |
tf.math.log(x) | 计算自然对数,底数为e 没有提供以其他数值为底数的对数运算函数,可以利用换底公式实现 |
其他运算 | |
tf.sign(x) | 返回x的符号 |
tf.abs(x) | 对x逐元素求绝对值 |
tf.negative(x) | 对x逐元素求相反数,y=-x |
tf.reciprocal(x) | 取x的倒数 |
tf.logical_not(x) | 对x逐元素求逻辑非 |
tf.ceil(x) | 向上取整 |
tf.floor(x) | 向下取整 |
tf.rint(x) | 取最接近的整数 |
tf.round(x) | 对x逐元素求舍最接近的整数---四舍五入 |
tf.maximum(x,y) | 返回两tensor中的最大值 |
tf.minimum(x,y) | 返回两tensor中的最小值 |
三角函数和反三角函数 | |
tf.cos(x) | 三角函数cos |
tf.sin(x) | 三角函数sin |
tf.tan(x) | 三角函数tan |
tf.acos(x) | 反三角函数arccos |
tf.asin(x) | 反三角函数arcsin |
tf.atan(x) | 反三角函数arctan |
广播机制
一维张量+二维张量 | 两个张量最后一个维度的长度必须相等 |
一维张量+三维张量 | |
数字+N维张量 | 当一个张量和数字进行运算时,会将这个数字值广播到张量的各个元素 |
张量与numpy数组之间的相互转换
NumPy数组转化为张量 | tf.constant(); tf.convert_to_tensor(); |
张量转换为NumPy数组 | Tensor.numpy() |
执行Tensorflow操作,Tensorflow将自动把Numpy数组转换为张量 nd=np.ones([2,2]) t=tf.multiply(nd,36)
执行NumPy操作,NumPy将自动的张量转换为NumPy数组 np.add(nd,t)
使用运算符操作 只要操作符中有一个Tensor对象,就把所有的操作数都转换为张量,然后再进行运算 | |
向量乘法@ | tf.matmul(a,b) a@b |
多维向量乘法——三维张量*二维张量 | 最后两维做向量乘法 高维采用广播机制 (2,3,5)*(5,4)——>广播—>(2,3,4) |
数据统计:求张量在某个维度上、或者全局的统计值 | |
tf.reduce_sum(输入张量,axis轴) | 求和 |
tf.reduce_mean(输入张量,axis轴) | 求平均值 |
tf.reduce_max(输入张量,axis轴) | 求最大值 |
tf.reduce_min(输入张量,axis轴) | 求最小值 |
tf.argmax() tf.argmin() | 求最值的索引 a= tf.argmax(a,axis=0) numpy=array([1,0,1])
tf.argmax(a,axis=1) numpy=array([1,2]) |
练习五
1下列_______方法可以将张量x和y逐元素相乘。
A.tf.add(x, y)
B.tf.sub(x, y)
C.tf.multiply(x, y)
D.tf.divide(x,y)
正确答案:C
2关于张量的幂指对数运算,下列描述正确的是_______。
A.tf.square(x):对x逐元素计算平方根
B.tf.pow(x, y):对x求y的幂次方
C.tf.math.log(x):计算以10为底,x的对数
D.tf.exp(x):计算x的e次方
正确答案:B
3下面程序段中,能够正确执行的是_______。
A.import tensorflow as tf
tf.exp(3)
B.import tensorflow as tf
tf.exp(3.)
C.import tensorflow as tf
x = tf.constant(256.)
tf.log(x)
D.import tensorflow as tf
x = tf.constant(78.)
tf.pow(x)
正确答案:B
4下列关于张量运算的说法中,错误的是_______。
A.在使用运算符时,如果操作数中有一个是张量对象,那么就把所有的操作数都转化为张量,然后再进行运算
B.两个不同维度的张量相加,其最后一个维度的长度可以不相等
C.当张量和一个数字进行运算时,会将这个数组值广播到张量的各个元素
D.张量和NumPy数组共同参与运算时,它们之间可以自动进行转换
正确答案:B
5执行以下程序段,对执行结果描述正确的是_______。
import tensorflow as tf
import numpy as np
a = tf.constant(np.arange(4),shape=(2,2))
b = tf.constant(np.arange(4),shape=(2,2))
c = a@b
d = tf.multiply(a,b)
print("c:",c.numpy())
print("d:",d.numpy())
A.c:[[2 3][6 11]]
d:[[2 3][6 11]]
B.c:[[0 1][4 9]]
d:[[2 3][6 11]]
C.c:[[0 1][4 9]]
d:[[0 1][4 9]]
D.c:[[2 3][6 11]]
d:[[0 1][4 9]]
正确答案:D
6执行下列程序段后,得到的结果是_______。
import tensorflow as tf
import numpy as np
a = tf.constant(np.arange(24).reshape(4,2,3))
b = tf.constant(np.arange(6).reshape(3,2))
c = a@b
print(c.shape)
A.(3, 2, 3)
B.(4, 2, 3)
C.(4, 2, 2)
D.(3, 2, 2)
正确答案:C
7下列选项中,对函数的执行结果描述错误的是_______。
import numpy as np
a = tf.constant(np.arange(6), shape=(2,3))
A.执行语句tf.reduce_sum(a, axis=1)后,输出张量的值为[3, 12]
B.执行语句tf.reduce_mean(a)后,输出张量的值为2.5
C.执行语句tf.reduce_max(a, axis=0)后,输出张量的值为[3, 4, 5]
D.执行语句tf.reduce_min(a)后,输出张量的值为为0
正确答案:B
8执行以下程序段后,输出的结果是_______。
import numpy as np
a = tf.constant([[2, 5, 1], [3, 4, 6]])
b = tf.argmax(a)
print(b.numpy())
A.[1 2]
B.[1 0 1]
C.[3 5 6]
D.[5 6]
正确答案:B
9TensorFlow2.0中,只提供了以e为底的自然对数运算,如果需要计算以其他底数的对数运算,可以利用换底公式来实现。
A.对
B.错
正确答案:A
10多维向量乘法运算时,会先用张量的最后两维做向量乘法,然后高维采用广播机制,得到运算结果。
A.对
B.错
正确答案:A
单元测试
1下列说法中,错误的是 。
A.Numpy数组存储在一个连续的内存区域中
B.Numpy数组中的元素必须使用相同的数据类型
C.TensorFlow张量可以高速运行于GPU和TPU之上
D.Python列表非常适合用来做数值计算
正确答案:D
2下列关于TensorFlow的说法中,错误的是 。
A.TensorFlow会自动检测GPU和CPU,并充分利用它们高速执行程序
B.TesnsorFlow2.0默认使用动态图机制
C.Tensorflow2.0中默认采用动态图机制,其执行效率要高于静态图机制
D.Tensorflow不仅可以应用于深度学习,还能实现大量机器学习算法
正确答案:C
3下列关于TensorFlow张量的说法中,错误的是 。
A.TensorFlow张量可以高速运行于GPU和TPU之上
B.改变张量中的数据类型时,一般是将低精度的数据向高精度的转换
C.TensorFlow创建浮点数张量时,默认的浮点数是32位
D.对张量进行分割或拼接后,张量的存储顺序会发生改变
正确答案:D
4执行下面程序段,对运行结果描述正确的是 。
import tensorflow as tf
a = tf.constant(1234567, dtype=tf.float32)
tf.cast(a, tf.float64)
A.<tf.Tensor: id=11, shape=(1,), dtype=float64, numpy=1234567.0>
B.程序报错
C.<tf.Tensor: id=11, shape=(), dtype=float32, numpy=1234567.0>
D.<tf.Tensor: id=11, shape=(), dtype=float64, numpy=1234567.0>
正确答案:D
5执行下列程序段后,得到的结果是 。
import tensorflow as tf
import numpy as np
a = np.arange(9).reshape(3,3)
b = tf.convert_to_tensor(a)
print(tf.is_tensor(a))
isinstance(b,tf.Tensor)
得分/总分
A.True
False
B.False
True
C.False
False
D.True
True
正确答案:B
6执行下列程序段,对其结果描述错误的是 。
import tensorflow as tf
tf.random.truncated_normal(shape=(2, 2), mean=0.0, stddev=2.0)
A.生成的随机张量的数据类型为float32
B.生成的张量中可能出现[-4,4]以外的点
C.每次运行的结果都不同
D.生成的随机张量形状为(2, 2)
正确答案:B
7下列说法中,正确的是 。
A.使用tf.split()函数分割张量后,其维度不变
B.使用tf.gather()函数一次可以对多个维度进行索引
C.使用tf.concat()函数拼接张量后,会增加张量的维度
D.使用tf.squeeze()函数删除维度时,可以删除指定的任意维度
正确答案:A
8下列关于张量运算的说法中,错误的是 。
A.在使用运算符时,如果操作数中有一个是张量对象,那么就把所有的操作数都转化为张量,然后再进行运算
B.张量和NumPy数组共同参与运算时,它们之间可以自动进行转换
C.两个不同维度的张量相加,其最后一个维度的长度可以不相等
2.00/2.00
D.当张量和一个数字进行运算时,会将这个数组值广播到张量的各个元素
正确答案:C
9执行下面程序段后,正确的结果是 。
import tensorflow as tf
a = tf.range(8, delta=2)
a1 = tf.reshape(a, [-1,2])
b = tf.range(1, 9,delta=2)
b1 = tf.reshape(b, [2,-1])
c = tf.stack((a1, b1),axis=0)
print("shape:\n",c.shape)
print("value:\n",c.numpy())
A.shape:
(2, 4)
value:
[[0 2 4 6]
[1 3 5 7]]
B.shape:
(2, 2, 2)
value:
[[[1 3]
[5 7]]
[[0 2]
[4 6]]]
C.shape:
(2, 4)
value:
[[1 3 5 7]
[0 2 4 6]]
D.shape:
(2, 2, 2)
value:
[[[0 2]
[4 6]]
[[1 3]
[5 7]]]
正确答案:D
10运行下面程序段,结果正确的是 。
import tensorflow as tf
t1 = tf.constant([[1, 2, 3], [4, 5, 6]])
t2 = tf.constant([[7, 8, 9], [10, 11, 12]])
t = tf.stack((t1, t2), axis=-1)
print(t.shape)
A.(2, 2, 3)
B.(2, 3, 3)
C.(2, 3, 2)
D.(2, 3, 3)
正确答案:C
11下面程序段的执行结果为 。
import tensorflow as tf
a = tf.range(6)
a1 = tf.reshape(a, [2, 3])
b = tf.constant([[7, 8, 9], [10, 11, 12]])
b1 = tf.gather(b, axis=1, indices=[1, 2, 0])
c = a1*b1
print(c.numpy())
A.[[ 0 9 16] [30 48 55]]
B.[[ 0 8 0] [30 44 0]]
C.[[ 0 8 18] [30 44 60]]
D.[[ 0 9 14] [33 48 50]]
正确答案:D
12对下列程序段的执行结果,描述错误的是 。
import tensorflow as tf
x = tf.constant([1., 4., 9., 16.])
pow(x, 0.5)
A.pow(x, 0.5)的作用是对张量x逐元素求平方根
B.输出张量的shape为(1,)
C.张量数据类型为float32
D.其结果为[1., 2., 3., 4.]
正确答案:B
13下列程序段的执行结果为 。
import tensorflow as tf
a = tf.range(24)
b = tf.reshape(a,[4,6])
c = tf.gather_nd(b,[[0,0],[1,1],[2,2]])
print(c.numpy())
A.[ 0 7 14]
B.[ 0 1 2]
C.[ 0 6 12]
D.[ 1 8 15]
正确答案:A
14执行下列程序段后,得到的结果是 。
import tensorflow as tf
import numpy as np
a = tf.constant(np.arange(48).reshape(3,2,4,2))
b =tf.random.shuffle(a)
c = tf.constant(np.arange(8).reshape(2,4))
d = a@c
print(d.shape)
A.(3, 4, 4, 2)
B.(3, 4, 4)
C.(3, 2, 2, 2)
D.(3, 2, 4, 4)
正确答案:D
15下列程序段的执行结果为 。
import tensorflow as tf
import numpy as np
a = tf.constant([[1., 2., 3.],[4., 5., 6.]])
b = tf.random.shuffle(a)
c = tf.constant(np.arange(6), shape=(3,2) ,dtype=tf.float32)
d = tf.reduce_mean(b@c, axis=0)
e = tf.argmin(d,axis=0)
print("d_value:",d.numpy())
print("e_value:",e.numpy())
A.d_value: [25 35]
e_value: 0
B.d_value: [50. 71.]
e_value: 1
C.d_value: [25. 35.5]
e_value: 0
D.d_value: [25. 35.5]
e_value: 1
正确答案:C
单元作业一
import tensorflow as tf x=[ 64.3, 99.6, 145.45, 63.75, 135.46, 92.85, 86.97, 144.76, 59.3, 116.03] y=[ 62.55, 82.42, 132.62, 73.31, 131.05, 86.57, 85.49, 127.44, 55.25, 104.84] x=tf.convert_to_tensor(x); y=tf.convert_to_tensor(y); x_arg=tf.reduce_mean(x,axis=0); y_arg=tf.reduce_mean(y,axis=0); x_diff=x-x_arg; y_diff=y-y_arg; xy_diff_sum=tf.reduce_sum(x_diff*y_diff); x_diff_2=tf.pow(x_diff,2); xx_diff_sum=tf.reduce_sum(x_diff_2); w=xy_diff_sum/xx_diff_sum; b=y_arg-w*x_arg; print("w:",w.numpy()) print("b:",b.numpy());
运行结果:
单元测试二
import tensorflow as tf x=[ 64.3, 99.6, 145.45, 63.75, 135.46, 92.85, 86.97, 144.76, 59.3, 116.03] y=[ 62.55, 82.42, 132.62, 73.31, 131.05, 86.57, 85.49, 127.44, 55.25, 104.84] n=len(x); xy_sum=tf.reduce_sum(tf.multiply(x,y)); xx_sum=tf.reduce_sum(tf.pow(x,2)); x_sum=tf.reduce_sum(x); y_sum=tf.reduce_sum(y); w=(n*xy_sum-x_sum*y_sum)/(n*xx_sum-tf.pow(x_sum,2)); b=(y_sum-w*x_sum)/n; print("w=",w.numpy()); print("b=",b.numpy());
运行结果: