动手学深度学习 2

第二章 预备知识

2.1

2.2 数据操作
在深度学习中,我们通常会频繁地对数据进行操作。做为动手学深度学习的基础,本节将介绍如何对内存中的数据进行操作。
在TensorFlow中,tensor是一个类,也是存储和变换数据的主要工具。如果你之前用过NumPy,你会发现tensor和NumPy的多维数组非常类似。然而,tensor提供GPU计算和自动求梯度等更多功能,这些使tensor更加适合深度学习。
import tensorflow as tf
print(tf.__version__)
1.12.0

2.2.1 创建tensor
我们先介绍tensor的最基本功能,我们用arange函数创建一个行向量
x = tf.constant(range(12))
我们可以通过shape属性来获取tensor实例的形状。
print(x.shape)
(12,)

这时返回了一个tensor实例,包含了从0开始的12个连续整数。
print(x)
Tensor("Const_9:0", shape=(12,), dtype=int32)

我们也能够通过len得到tensor实例中元素(element)的总数。(注:tf1.0没有len函数)

下面使用reshape函数把行向量x的形状改为(3,4),页就是一个3行4列的矩阵,并记作X。除了形状改变之外,X中的元素保持不变。
X=tf.reshape(x,(3,4))
print(X)
Tensor("Reshape_5:0", shape=(3, 4), dtype=int32)

注意X属性中的形状发生了变化,上面x.reshape(3,4))也可写成x.reshape((-1,4))或x.reshape((3,-1))。由于元素个数是已知的,这里的-1是能够通过元素个数和其他维度的大小推断出来的。接下来,我们创建一个元素为0,形状为(2,3,4)的张量。实际上,之前创建的向量和矩阵都是特殊的张量。
tf.zeros((2,3,4))
Tensor("zeros_3:0", shape=(2, 3, 4), dtype=float32)

类似地,我们可以创建各元素为1的张量。
tf.ones((3,4))
Tensor("ones_2:0", shape=(3,), dtype=uint8)

我们页可以通过PYthon的列表(list)指定需要创建的tensor中每个元素的值。
Y = tf.constant([[2,1,4,5],[1,2,3,4],[4,3,2,1]])
print(Y)
Tensor("Const_10:0", shape=(3, 4), dtype=int32)

有些情况下,我们需要随机生成tensor中每个元素的值。下面我们创建一个形状为(3,4)的tensor。它的每个元素都随机采样于均值为0、标准差为1的正太分布。
tf.random.normal(shape=[3,4],mean=0,stddev=1)
Tensor("random_normal:0", shape=(3, 4), dtype=float32)

2.2.2 运算
tensor支持大量的运算符(operator)。例如,我们可以对之前创建的两个形状为(3,4)的tensorflow做加法,所得结果形状不变
print(X+Y)

按元素乘法:
print(X*Y)

按元素除法:
print(X/Y)

按元素做指数运算:
Y = tf.cast(Y,tf.float32)
print(tf.exp(Y))

除了按元素计算外,我们还可以使用matmul函数做矩阵乘法,下面将X与Y的转置做矩阵乘法。由于X是3行4列的矩阵,Y转置为4行3列的矩阵,因此两个矩阵相乘得到3行3列的矩阵。
Y = tf.cast(Y, tf.int32)
print(tf.matmul(X, tf.transpose(Y))

我们也可以将多个tensor连接(concatenate)。下面分别在行上(维度0,即形状的最左边元素)和列上(维度1,即形状左起第二个元素)连接两个矩阵。可以看到,输出的第一个tensor在维度0的长度为两个矩阵在维度0的长度之和,而输出的第二个tensor在维度1的长度为两个输入矩阵在维度1的长度之和。
print(tf.concat([X,Y],axis=0))
print(tf.concat([X,Y],axis=1))

使用条件判断式可以得到元素为0或1的新的tensor。以X==Y为例,如果X和Y在相同位置的判断条件为真(值相等),那么新的tensor在相同位置的值为1;反之为0。
tf.equal(X,Y)

对tensor中的所有元素求和得到只有一个元素的tensor。
tf.reduce_sum(X)
tf.norm(X)

猜你喜欢

转载自www.cnblogs.com/laojifuli/p/12125176.html