TensorFlow2总结

Tensor数据类型

  • list: [1,1.2,'hello'] ,内存占用大,处理速度慢
  • np.array,数据同类型,但不支持GPU和自动求导
  • tf.Tensor,为了弥补numpy的缺点,为深度学习而生,支持GPU与自动求导
  • tensor:
    • scalar:标量,1.1,dim = 0
    • vector:向量,[1.1],[1.1,2.2,...],dim = 1
    • matrix: 矩阵,[[1.1,2.2],[3.3,4.4]],dim = 2
    • tensor:rank>2 ,dim > 2
  • 数据类型:
    • Int, float, double
    • bool
    • string
  • 定义tensor
tf.constant(1)  # 定义int,普通的tensor
tf.constant(1.)  # 定义float
tf.constant([True, False])  # 定义bool
tf.constant('hello nick')   # 定义string

属性

with tf.device('cpu'):
  a = tf.constant([1])   # 在cpu创建
with tf.device('gpu'):
    b = tf.constant([1]) # 在gpu创建 
  
a.device # 设备属性
a.gpu()  # cpu转gpu
b.cpu()  # gpu转cpu
a.numpy()# 获取numpy数据类型
a.shape  # 获取a的属性
a.ndim   # 获取维度
tf.rank(a)  # 获取维度
a.name  # 1.+历史遗留问题

数据类型判断

instance(a,tf.Tensor) # 判断是否为tensor (不推荐)
tf.is_tensor(a)  # 判断是否为tensor   (推荐)
a.dtype,b.dtype,c.dtype  # 判断数据类型

数据类型转换

a = np.arange(5)
aa = tf.convert_to_tensor(a,dtype=tf.int32) # numpy转tensor

tf.cast(aa,dtype=tf.float32)  # tensor之间数据类型转换 tf.int32转tf.float32

b = tf.constant([0,1])
tf.cast(b,dtype=tf.bool) # int转bool

# tf.Variable
a = tf.range(5)    # 生成一个tensor
b = tf.Variable(a, name='input_data') # tensor转为Variable后具有求导的特性,即自动记录a的梯度相关信息
b.name      # input_data:0
b.trainable # True  # 可训练

isinstance(b,tf.Tensor)    # False
isinstance(b,tf.Variable)  # True
tf.is_tensor(b)  # True    # 推荐使用

 tensor转numpy

a= tf.range(5)
a.numpy()

# a必须是scalar
a = tf.ones([])
a.numpy()  
int(a)
float(a)

创建Tensor

from numpy, list
* zeros, ones, fill
* random  # if big dimension, random initial
* constant
* Application

numpy, list

numpy

import numpy as np
import tensorflow as tf

tf.convert_to_tensor(np.ones([2, 3]))
<tf.Tensor: id=0, shape=(2, 3), dtype=float64, numpy=
array([[1., 1., 1.],
       [1., 1., 1.]])>
tf.convert_to_tensor(np.zeros([2, 3]))
<tf.Tensor: id=2, shape=(2, 3), dtype=float64, numpy=
array([[0., 0., 0.],
       [0., 0., 0.]])>

list

tf.convert_to_tensor([1, 2])
<tf.Tensor: id=4, shape=(2,), dtype=int32, numpy=array([1, 2], dtype=int32)>
tf.convert_to_tensor([1, 2.])
<tf.Tensor: id=6, shape=(2,), dtype=float32, numpy=array([1., 2.], dtype=float32)>
tf.convert_to_tensor([[1], [2.]])
<tf.Tensor: id=8, shape=(2, 1), dtype=float32, numpy=
array([[1.],
       [2.]], dtype=float32)>

zeros, ones, fill

zeros

tf.zeros([])
<tf.Tensor: id=10, shape=(), dtype=float32, numpy=0.0>
tf.zeros([1])
<tf.Tensor: id=14, shape=(1,), dtype=float32, numpy=array([0.], dtype=float32)>
tf.zeros([2, 2])
<tf.Tensor: id=18, shape=(2, 2), dtype=float32, numpy=
array([[0., 0.],
       [0., 0.]], dtype=float32)>
tf.zeros([2, 3, 3])
<tf.Tensor: id=22, shape=(2, 3, 3), dtype=float32, numpy=
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)
<tf.Tensor: id=25, shape=(1,), dtype=int32, numpy=array([0], dtype=int32)>

ones

 

tf.ones(1)
<tf.Tensor: id=29, shape=(1,), dtype=float32, numpy=array([1.], dtype=float32)>
tf.ones([])
<tf.Tensor: id=31, shape=(), dtype=float32, numpy=1.0>
tf.ones([2])
<tf.Tensor: id=35, shape=(2,), dtype=float32, numpy=array([1., 1.], dtype=float32)>
tf.ones([2, 3])
<tf.Tensor: id=39, shape=(2, 3), dtype=float32, numpy=
array([[1., 1., 1.],
       [1., 1., 1.]], dtype=float32)>
a = tf.constant([0])
tf.ones_like(a)  # # 等同于tf.ones(a.shape)
<tf.Tensor: id=44, shape=(1,), dtype=int32, numpy=array([1], dtype=int32)>

fill

 

tf.fill([2, 2], 0)
<tf.Tensor: id=48, shape=(2, 2), dtype=int32, numpy=
array([[0, 0],
       [0, 0]], dtype=int32)>
tf.fill([2, 2], 0)
<tf.Tensor: id=52, shape=(2, 2), dtype=int32, numpy=
array([[0, 0],
       [0, 0]], dtype=int32)>
