Tensor支持从numpy转换为Tensor,并且本身也包含一些与numpy相同的随机函数,比如normal、truncated_normal、uniform、shuffle等函数,需要注意的是gather函数是根据下标来取tensor中指定位置的值,是必用的高频函数.
# coding: utf-8
# @时间 : 2022/3/20 2:59 下午
# @作者 : 那美那美
import tensorflow as tf
import numpy as np
# numpy转换为tensor类型
a1 = tf.convert_to_tensor(np.ones((2, 3))) # np.ones(shape)产生指定维度的0
a2 = tf.ones((2, 3)) # 直接使用tf中的函数
a3 = tf.ones_like(a2) # 根据某个tesnor创建相同维度的0
a4 = tf.fill((2, 2), 1) # 指定维度并填充指定的值1
a5 = tf.random.normal((2, 2), mean=1, stddev=1) # 产生均值为1,标准差为1满足正态分布的随机数
# 生成的值服从具有指定平均值和标准偏差的正态分布,如果生成的值大于平均值2个标准偏差的值则丢弃重新选择
a6 = tf.random.truncated_normal((2, 2), mean=0, stddev=1)
# 生成的值在 [minval, maxval) 范围内遵循均匀分布。该范围包括下限 minval ,而上限 maxval 被排除
a7 = tf.random.uniform((2, 2), minval=0, maxval=1)
idx = tf.range(10)
a8 = tf.random.shuffle(idx) # 将序列中的元素按第0个维度随机打乱
a = tf.random.normal([15, 1])
a9 = tf.gather(a, idx) # 根据idx获取a变量中tesnor位置的值
print(a1, a2, a3, a4, a5, a6, a7, a8, a9, sep='\n***************\n')
运行结果:
tf.Tensor(
[[1. 1. 1.]
[1. 1. 1.]], shape=(2, 3), dtype=float64)
***************
tf.Tensor(
[[1. 1. 1.]
[1. 1. 1.]], shape=(2, 3), dtype=float32)
***************
tf.Tensor(
[[1. 1. 1.]
[1. 1. 1.]], shape=(2, 3), dtype=float32)
***************
tf.Tensor(
[[1 1]
[1 1]], shape=(2, 2), dtype=int32)
***************
tf.Tensor(
[[0.893381 0.39684772]
[0.80256844 2.9290302 ]], shape=(2, 2), dtype=float32)
***************
tf.Tensor(
[[ 1.8266828 0.57199335]
[ 1.8103107 -1.5668089 ]], shape=(2, 2), dtype=float32)
***************
tf.Tensor(
[[0.70846033 0.84123945]
[0.6737821 0.25132465]], shape=(2, 2), dtype=float32)
***************
tf.Tensor([7 8 2 9 4 5 6 3 1 0], shape=(10,), dtype=int32)
***************
tf.Tensor(
[[-0.2805563 ]
[ 0.16632299]
[-0.08243521]
[-0.8902492 ]
[ 0.7679219 ]
[ 1.1871251 ]
[-0.99111414]
[ 0.22882934]
[-1.2589599 ]
[-2.2318528 ]], shape=(10, 1), dtype=float32)