Tensorflow学习笔记——常用函数 持续更新

一、Tensorflow基础

1、创建张量: 

① tf.Variables( )

tf.Variables(  ,dtype =  ) #创建一个张量,dtype为张量的变量类型,如dtype=tf.float32
tf.Variables(0,trainable=True) #trainale表示该值能否被训练,False或True
tf.Variable(tf.random_normal([20, 10], stddev=0.35))     #以标准差0.35的正太分布初始化一个形状为[20,40]的张量
tf.Variable(tf.zeros([20]))  #创建一个形状为[20]的张量, 里面的元素值全部为0.

举一个例子


import tensorflow as tf
w = tf.Variable([0,1])   #创建一个二维张量w
print(v)  # w的shape,而非w的值,结果是: <tf.Variable 'Variable:0' shape=(2,) dtype=int32_ref>
with tf.Session() as sess:
    sess.run(v.initializer)     #运行变量的initializer。调用op之前,所有变量都应被显式地初始化过。
    sess.run(v) #打印出 [0,1]

② tf.get_variable( )

my_variable = tf.get_variable("my_variable", [1, 2, 3]) #初始化一个名为“my_variable”的变量,该变量是形状为 [1, 2, 3] 的三维张量。

③ tf.trainable_variables( ) 

tf.trainable_variables( ) #把所有待训练参数汇总成列表

2、初始化张量:

张量在其他操作进行之前,都必须对其进行初始化。

w.initializer() #对单个变量-- w 初始化

tf.global_variables_initializer() # 给所有变量初始化

注意:tf.global_variables_initializer ( ) 函数不能指定变量的初始化顺序。因此,如果变量的初始值由另一变量的值决定,那么会有很大的可能出现错误。


二、神经网络优化

1、激活函数

激活函数转载于https://blog.csdn.net/qq_35203425/article/details/79964286

tf.nn.relu(features, name=None) 整流函数:max(features, 0)
tf.nn.relu6(features, name=None) 以6为阈值的整流函数:min(max(features, 0), 6)
tf.nn.elu(features, name=None) elu函数,exp(features) - 1 if < 0,否则features
Exponential Linear Units (ELUs)
tf.nn.softplus(features, name=None) 计算softplus:log(exp(features) + 1)
tf.nn.dropout(x, keep_prob, 
noise_shape=None, seed=None, name=None)
计算dropout,keep_prob为keep概率
noise_shape为噪声的shape
tf.nn.bias_add(value, bias, data_format=None, name=None) 对value加一偏置量
此函数为tf.add的特殊情况,bias仅为一维,
函数通过广播机制进行与value求和,
数据格式可以与value不同,返回为与value相同格式
tf.sigmoid(x, name=None) y = 1 / (1 + exp(-x))
tf.tanh(x, name=None) 双曲线切线激活函数

2、损失函数

损失函数:用于表示预测值(y)与已知答案(y_)的差距。

① 均方误差mse:

loss_mse = tf.reduce_mean(tf.square(y_ - y))

② 自定义损失函数:自己定义损失函数

比如:

loss = tf.reduce_sum(tf.where(tf.greater(y,y_),COST(y-y_),PROFIT(y_-y)))
#tf.reduce_sum表示损失求和
#tf.where()表示如果成立则为COST,否则为PROFIT
#tf.greater(),表示前>后

③交叉熵:

表示两个概率分布之间的距离。交叉熵越大,则两个概率分布距离越远。

计算公式: H(y_,y) = -\sum y_\times \log y

ce = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,val_a,val_b)))
#y小于val_a时为val_a,y大于val_a时为val_b

softmax( )函数:使输出满足概率分布。

ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))
cem = tf.reduce_mean(ce)

3、学习率

学习率:每次参数更新的幅度大小。

在训练过程中,参数更新随着损失函数梯度下降的方向。

① 更新公式:w_{n+1} = w_{n} - learning_rate\bigtriangledown

② 指数衰减学习率:

指数衰减学习率:学习率动态变化

learning_rate = tf.train.exponential_dacay(0.1 , global_step , 100 , 0.96 , staircase = True)
#0.1是学习率初始值
#global_step 是运行轮数
#100是多少论更新一次学习率,计算公式: = 总样本数/BATCH_SIZE
#0.96是学习衰减率 (0,1)
#staircase   True表示学习率阶梯型衰减,Flase表示学习率成光滑曲线下降

4、滑动平均:

滑动平均:滑动平均记录了模型内参数的平均值。利用滑动平均可以增强模型的泛化能力(泛化能力在下一个小节过拟合中解释)。

滑动平均随参数的变化而变化。

ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)
#滑动平均值计算公式,其中MOVING_AVERAGE_DECAY是滑动平均率,一般取接近1的数,global_step指当前训练了多少轮。

ema_op = ema.apply(tf.trainable_variables()) #求某待训练参数列表的滑动平均值

with tf.control_dependencies([train_step,ema_op]):
    train_op = tf.no_op(name = 'train')
#该函数实现将滑动平均和训练过程同步运行
ema.average(参数名) #返回某参数的平均值

5、正则化:

过拟合:神经网络模型在训练集上准确率较高,而在新的数据进行预测或分类时准确率较低,说明模型泛化能力差。

正则化:在损失函数中给每个参数w加上权重,引入模型复杂度指标,从而抑制模型噪声,减小过拟合。一般只对参数w使用,不对偏置b使用。

add_to_collection()函数:

tf.add_to_collection(‘list_name’, element) #将元素element添加到列表list_name中
tf.get_collection(‘list_name’) #返回名称为list_name的列表
tf.add_n(list) #将列表元素相加并返回

正则化一般有两种计算方法:

①L1正则化:

loss(w)=tf.contrib.layers.l1_regularizer(REGULARIZER)(w)

②L2正则化:

loss(w)=tf.contrib.layers.l1_regularizer(REGULARIZER)(w)

Tensorflow函数实现正则化:

tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))

loss = cem + tf.add_n(tf.get_collection('losees'))

6、matplotlib模块

参考:https://blog.csdn.net/ScarlettYellow/article/details/80458797

很详细。

发布了26 篇原创文章 · 获赞 9 · 访问量 8234

猜你喜欢

转载自blog.csdn.net/weixin_41664064/article/details/87693468