建立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...