tf.fill([2, 2], 1)
<tf.Tensor: id=56, shape=(2, 2), dtype=int32, numpy=
array([[1, 1],
       [1, 1]], dtype=int32)>
tf.fill([2, 2], 9)
<tf.Tensor: id=60, shape=(2, 2), dtype=int32, numpy=
array([[9, 9],
       [9, 9]], dtype=int32)>

random

 

# 正态分布,均值为1,方差为1
tf.random.normal([2, 2], mean=1, stddev=1)
<tf.Tensor: id=67, shape=(2, 2), dtype=float32, numpy=
array([[1.0804566, 0.9318387],
       [1.0620257, 0.6907253]], dtype=float32)>
tf.random.normal([2, 2])
<tf.Tensor: id=74, shape=(2, 2), dtype=float32, numpy=
array([[-0.06452972,  0.05704789],
       [ 0.82857376,  0.71619517]], dtype=float32)>
# 截断的正态分布,
tf.random.truncated_normal([2, 2], mean=0, stddev=1)
<tf.Tensor: id=81, shape=(2, 2), dtype=float32, numpy=
array([[ 0.19161457, -0.820383  ],
       [ 0.43668088, -0.3798696 ]], dtype=float32)>

如下图所示为截断正态分布,截掉红色部分,对新的正态分布重新采样。因为sigmoid的和新的正态分布不冲突的地方的区域,对于sigmoid函数来说是近似于平滑的直线,梯度为0,因此会有梯度消失。

 

# 均匀分布
tf.random.uniform([2, 2], minval=0, maxval=1)
<tf.Tensor: id=89, shape=(2, 2), dtype=float32, numpy=
array([[0.01481438, 0.15071952],
       [0.5599004 , 0.59821343]], dtype=float32)>
tf.random.uniform([2, 2], minval=0, maxval=100, dtype=tf.int32)
<tf.Tensor: id=102, shape=(2, 2), dtype=int32, numpy=
array([[51,  9],
       [10, 14]], dtype=int32)>

打乱idx后,a和b的索引不变

idx = tf.range(10)
idx = tf.random.shuffle(idx)
idx
<tf.Tensor: id=113, shape=(10,), dtype=int32, numpy=array([0, 8, 4, 9, 6, 7, 5, 2, 1, 3], dtype=int32)>
a = tf.random.normal([10, 784])
b = tf.random.uniform([10], maxval=10, dtype=tf.int32)
b
<tf.Tensor: id=134, shape=(10,), dtype=int32, numpy=array([1, 8, 1, 2, 4, 6, 2, 7, 4, 5], dtype=int32)>
a = tf.gather(a, idx)
b = tf.gather(b, idx)
b
<tf.Tensor: id=147, shape=(10,), dtype=int32, numpy=array([1, 8, 2, 2, 6, 1, 7, 4, 4, 5], dtype=int32)>

constant

tf.constant(1)
<tf.Tensor: id=149, shape=(), dtype=int32, numpy=1>
tf.constant([1])
<tf.Tensor: id=151, shape=(1,), dtype=int32, numpy=array([1], dtype=int32)>
tf.constant([1, 2.])
<tf.Tensor: id=153, shape=(2,), dtype=float32, numpy=array([1., 2.], dtype=float32)>
tf.constant([[1, 2], [3., 2]])
<tf.Tensor: id=156, shape=(2, 2), dtype=float32, numpy=
array([[1., 2.],
       [3., 2.]], dtype=float32)>

loss计算

无bias的loss

out = tf.random.uniform([4, 10])
out
<tf.Tensor: id=171, shape=(4, 10), dtype=float32, numpy=
array([[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)
y
<tf.Tensor: id=188, shape=(4, 10), dtype=float32, numpy=
array([[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
<tf.Tensor: id=195, shape=(4,), dtype=float32, numpy=array([0.19016443, 0.4096697 , 0.31698173, 0.43206215], dtype=float32)>
loss = tf.reduce_mean(loss)
loss
<tf.Tensor: id=200, shape=(), dtype=float32, numpy=0.3372195>

 

TX2是英伟达公司推出的一款高性能的嵌入式AI计算平台,而TensorFlow是一种非常流行的机器学习框架。TX2和TensorFlow在实际应用中可以相互配合使用。 在TX2上安装TensorFlow 1.15.0的过程大致如下:首先,您需要确保TX2上已经安装了适当的操作系统,如Ubuntu。然后,您可以通过命令行或者Anaconda等软件包管理器来安装TensorFlow。接下来,您可以尝试运行一些TensorFlow示例代码,以验证您的安装是否成功。 使用TensorFlow 1.15.0,您可以利用TX2的高性能计算能力进行各种机器学习和深度学习任务。例如,您可以使用TX2上的TensorFlow来训练和优化神经网络模型,从而实现图像分类、目标检测和语音识别等任务。同时,您还可以将训练好的模型部署到TX2上,以便在嵌入式设备上进行实时推理和预测。 TensorFlow的丰富功能和TX2的高性能相结合,为开发人员和研究人员提供了一个理想平台来解决各种复杂的AI和机器学习问题。无论是在医疗、自动驾驶、无人机或者工业自动化等领域,TX2和TensorFlow的结合都能够为用户带来出色的性能和灵活性。 需要注意的是,TX2的资源有限,因此在使用TensorFlow进行训练和推理时,需要合理管理计算和存储资源,以充分利用TX2的性能。同时,还应该注意代码的优化和并行化,以提高效率和性能。 总结来说,TX2与TensorFlow 1.15.0的结合提供了一种强大的嵌入式AI解决方案,能够满足各种机器学习和深度学习任务的需求,并为用户提供高性能、高效率的计算和推理能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值