Environment:
- Windows 10
- tensorflow: 2.9.3
- tensorflow-probability: 0.17.0
TensorFlow Code
# -*- coding: utf-8 -*-
"""
@File : tensors.py
@Author: Yulong He
@Date : 2023-03-22 5:05 p.m.
@Desc :
"""
import numpy as np
import tensorflow as tf
import tensorflow_probability as tfp
print(tf.__version__)
print(f"Num GPUs Available: {tf.config.list_physical_devices('GPU')}")
# exit(0)
def create_const_tensor(data):
tensor = tf.constant(data)
print(tensor)
print(tensor.ndim)
if __name__ == '__main__':
# create
create_const_tensor(1)
# tf.Tensor(1, shape=(), dtype=int32)
# 0
create_const_tensor([1, 2])
# tf.Tensor([1 2], shape=(2,), dtype=int32)
# 1
create_const_tensor([[1, 2], [3, 4]])
# tf.Tensor(
# [[1 2]
# [3 4]], shape=(2, 2), dtype=int32)
# 2
# dtype
t1 = tf.constant([1, 2], dtype=tf.bfloat16)
t2 = tf.constant([1, 2], dtype=tf.qint8)
t3 = tf.constant([True, False], dtype=tf.bool)
t4 = tf.constant(['hello', 'world'], dtype=tf.string)
print(t1) # tf.Tensor([1 2], shape=(2,), dtype=bfloat16)
print(t1.shape) # (2,)
# casting
t5 = tf.cast(t1, dtype=tf.float32)
print(t5) # tf.Tensor([1. 2.], shape=(2,), dtype=float32)
# convert
x = np.array([1, 2, 3])
t6 = tf.convert_to_tensor(x, dtype=tf.float16)
print(t6) # tf.Tensor([1. 2. 3.], shape=(3,), dtype=float16)
t7 = tf.constant(x, shape=(1, 3), dtype=tf.float16)
print(t7) # tf.Tensor([[1. 2. 3.]], shape=(1, 3), dtype=float16)
print(t7.numpy()) # [[1. 2. 3.]]
# matrix
print(tf.eye(2))
# tf.Tensor(
# [[1. 0.]
# [0. 1.]], shape=(2, 2), dtype=float32)
print(tf.eye(2, 3))
# tf.Tensor(
# [[1. 0. 0.]
# [0. 1. 0.]], shape=(2, 3), dtype=float32)
# fill
print(tf.fill((2, 3), 9))
# tf.Tensor(
# [[9 9 9]
# [9 9 9]], shape=(2, 3), dtype=int32)
# ones / zeros
print(tf.ones((2, 3)))
# tf.Tensor(
# [[1. 1. 1.]
# [1. 1. 1.]], shape=(2, 3), dtype=float32)
tf.zeros((2, 3))
# ones_like / zeros_like
tf.ones_like(x)
tf.zeros_like(x)
# random_normal_initializer
x = tf.random_normal_initializer(mean=0.0, stddev=0.05, seed=None)
print(x)
# <tensorflow.python.ops.init_ops_v2.RandomNormal object at 0x00000264409884F0>
# range
x = tf.range(start=2, limit=10, delta=2)
print(x)
# tf.Tensor([2 4 6 8], shape=(4,), dtype=int32)
# tf.rank == np.ndim
print(tf.rank(
tf.zeros((3, 2, 1, 1))
)) # tf.Tensor(4, shape=(), dtype=int32)
# shape
print(tf.shape(x)) # tf.Tensor([4], shape=(1,), dtype=int32)
print(x.shape) # (4,)
# size
print(tf.size(
tf.zeros((3, 2, 1, 1))
)) # tf.Tensor(6, shape=(), dtype=int32)
# random tensor
g = tf.random.Generator.from_seed(1234)
# g = tf.random.Generator.from_non_deterministic_state()
print(g.normal(shape=(2, 3)))
# tf.Tensor(
# [[ 0.9356609 1.0854306 -0.93788373]
# [-0.5061547 1.3169702 0.7137579 ]], shape=(2, 3), dtype=float32)
print(g.uniform(shape=(3,))) # tf.Tensor([0.6512613 0.9295906 0.50873387], shape=(3,), dtype=float32)
tf.random.normal(shape=(2, 3))
tf.random.uniform(shape=(3,))
# variable
v = tf.Variable(1.)
print(v) # <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=1.0>
v.assign(2.)
print(v) # <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=2.0>
v.assign_add(0.5)
print(v) # <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=2.5>
# shuffle
x = tf.constant([1, 2, 3, 4, 5, 6])
print(tf.random.shuffle(x)) # tf.Tensor([6 3 2 4 5 1], shape=(6,), dtype=int32)
# ------------------------------------------------------
# math
x = tf.constant([-1.0, 2.0])
print(tf.abs(x)) # tf.Tensor([1. 2.], shape=(2,), dtype=float32)
print(tf.abs(3.0 ** 2 + 4.0 ** 2)) # tf.Tensor(25.0, shape=(), dtype=float32)
x1 = tf.constant([1, 2])
x2 = tf.constant([3, 4])
print(tf.add(x1, x2)) # tf.Tensor([4 6], shape=(2,), dtype=int32)
print(tf.multiply(x1, x2)) # tf.Tensor([3 8], shape=(2,), dtype=int32)
x1 = tf.constant(10.0)
x2 = tf.constant(0.0)
print(tf.math.divide_no_nan(x1, x2)) # tf.Tensor(0.0, shape=(), dtype=float32)
# broadcasting
x1 = tf.constant([1, 2, 3])
x2 = tf.constant(2)
print(tf.multiply(x1, x2)) # tf.Tensor([2 4 6], shape=(3,), dtype=int32)
x = tf.constant([10, 11, 12, 13, 14])
print(tf.math.argmax(x)) # tf.Tensor(4, shape=(), dtype=int64)
print(x[tf.math.argmax(x)]) # tf.Tensor(14, shape=(), dtype=int32)
# aggregation
print(tf.math.reduce_sum(x)) # tf.Tensor(60, shape=(), dtype=int32)
print(tf.math.reduce_max(x)) # tf.Tensor(14, shape=(), dtype=int32)
print(tf.math.reduce_mean(x)) # tf.Tensor(12, shape=(), dtype=int32)
x = tf.cast(x, dtype=tf.float16)
print(tf.math.reduce_std(x)) # tf.Tensor(1.414, shape=(), dtype=float16)
x = tf.constant([[1, 2, 3],
[4, 5, 6]])
print(tf.math.top_k(x, k=1))
# TopKV2(values=<tf.Tensor: shape=(2, 1), dtype=int32, numpy=
# array([[3],
# [6]])>, indices=<tf.Tensor: shape=(2, 1), dtype=int32, numpy=
# array([[2],
# [2]])>)
# ------------------------------------------------------
# new axis / squeeze
x = tf.constant([1, 2, 3])
print(x[tf.newaxis, ...]) # tf.Tensor([[1 2 3]], shape=(1, 3), dtype=int32)
print(tf.expand_dims(x, axis=0)) # tf.Tensor([[1 2 3]], shape=(1, 3), dtype=int32)
print(tf.reshape(x, shape=(1, 3))) # tf.Tensor([[1 2 3]], shape=(1, 3), dtype=int32)
print(tf.squeeze(x[tf.newaxis, ...], axis=0)) # tf.Tensor([1 2 3], shape=(3,), dtype=int32)
t1 = [[1, 2], [3, 4]]
t2 = [[5, 6], [7, 8]]
print(tf.concat((t1, t2), axis=1))
# tf.Tensor(
# [[1 2 5 6]
# [3 4 7 8]], shape=(2, 4), dtype=int32)
print(tf.stack((t1, t2), axis=1))
# tf.Tensor(
# [[[1 2]
# [5 6]]
#
# [[3 4]
# [7 8]]], shape=(2, 2, 2), dtype=int32)
t = tf.constant([[1, 2, 3], [4, 5, 6]])
paddings = tf.constant([[1, 1], [2, 2]])
print(tf.pad(t, paddings, 'CONSTANT'))
# tf.Tensor(
# [[0 0 0 0 0 0 0]
# [0 0 1 2 3 0 0]
# [0 0 4 5 6 0 0]
# [0 0 0 0 0 0 0]], shape=(4, 7), dtype=int32)
params = tf.constant(['p0', 'p1', 'p2', 'p3', 'p4', 'p5'])
print(tf.gather(params, tf.range(1, 4))) # tf.Tensor([b'p1' b'p2' b'p3'], shape=(3,), dtype=string)
params = tf.constant([['a', 'b'], ['c', 'd']])
print(tf.gather_nd(params, [[0], [1]]))
# tf.Tensor(
# [[b'a' b'b']
# [b'c' b'd']], shape=(2, 2), dtype=string)
# ragged
x = tf.ragged.constant([[1, 2], [3, 4, 5]])
print(x)
# <tf.RaggedTensor [[1, 2], [3, 4, 5]]>
T, F = True, False
print(tf.ragged.boolean_mask(
data=[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
mask=[[T, F, T], [F, F, F], [T, F, F]]
)) # <tf.RaggedTensor [[1, 3], [], [7]]>
print(tf.RaggedTensor.from_row_lengths(
values=[1, 2, 3, 4, 5, 6, 7, 8],
row_lengths=[4, 0, 3, 1, 0]
)) # <tf.RaggedTensor [[1, 2, 3, 4], [], [5, 6, 7], [8], []]>
# sparse tensor
x = tf.sparse.SparseTensor(
indices=[[0, 0], [2, 2]],
values=[11, 56],
dense_shape=[3, 3]
)
print(tf.sparse.to_dense(x))
# tf.Tensor(
# [[11 0 0]
# [ 0 0 0]
# [ 0 0 56]], shape=(3, 3), dtype=int32)
# string
print(tf.strings.join(['abc', 'def']).numpy()) # b'abcdef'
with tf.device('GPU:0'):
x_var = tf.Variable(0.2)
x_con = tf.constant(0.2)
print(x_var) # <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=0.2>
print(x_var.device) # /job:localhost/replica:0/task:0/device:GPU:0
print(x_con) # tf.Tensor(0.2, shape=(), dtype=float32)
print(x_con.device) # /job:localhost/replica:0/task:0/device:GPU:0
with tf.device('CPU:0'):
x = tf.Variable(1.0)
print(x.device) # /job:localhost/replica:0/task:0/device:CPU:0
# ------------------------------------------------------
# matrix
x1 = tf.constant([[1, 2], [3, 4]])
x2 = tf.constant([[1, 0], [0, 1]])
print(tf.linalg.matmul(x1, x2))
print(x1 @ x2)
# tf.Tensor(
# [[1 2]
# [3 4]], shape=(2, 2), dtype=int32)
print(tf.transpose(x1))
# [[1 2]
# [3 4]], shape=(2, 2), dtype=int32)
print(tf.linalg.band_part(x1, 0, -1))
# tf.Tensor(
# [[1 2]
# [0 4]], shape=(2, 2), dtype=int32)
print(tf.linalg.band_part(x1, -1, 0))
# tf.Tensor(
# [[1 0]
# [3 4]], shape=(2, 2), dtype=int32)
print(tf.linalg.band_part(x1, 0, 0))
# tf.Tensor(
# [[1 0]
# [0 4]], shape=(2, 2), dtype=int32)
x1 = tf.cast(x1, dtype=tf.float32)
print(tf.linalg.inv(x1))
# tf.Tensor(
# [[-2.0000002 1.0000001 ]
# [ 1.5000001 -0.50000006]], shape=(2, 2), dtype=float32)
s, u, v = tf.linalg.svd(x1)
x1 = tf.constant([[1, 2, 3], [4, 5, 6]])
x2 = tf.constant([[1, 2], [3, 4], [5, 6]])
print(tf.einsum('ij,jk->ik', x1, x2))
# tf.Tensor(
# [[22 28]
# [49 64]], shape=(2, 2), dtype=int32)
x1 = tf.constant([1., 2., 3.])
x2 = tf.constant([1., 1., 1.])
print(tf.tensordot(x1, x2, axes=1)) # tf.Tensor(6.0, shape=(), dtype=float32)
# ------------------------------------------------------
x = tf.constant([1, 2, 3, 4], dtype=tf.float16)
print(tfp.stats.variance(x)) # tf.Tensor(1.25, shape=(), dtype=float16)
print(tf.math.reduce_std(x)) # tf.Tensor(1.118, shape=(), dtype=float16)
print(tf.math.reduce_variance(x)) # tf.Tensor(1.25, shape=(), dtype=float16)
# one-hot encoding
x = [0, 1, 2, 3] # red, green, blue, purple
print(tf.one_hot(x, len(x)))
# tf.Tensor(
# [[1. 0. 0. 0.]
# [0. 1. 0. 0.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]], shape=(4, 4), dtype=float32)
x = tf.constant([0, 1, 2, 3], dtype=tf.float16)
print(tf.square(x)) # tf.Tensor([0. 1. 4. 9.], shape=(4,), dtype=float16)
print(tf.sqrt(x)) # tf.Tensor([0. 1. 1.414 1.732], shape=(4,), dtype=float16)
print(tf.math.log(x)) # tf.Tensor([ -inf 0. 0.6934 1.099 ], shape=(4,), dtype=float16)
print(tf.config.list_physical_devices())
# [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]