tensorflow学习记录

tensorflow

张量的创建

  • 创建张量
    //格式
    tf.constant(张量内容, dtype=数据类型(可选))
    //示例
    tf.constant([1,5], dtype=tf.int64)
    
  • 数据转换
    //格式
    tf.convert_to_tensor(数据名, dtype=数据类型(可选))
    //示例
    a  = np.arange(0, 5)
    b =tf.convert_to_tensor(a, dtype=tf.int64)
    
  • 特殊张量
    //创建全0张量
    tf.zeros(维度)
    //创建全1张量
    tf.ones(维度)
    //创建指定值张量
    tf.fill(维度指定值)
    
  • 正态分布张量
    //正态分布随机张量,默认均值:0,标准差:1
    tf.random.normal(维度, mean=均值, stddev=标准差)
    //截断式正态分布随机张量
    tf.random.truncated_normal(维度, mean=均值, stddev=标准差)
    
  • 均匀分布随机张量
    //均匀分布随机数张量
    tf.random.uniform(维度, minval=最小值, maxval=最大值)
    

常见函数

axis

在二维张量或数组中,通过调整axis(0或1)控制执行计算的维度,axis=0表示沿着行计算(down),axis=1表示沿着列计算(across)。

  • 强制类型转换
    tf.cast(张量名称,dtype=数据类型)
    
  • 最值求解
    //计算张量维度最小值
    tf.reduce_min(张量名称)
    //计算张量维度最小值
    tf.reduce_max(张量名称)
    
  • 计算平均值及和
    //计算张量沿指定维度的平均值
    tf.reduce_mean(张量名称, axis=操作轴)
    //计算张量沿指定维度的和
    tf.reduce_sum(张量名称, axis=操作轴)
    
  • 变量创建
    //将变量标记为可训练变量,被标记的变量会在反向传播中记录梯度信息
    tf.Variable(初始值) //格式
    tf.Variable(tf.random.normal([2,2], mean=0-, stddev=1)) //示例
    
  • 张量数学运算
    对应元素的四则运算函数:tf.add(),tf.subtract(),tf.multiply(),tf.divide()
    平方、次方、开方:tf.square(),tf.pow(),tf,sqrt()
    矩阵乘法:tf.matmul()
    //对应张量维度相同
    //张量对应元素相加
    tf.add(张量1,张量2)
    //张量对应元素相减
    tf.substract(张量1,张量2)
    //张量对应元素相乘
    tf.multiply(张量1,张量2)
    //张量元素对应相除
    tf.divide(张量1,张量2)
    //张量元素平方
    tf.square(张量名称)
    //张量元素n次方
    tf.pow(张量名称, n)
    //张量元素开方
    tf.sqrt(张量名称)
    //矩阵乘法
    tf.matmul(矩阵1,矩阵2)
    
  • 数据集制作
    //构造特征-标签数据集(Numpy、Tensor格式)
    //格式
    tf.data.Dataset.from_tensor_slices((输入特征, 标签))
    //示例
    features =  tf.constant([12,23,10.,17])
    labels = tf.constant([0,1,1,0])
    dataset = tf.data.Dataset_from_tensor_slices((features, labels))
    
  • 求导运算
    //求张量梯度
    //格式
    with tf.GradientTape() as tape:
    	//计算图
    grad = tape.gradient(函数, 求导对象)
    //示例:
    with tf.GradientTape() as tape:
    	w = tf.Variable(tf.constant(3.0))
    	loss = tf.pow(w,2)
    gread = tape.gradient(loss,w)
    
  • 枚举函数
    //遍历(列表、元组、字符串)中的元素,组合输出:索引、元素
    //格式
    enumerate(列表名称)
    //示例
    seq = ['one','two','three']
    for i,element in enumerate(seq):
    	print(i,element)
    
  • 独热编码
    分类问题中,常用独热码做标签,标签类别:1表示是,0表示非。
    //将代转数据,转换成one-hot形式输出
    //格式
    tf.one_hot(待转换数据, depth=几种分类)
    //示例
    classes = 3
    labels = tf.constant([1,0,2])
    output = tf.one_hot(labels, depth=classes)
    
  • 概率映射
    S o f t m a x ( y i ) = e y i ∑ t = 0 n e y t Softmax(y_i)=\frac{e^{y_i}}{\sum_{t=0}^ne^{y_t}} Softmax(yi)=t=0neyteyi
    //概率映射函数,输出符合的概率分布,即输出值转换成0-1之间的概率值且概率值之和是1
    //格式
    tf.nn.softmax(x)
    //示例
    y = tf.constant([1.01,2.01,-0.66])
    y_pro = tf.nn.softmax(y)
    
  • 自减函数
    //自减变量要求是可训练变量
    //格式
    w.assign_sub(w要自减的内容)
    //示例:w = w-1
    w = tf.Variable(4)
    w.assign_sub(1)
    
  • 检索最大值
    //沿张量指定维度检索最大值的索引
    //格式
    tf.argmax(张量名称, axis=操作轴)
    //示例
    test = np.array([[1,2,3],[2,3,4],[5,4,3],[8,7,2]])
    max_v
    alue_row = tf.argmax(test,axis=0)
    max_value_column = tf.argmax(test,axis=1)
    //输出
    test:
    [[1 2 3]
     [2 3 4]
     [5 4 3]
     [8 7 2]]
    max_value_row = [3 3 1]
    max_value_column = [2 2 0 0]
    
  • 条件判断
    //条件判断语句,真返回A,假返回B
    //格式
    tf.where(条件语句, A,B)
    //示例
    a = tf.constant([1,2,3,1,1])
    b = tf.constant([0,1,3,4,5])
    c = tf.where(tf.greater(a,b), a, b) //若a>b,返回a对应位置的元素,否则返回b对应位置的元素
    //输出
    c:[1,2,3,4,5]
    
  • 创建随机数
    //创建0<=random<1
    //格式
    np.random.RandomState.rand(维度)
    //示例
    rdm = np.random.RandomState(seed=1)
    a = rdm.rand() //维度为空返回标量
    b = rdm.rand(2,3) //返回维度为2行3列的随机数矩阵
    
  • 数组叠加
    //将两个数组以垂直方向叠加
    //格式
    np.vstack((a,b))
    //示例
    a = np.array([1,2,3])
    b = np.array([4,5,6])
    c = np.vstack((a,b))
    //输出
    c:[[1,2,3]
    	[4,5,6]]
    
  • 网格坐标点
    //返回若干组维度相同的等差数组
    //格式
    np.mgrid[起始值:结束值:步长, 起始值:结束值:步长, ...]
    //示例
    x,y = np.mgrid[1:3:1, 2:4:0.5]
    //输出
    x = [[1. 1. 1. 1.]
    	 [2. 2. 2. 2.]]
    y = [[2. 2.5 3. 3.5]
    	 [2. 2.5 3. 3.5]]
    //将多维数组x转换一维数组
    x.ravel()
    //将多个数组元素配对后输出
    np.c_[数组1,数组2...]
    //示例
    grid = np.c_[x.ravel(), y.ravel()]
    //输出
    grid = [[1. 2.]
    		[1. 2.5]
    		[1. 3.]
    		[1. 3.5]
    		[2. 2.]
    		[2. 2.5]
    		[2. 3.]
    		[2. 3.5]]
    

