tf建立tensor 建立Tensor

2021-10-17 05:22:03 字數 3883 閱讀 9004

建立tensor

* from numpy, list

* zeros, ones, fill

* random # if big dimension, random initial

* constant

numpy, list

numpy

import numpy as np

import tensorflow as tf

tf.convert_to_tensor(np.ones([2, 3]))

array([[1., 1., 1.],

[1., 1., 1.]])>

tf.convert_to_tensor(np.zeros([2, 3]))

array([[0., 0., 0.],

[0., 0., 0.]])>

list

tf.convert_to_tensor([1, 2])

tf.convert_to_tensor([1, 2.])

tf.convert_to_tensor([[1], [2.]])

array([[1.],

[2.]], dtype=float32)>

zeros, ones, fill

zeros

tf.zeros()

tf.zeros([1])

tf.zeros([2, 2])

array([[0., 0.],

[0., 0.]], dtype=float32)>

tf.zeros([2, 3, 3])

array([[[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.]],

[[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.]]], dtype=float32)>

a = tf.constant([0])

tf.zeros_like(a) # 等同於tf.zeros(a.shape)

ones

tf.ones(1)

tf.ones()

tf.ones([2])

tf.ones([2, 3])

array([[1., 1., 1.],

[1., 1., 1.]], dtype=float32)>

a = tf.constant([0])

tf.ones_like(a) # # 等同於tf.ones(a.shape)

fill

tf.fill([2, 2], 0)

array([[0, 0],

[0, 0]], dtype=int32)>

tf.fill([2, 2], 0)

array([[0, 0],

[0, 0]], dtype=int32)>

tf.fill([2, 2], 1)

array([[1, 1],

[1, 1]], dtype=int32)>

tf.fill([2, 2], 9)

array([[9, 9],

[9, 9]], dtype=int32)>

random

# 正態分佈,均值為1,方差為1

tf.random.normal([2, 2], mean=1, stddev=1)

array([[1.0804566, 0.9318387],

[1.0620257, 0.6907253]], dtype=float32)>

tf.random.normal([2, 2])

array([[-0.06452972, 0.05704789],

[ 0.82857376, 0.71619517]], dtype=float32)>

# 截斷的正態分佈,

tf.random.truncated_normal([2, 2], mean=0, stddev=1)

array([[ 0.19161457, -0.820383 ],

[ 0.43668088, -0.3798696 ]], dtype=float32)>

如下圖所示為截斷正態分佈,截掉紅色部分,對新的正態分佈重新取樣。因為sigmoid的和新的正態分佈不衝突的地方的區域,對於sigmoid函式來說是近似於平滑的直線,梯度為0,因此會有梯度消失。

# 均勻分布

tf.random.uniform([2, 2], minval=0, maxval=1)

array([[0.01481438, 0.15071952],

[0.5599004 , 0.59821343]], dtype=float32)>

tf.random.uniform([2, 2], minval=0, maxval=100, dtype=tf.int32)

array([[51, 9],

[10, 14]], dtype=int32)>

打亂idx後,a和b的索引不變

idx = tf.range(10)

idx = tf.random.shuffle(idx)

idxa = tf.random.normal([10, 784])

b = tf.random.uniform([10], maxval=10, dtype=tf.int32)

ba = tf.gather(a, idx)

b = tf.gather(b, idx)

bconstant

tf.constant(1)

tf.constant([1])

tf.constant([1, 2.])

tf.constant([[1, 2], [3., 2]])

array([[1., 2.],

[3., 2.]], dtype=float32)>

loss計算

無bias的loss

out = tf.random.uniform([4, 10])

outarray([[0.67733276, 0.2267617 , 0.21761227, 0.28679788, 0.68864655,

0.21349418, 0.5646602 , 0.8294822 , 0.22094071, 0.20246148],

[0.7940483 , 0.86402774, 0.78399694, 0.80085063, 0.01357341,

0.11889946, 0.89162886, 0.755934 , 0.8058628 , 0.40188062],

[0.115659 , 0.30951428, 0.39866602, 0.5358803 , 0.9163326 ,

0.47557557, 0.9397205 , 0.3110628 , 0.49839914, 0.34321547],

[0.5563061 , 0.78829396, 0.52705276, 0.29077685, 0.35033226,

0.9630101 , 0.338771 , 0.6301584 , 0.7393383 , 0.7073529 ]],

dtype=float32)>

y = tf.range(4)

y = tf.one_hot(y, depth=10)

yarray([[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)>

loss = tf.keras.losses.mse(y, out)

loss

loss = tf.reduce_mean(loss)

loss

tf建立tensor 建立Tensor

建立tensor from numpy,list zeros,ones,fill random if big dimension,random initial constant numpy,list numpy import numpy as np import tensorflow as tf t...

Pytorch常用建立Tensor方法總結

1 import from numpy list 方法 torch.from numpy ndarray 常見的初始化有torch.tensor和torch.tensor 區別 tensor 通過numpy 或 list 的現有資料初始化 tensor 1 接收資料的維度 shape 2 接收現有的...

Tensor的建立和維度的檢視

常見的tensor建立方法 1,基礎tensor函式 torch.tensor 2,2 32位浮點型 2,指定型別 torch.doubletensor 2,2 64位浮點型 3,使用python的列表序列 torch.tensor 1,2 3,4 4,預設值為0 torch.zeros 2,3 5...