神经网络与深度学习——TensorFlow实践(八)

第8讲 TensorFlow基础

tensorflow简介

端到端 开源(开放源代码,开放设计实现框架) 机器学习生态系统

tensorflow1.xtensorflow2.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=()
浮点数张量,默认float32

整数张量,默认int32

字符串:numpy=b"XXX",b表示这是字节串

python3字符串默认unicode,转成字节串加个b

注意:numpy创建数组时,浮点型默认为float64,tensorflow接收numpy数组时,将float64一起接收保存

张量对应的numpy数组obj.numpy();
转变张量数据类型

obj_new=tf.cast(obj,新的数据类型)
低精度向高精度转换,否则数据溢出发生错误
布尔型->整型:0:false   1:true

整型->布尔型:非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());

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值