常见技巧

  • 定义指数衰减学习率
    l e a r n i n g _ r a t e = L E A R N I N G _ R A T E _ B A S E ∗ L E A R N I N G _ R A T E _ D E C A Y g l o b a l _ s t e p ( L E A R N I N G _ R A T E _ S T P E ) learning\_rate = LEARNING\_RATE\_BASE * LEARNING\_RATE\_DECAY^{\frac{global\_step}{(LEARNING\_RATE\_STPE)}} learning_rate=LEARNING_RATE_BASELEARNING_RATE_DECAY(LEARNING_RATE_STPE)global_step
    LEARNING_RATE_BASE:学习率初始值
    LEARNING_RATE_DECAY:学习率衰减率(0,1)
    LEARNING_RATE_STPE:神经网络训练多少轮后更新学习率
    L E A R N I N G _ R A T E _ S T P E = 总 样 本 数 量 / B A T C H _ S I Z E LEARNING\_RATE\_STPE = 总样本数量 / BATCH\_SIZE LEARNING_RATE_STPE=/BATCH_SIZE
    程序实现如下:
    epoch = 40
    LR_BASE = 0.2
    LR_DECAY = 0.99
    LR_STEP = 1
    
    for epoch in range(epoch):
    	lr = LR_BASE*LR_DECAY**(epoch/LR_STEP)
    	with tf.GradientTape() as tape:
    		loss = tf.square(w+1)
    	grads = tape.gradient(loss,w)
    	w.assign_sub(lr*grads)
    
  • 损失函数
    (1) 均方误差损失函数mse:
    M S E ( y _ , y ) = ∑ i = 0 n ( y − y _ ) 2 n MSE(y\_, y) = \frac{\sum_{i=0}^n(y-y\_)^2}{n} MSE(y_,y)=ni=0n(yy_)2
    程序实现如下:
    loss_mse = tf.reduce_mean(tf.square(y_-y))
    
    (2) 交叉熵损失函数CE:表征两个概率分布之间的距离:
    H ( y _ , y ) = − ∑ y _ ∗ l n y H(y\_, y) = -\sum y\_*lny H(y_,y)=y_lny
    程序实现如下:
    //计算交叉熵损失函数
    loss_ce = tf.losses.categorical_crossentropy(y_, y)
    //先将预测结果做Softmax,再计算交叉熵损失函数
    loss_ce = tf.nn.softmax_cross_entropy_with_logits(y_, y)
    
  • 正则化
    l o s s = l o s s ( y , y _ ) + R E G U L A R I Z E R ∗ l o s s ( w ) loss=loss(y, y\_)+REGULARIZER*loss(w) loss=loss(y,y_)+REGULARIZERloss(w)
    程序实现如下:
    loss_regularization = []
    loss_regularization.append(tf.nn.l2_loss(w1))
    loss_regularization.append(tf.nn.l2_loss(w2))
    loss_regularization = tf.reduce_sum(loss_regularization)
    loss = loss + 0.03 *  loss_regularization
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值