动手学习深度学习1

这个笔记是《动手学习深度学习》的学习笔记,github地址:动手学习深度学习)

数据操作

我们这部分先记录怎么进行数据操作

张量创建

首先我们先说学物理的都比较熟悉的张量,在TensorFlow我们先引入包:

1
import tensorflow as tf

首先可以使用range创建一个行张量,

1
x = tf.range(3)

可以访问shapr属性来访问张量的形状。

如果想要知道张量中元素的个数,可以使用size函数

1
2
3
4
x.shape
# 输出 (3,)
tf.size(x)
# 输出 3

可以使用reshape函数来改变张量的形状

1
2
x = tf.range(6)
x = x.reshape((2, 3))

使用reshape函数时,必须保证元素个数不变。

使用-1作为参数的时候,函数会自动计算出需要的维度,

1
2
x = tf.range(6)
x = tf.reshape(3-1)

有的时候我们想要使用一个所有元素都相等的张量,我们可以创建一个确定形状的张量,代码如下

1
2
3
tf.zeros((2,3,4))#创建一个形状为(2,3,4)的张量,所有元素都为0
tf.ones((2,3,4))#创建一个形状为(2,3,4)的张量,所有元素都为1
tf.fill((2,3,4), 5)#创建一个形状为(2,3,4)的张量,所有元素都为5

有的时候我们想要得到一个某个特定分布的随机采样来得到值,所以我们可以写这样的语句

1
tf.random.normal(shape=[3,4])

还可以提供包括数值的列表来为每一个数值提供确定的值,

1
tf.constant([[1,1,1],[1,1,1],[1,1,1]])

运算符

我们现在引入一些运算,这样我们就可以对张量进行操作了。对于具有相同形状的张量,我们引入

1
x + y, x - y, x * y, x / y ,x**y

这是按元素运算,我们还可以做更多的操作,比如一元操作符:

1
tf.exp(x)

这个是按元素求指数。

我们还可以将两个张量连接起来,使用tf.concat函数,这个函数需要两个参数,第一个是张量的列表,第二个是连接的维度。

1
tf.concat([x, y], axis=0)

我们有的时候会需要通过逻辑运算符构建二维张量,以X==Y为例,如果某个位置的元素相等,那么这个位置就为True,否则为False

对所有元素求和,会得到一个单元素张量

1
tf.reduce_sum(x)

有时我们需要对一个张量的某个维度求和,可以使用axis参数来指定维度,比如tf.reduce_sum(x, axis=0),这个会沿着第0个维度求和。

广播机制

广播机制允许不同形状的张量进行运算,比如

1
2
3
x = tf.random.normal((4, 1))
y = tf.random.normal((1, 3))
z = x + y

这个会自动将xy广播为(4,3)的形状,然后进行运算。

索引和切片

我们使用:来表示切片,比如x[1:3]表示第1到第2个元素,不包括第3个元素。

$\xi \zeta$

0%