前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TensorFlow2 一小时学会基本操作 1

TensorFlow2 一小时学会基本操作 1

作者头像
润森
发布2022-09-22 14:52:27
3660
发布2022-09-22 14:52:27
举报
文章被收录于专栏:毛利学Python

https://iamarookie.blog.csdn.net/article/details/117591977

TensorFlow2 数据操作基础

概述

TensorFlow2 的基本操作和 Numpy 的操作很像. 今天带大家来看一看 TensorFlow 的基本数据操作.

创建数据

详细讲解一下 TensorFlow 创建数据的集中方法.

创建常量

tf.constant() 格式为:

代码语言:javascript
复制
tf.constant(value,dtype,shape,name)

参数:

  • value: 常量值- dtype: 数据类型- shape: 表示生成常量数的维度- name: 数据名称 例子:
代码语言:javascript
复制
# 创建常量1
c1 = tf.constant(1)
print(c1)

# 创建常量, 类型为bool
c2 = tf.constant([True, False])
print(c2)

# 创建常量1, 类型为float32, 大小为3*3
c3 = tf.constant(0.1, shape=[2, 2])
print(c3)

# 创建常量, 类型为string字符串
c4 = tf.constant("Hello World!")
print(c4)

输出结果:

代码语言:javascript
复制
tf.Tensor(1, shape=(), dtype=int32)
tf.Tensor([ True False], shape=(2,), dtype=bool)
tf.Tensor(
[[0.1 0.1]
 [0.1 0.1]], shape=(2, 2), dtype=float32)
tf.Tensor(b'Hello World!', shape=(), dtype=string)

创建数据序列

格式:

代码语言:javascript
复制
range(start, limit, delta=1, dtype=None, name='range')

参数:

  • start: 开始位置- limit: 序列的上限- delta: 相当于 Numpy 的 step, 步长- detype: 数据类型- name: 数据名称, 默认为 “range” 例子:
代码语言:javascript
复制
# 创建数字序列
r1 = tf.range(4)
print(r1)

输出结果:

代码语言:javascript
复制
tf.Tensor([0 1 2 3], shape=(4,), dtype=int32)

创建图变量

格式:

代码语言:javascript
复制
tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None)

参数:

|参数名称|参数类型|参数含义 |------ |initial_value|所有可以转换为 Tensor 的类型|变量的初始值 |trainable|bool|如果为 True, 会把它加入到 GraphKeys.TRAINABLE_VARIABLES, 才能对它使用 Optimizer |collections|list|指定该图变量的类型, 默认为 [GraphKeys.GLOBAL_VARIABLES] |validate_shape|bool|如果为 False, 则不进行类型和维度检查 |name|string|数据名称

例子:

代码语言:javascript
复制
# 创建图变量
v1 = tf.Variable(tf.range(6))
print(v1)
print(isinstance(v1, tf.Tensor))  # False
print(isinstance(v1, tf.Variable))  # True
print(tf.is_tensor(v1))  # True

输出结果:

代码语言:javascript
复制
False
True
True


tf.zeros

tf.zeros 可以帮助我们创建一个所有参数为 0 的 tensor 对象. 类似于 np.zeros.

格式:

代码语言:javascript
复制
tf.zeros(shape, dtype=tf.dtypes.float32, name=None)


参数:

  • shape: 数组的形状- dype: 数据类型, 默认为 float32- name: 数据名称 例子:
代码语言:javascript
复制
# 创建参数为0的tensor
z1 = tf.zeros([1])
print(z1)

z2 = tf.zeros([3, 3])
print(z2)


输出结果:

代码语言:javascript
复制
tf.Tensor([0.], shape=(1,), dtype=float32)
tf.Tensor(
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]], shape=(3, 3), dtype=float32)


tf.ones

tf.ones 用法和 tf.zeros 一样, 可以帮助我们创建一个所有参数为 1 的 tensor 对象.

代码语言:javascript
复制
tf.ones(shape, dtype=tf.dtypes.float32, name=None)


参数:

  • shape: 数组的形状- dype: 数据类型, 默认为 float32- name: 数据名称 例子:
代码语言:javascript
复制
# 创建参数为1的tensor
o1 = tf.ones([1])
print(o1)

o2 = tf.ones([3, 3])
print(o2)


输出结果:

代码语言:javascript
复制
tf.Tensor([1.], shape=(1,), dtype=float32)
tf.Tensor(
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]], shape=(3, 3), dtype=float32)


tf.zeros_like

