Python深度学习入门之Tensorflow2.0张量操作

Tensorflow深度学习框架最重要的加速计算功能,就是通过在cuda上定义Tensor类型数据,利用GPU对神经网络进行计算加速。本文主要介绍Tensorflow2.0的一些Tensor张量数据类型的操作。

注:Tensorflow1.X语法繁琐复杂,各版本之间兼容性极差,相差一个小版本写的代码就极有可能无法运行,在tf2.0以后版本API偏向Keras风格,更易使用,且兼容性问题有所改善。

1 tf2.0与numpy的相互转换

import tensorflow as tf
import numpy as np
#numpy转tf
#in:
tf.convert_to_tensor(np.ones((2,2)), tf.float32) # tf.constant()等同
#out:
<tf.Tensor: id=2, shape=(2, 2), dtype=float32, numpy=
array([[1., 1.],
       [1., 1.]], dtype=float32)>

#in:
a = tf.convert_to_tensor(np.ones((2,2)), tf.float32)
tf.zeros(a.shape) # 复制Tensor的形状,内容全为0
#out:
<tf.Tensor: id=6, shape=(2, 2), dtype=float32, numpy=
array([[0., 0.],
       [0., 0.]], dtype=float32)>

#in:
tf.fill(a.shape, 3) #将数值全部填充为3
#out:
<tf.Tensor: id=12, shape=(2, 2), dtype=int32, numpy=
array([[3, 3],
       [3, 3]])>

#tf转numpy
#in:
a.numpy() # .numpy()方法可以直接将tensor转换为numpy数组array
#out:
array([[1., 1.],
       [1., 1.]], dtype=float32)

2 tf张量Tensor初始化

# 初始化, 正态分布初始化
#in:
tf.random.normal([2, 2], mean=0, stddev=1)
#out:
<tf.Tensor: id=18, shape=(2, 2), dtype=float32, numpy=
array([[ 1.1078316 ,  0.23817614],
       [-0.43512696, -0.14037803]], dtype=float32)>
# 截断正态分布初始化,将梯度弥散的区域截断
#in:
tf.random.truncated_normal([2, 2], mean=0, stddev=1)
#out:
<tf.Tensor: id=24, shape=(2, 2), dtype=float32, numpy=
array([[-1.0143591 ,  0.30591688],
       [ 0.25293255, -0.91047406]], dtype=float32)>
# 均值初始化,在区间等概率地均匀地初始化数组
#in:
tf.random.uniform([2, 2], minval=0, maxval=1)
#out:
<tf.Tensor: id=31, shape=(2, 2), dtype=float32, numpy=
array([[0.0710001 , 0.18758869],
       [0.6249238 , 0.20907605]], dtype=float32)>
# 创建一个(1,10)区间的整型Tensor
#in:
tf.range(10)
#out:
<tf.Tensor: id=35, shape=(10,), dtype=int32, numpy=array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>

3 Tensor张量操作

3.1 shuffle打乱

# 打乱操作
#in:
x = tf.range(10)
tf.random.shuffle(x)
#out:
<tf.Tensor: id=40, shape=(10,), dtype=int32, numpy=array([1, 5, 6, 3, 0, 7, 8, 2, 4, 9])>

3.2 one-hot编码

# 转为one-hot编码
#in:
y = tf.range(4)
tf.one_hot(y, depth=10)
#out:
<tf.Tensor: id=55, shape=(4, 10), dtype=float32, numpy=
array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.]], dtype=float32)>

3.3 维度变换

3.3.1 reshape

#初始化
students = tf.random.normal([5, 30, 10], mean=0, stddev=1)
#in:
tf.reshape(students, [5, -1]).shape
#out:
TensorShape([5, 300])
#in:
tf.reshape(students, [5, 50, 6]).shape
#out:
TensorShape([5, 50, 6])

3.3.2 转置

# 维度转置
#in:
tf.transpose(students, [1, 0, 2]).shape #[1,0,2]为现维度数据在原维度的索引号
#out:
TensorShape([30, 5, 10])

3.3.3 增加维度

# 增加维度
#in:
tf.expand_dims(students, axis=0).shape #在0维度前增加一个维度
#out:
TensorShape([1, 5, 30, 10])
#in:
tf.expand_dims(students, axis=2).shape #在2维度前增加一个维度
#out:
TensorShape([5, 30, 1, 10])
#in:
tf.expand_dims(students, axis=-1).shape #在最后增加一个维度,此处参数也可以写3
#out:
TensorShape([5, 30, 10, 1])

3.3.4 减少维度

# 减少维度
#in:
d = tf.expand_dims(students, axis=-1)
tf.squeeze(d, axis=-1).shape #去除最后一个维度
#out:
TensorShape([5, 30, 10])

tf.squeeze(d).shape # 默认去除所有1的维度

你可能感兴趣的:(学习路线,tensorflow,深度学习,python)