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的维度
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,TensorFlow2.0是一个非常强大的深度学习框架,它提供了许多基本API,下面是一个简单的教程,介绍如何使用TensorFlow2.0中的基本API: 1. 安装TensorFlow2.0 首先,您需要安装TensorFlow2.0。您可以使用pip install tensorflow命令进行安装。如果您已经安装了旧版本的TensorFlow,可以使用pip install --upgrade tensorflow命令进行升级。 2. 导入TensorFlow2.0 在您的Python代码中,您需要导入TensorFlow2.0。您可以使用以下命令导入: ``` import tensorflow as tf ``` 3. 定义张TensorFlow中的基本数据类型。您可以将它们视为多维数组。您可以使用以下命令定义一个张: ``` #定义一个2x3的张 tensor = tf.constant([[1, 2, 3], [4, 5, 6]]) ``` 4. 运行计算图 在TensorFlow中,您需要构建一个计算图并运行它。您可以使用以下命令运行计算图: ``` #运行计算图 with tf.Session() as sess: result = sess.run(tensor) ``` 5. 定义变是在计算图中可以改变值的节点。您可以使用以下命令定义一个变: ``` #定义一个变 variable = tf.Variable(0, name='counter') ``` 6. 定义占位符 占位符是在运行计算图时可以传递值的节点。您可以使用以下命令定义一个占位符: ``` #定义一个占位符 placeholder = tf.placeholder(tf.float32, shape=[None, 10]) ``` 7. 定义操作 操作是计算图中的节点,它们执行各种数学运算。您可以使用以下命令定义一个操作: ``` #定义一个操作 operation = tf.add(1, 2) ``` 8. 计算梯度 在TensorFlow中,您可以使用自动微分来计算梯度。您可以使用以下命令计算梯度: ``` #计算梯度 x = tf.Variable(3.0) with tf.GradientTape() as tape: y = x**2 grad = tape.gradient(y, x) ``` 以上是TensorFlow2.0基本API的简单介绍。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值