tf.zeros_like 可以帮我们创建一个与给定 tensor 类型大小一致的 tensor. 类似 np.zeros_like.

格式:

代码语言:javascript
复制
tf.zeros_like(tensor, dype=None, name=None)


参数:

  • tensor: 传入的 tensor- dype: 数据类型, 默认为 float32- name: 数据名称 例子:
代码语言:javascript
复制
# tf.zeros_like
t1 = tf.range(6)
z1 = tf.zeros_like(t1)
print(z1)


输出结果:

代码语言:javascript
复制
tf.Tensor([0 0 0 0 0 0], shape=(6,), dtype=int32)


tf.ones_like

格式:

代码语言:javascript
复制
tf.ones_like(tensor, dype=None, name=None)


参数:

  • tensor: 传入的 tensor- dype: 数据类型, 默认为 float32- name: 数据名称 例子:
代码语言:javascript
复制
# tf.ones_like
t1 = tf.range(6)
o1 = tf.ones_like(t1)
print(o1)


输出结果:

代码语言:javascript
复制
tf.Tensor([1 1 1 1 1 1], shape=(6,), dtype=int32)


tf.fill

tf.fill 可以帮助我们创建一个指定形状和内容的 tensor.

格式:

代码语言:javascript
复制
tf.fill(shape, value, name=None)


参数:

  • shape: 数组的形状- value: 填充的值- name: 数据名称 例子:
代码语言:javascript
复制
# tf.fill
f1 = tf.fill([2, 2], 0)
print(f1)

f2 = tf.fill([3, 3], 6)
print(f2)


输出结果:

代码语言:javascript
复制
[[0 0]
 [0 0]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[6 6 6]
 [6 6 6]
 [6 6 6]], shape=(3, 3), dtype=int32)


tf.gather

tf.gather: 根据索引从参数轴收集切片.

格式:

代码语言:javascript
复制
tf.gather(
    params, indices, validate_indices=None, axis=None, batch_dims=0, name=None
)


参数:

  • params: 传入的张量- indices: A Tensor. types 必须是: int32, int64. 里面的每一个元素大小必须在 [0, params.shape[axis]) 范围内- axis: 维度, 默认为 0 例子:
代码语言:javascript
复制
input =[ [[[1, 1, 1], [2, 2, 2]],
         [[3, 3, 3], [4, 4, 4]],
         [[5, 5, 5], [6, 6, 6]]],
 
         [[[7, 7, 7], [8, 8, 8]],
         [[9, 9, 9], [10, 10, 10]],
         [[11, 11, 11], [12, 12, 12]]],
 
        [[[13, 13, 13], [14, 14, 14]],
         [[15, 15, 15], [16, 16, 16]],
         [[17, 17, 17], [18, 18, 18]]]
         ]
output=tf.gather(input, [0,2],axis=0)


输出结果:

代码语言:javascript
复制
tf.Tensor(
[[[[ 1  1  1]
   [ 2  2  2]]

  [[ 3  3  3]
   [ 4  4  4]]

  [[ 5  5  5]
   [ 6  6  6]]]


 [[[13 13 13]
   [14 14 14]]

  [[15 15 15]
   [16 16 16]]

  [[17 17 17]
   [18 18 18]]]], shape=(2, 3, 2, 3), dtype=int32)

tf.random

正态分布

tf.random.normal 可以帮我们创建随机数服从正态分布.

格式:

代码语言:javascript
复制
tf.random.normal(
    shape, mean=0.0, stddev=1.0, dtype=tf.dtypes.float32, seed=None, name=None
)

参数:

  • shape: 张量的形状- mean: 正态分布的均值, 默认为 0.0- stddev: 正态分布的标准差, 默认为 1.0- dtype: 数据类型, 默认为 float32- seed: 随机数种子- name: 数据名称 例子:
代码语言:javascript
复制
# tf.normal
n1 = tf.random.normal([2, 2], mean = 1, stddev=1, seed=0)
print(n1)


输出结果:

代码语言:javascript
复制
tf.Tensor(
[[0.60084236 3.1044393 ]
 [1.1710722  1.5465181 ]], shape=(2, 2), dtype=float32)


均匀分布

tf.random.uniform 可以帮我们创建随机数服从均匀分布. 格式:

代码语言:javascript
复制
tf.random.uniform(
    shape, minval=0, maxval=None, dtype=tf.dtypes.float32, seed=None, name=None
)


参数:

  • shape: 张量的形状- minval: 均匀分布的最小值, 默认为 0- maxvak: 均匀分布的最大值- dtype: 数据类型, 默认为 float32- seed: 随机数种子- name: 数据名称 例子:
代码语言:javascript
复制
# tf.uniform
u1 = tf.random.uniform([2, 2], minval=0, maxval=1)
print(u1)

输出结果:

代码语言:javascript
复制
tf.Tensor(
[[0.7382153  0.6622821 ]
 [0.22840345 0.09706533]], shape=(2, 2), dtype=float32)

打乱顺序

tf.random.shuffle 可以帮助我们打乱张量的顺序.

格式:

代码语言:javascript
复制
tf.random.shuffle(
    value, seed=None, name=None
)

参数:

  • value: 要被打乱的张量- seed: 随机数种子- name: 数据名称 例子:
代码语言:javascript
复制
# tf.shuffle
s1 = tf.random.shuffle(tf.range(10))
print(s1)


输出结果:

代码语言:javascript
复制
tf.Tensor([1 7 3 9 2 6 8 5 4 0], shape=(10,), dtype=int32)


获取数据信息

获取数据维度

tf.rank 的用法和 np.ndim 基本一样.

格式:

代码语言:javascript
复制
rank(input, name=None)  # 类似np.ndim


参数:

  • input: 传入的张量- name: 数据名称 例子:
代码语言:javascript
复制
# 获取张量维度
t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
print(tf.rank(t))


输出结果:

代码语言:javascript
复制
tf.Tensor(3, shape=(), dtype=int32)

数据是否为张量

格式:

代码语言:javascript
复制
tf.is_tensor(input)

参数:

  • input: 传入的张量 例子:
代码语言:javascript
复制
# 判断是否为张量
a = tf.constant([1, 2, 3])
b = tf.constant([True, False, False])
c = tf.constant("Hello World")
d = np.arange(6)

print(a)
print(tf.is_tensor(a))

print(b)
print(tf.is_tensor(b))

print(c)
print(tf.is_tensor(c))

print(d)
print(tf.is_tensor(d))

输出结果:

代码语言:javascript
复制
tf.Tensor([1 2 3], shape=(3,), dtype=int32)
True
tf.Tensor([ True False False], shape=(3,), dtype=bool)
True
tf.Tensor(b'Hello World', shape=(), dtype=string)
True
[0 1 2 3 4 5]
False

数据转换

转换成张量

格式:

代码语言:javascript
复制
tf.convert_to_tensor(value, dtype=None, dtype_hint=None, name=None)

参数:

  • value: 需要转换的值- dtype: 数据类型- dtype_hint: 当 dtype 为 None 时的备选方案- name: 数据名称 例子:
代码语言:javascript
复制
# 转换成张量
array = np.arange(6)
print(array.dtype)

array_tf = tf.convert_to_tensor(array)
print(array_tf)

输出结果:

代码语言:javascript
复制
int32
tf.Tensor([0 1 2 3 4 5], shape=(6,), dtype=int32)

转换数据类型

格式:

代码语言:javascript
复制
cast(x, dtype, name=None)

参数:

  • x: 输入的值- dtype: 数据类型- name: 数据名称 例子:
代码语言:javascript
复制
# 装换数据类型
array_tf = tf.constant(np.arange(6))
print(array_tf)

array_tf = tf.cast(array_tf, dtype=tf.float32)
print(array_tf)

tf_bool = tf.cast(tf.constant([False, True]), dtype=tf.int32)
print(tf_bool)

输出结果:

代码语言:javascript
复制
tf.Tensor([0 1 2 3 4 5], shape=(6,), dtype=int32)
tf.Tensor([0. 1. 2. 3. 4. 5.], shape=(6,), dtype=float32)
tf.Tensor([0 1], shape=(2,), dtype=int32)

转换成 numpy

例子:

代码语言:javascript
复制
# tensor转换成numpy
array_tf = tf.ones([2,2])
array_np = array_tf.numpy()
print(array_np)

输出结果:

代码语言:javascript
复制
[[1. 1.]
 [1. 1.]]

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TensorFlow2 数据操作基础
  • 概述
  • 创建数据
    • 创建常量
      • 创建数据序列
        • 创建图变量
          • tf.zeros
            • tf.ones
              • tf.zeros_like
                • tf.ones_like
                  • tf.fill
                    • tf.gather
                    • tf.random
                      • 正态分布
                        • 均匀分布
                          • 打乱顺序
                          • 获取数据信息
                            • 获取数据维度
                              • 数据是否为张量
                              • 数据转换
                                • 转换成张量
                                  • 转换数据类型
                                    • 转换成 numpy
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档