Tensorflow笔记四:神经网络的优化

一,基本概念

(1)神经元模型:用数学公式表示为;f为激活函数,神经网络是以神经元为基本单元构成的。

(2)激活函数:引入非线性激活因素,提高模型的表达力。常用的激活函数有relu(),sigmoid(),tanh()等。

1,激活函数relu():在Tensorflow中,用tf.nn.relu()表示。

2,激活函数sigmoid():在Tensorflow中,用tf.nn.sigmoid()表示。

3,激活函数tanh():在Tensorflow中,用tf.nn.tanh()表示。

(3)神经网络的复杂度:可用神经网络的层数和神经网络中待优化参数个数表示。

(4)神经网络的层数:一般不计输入层,层数为n个隐藏层加1个输出层。

(5)神经网络待优化的参数:神经网络所有参数w的个数和所有参数b的个数。

(6)损失函数(loss):用来表预测值(y)与已知答案(y_)的差距,在训练神经网络时,通过不断改变神经网络中所有参数,使损失函数不断减小,从而训练出更高准确率的神经网络模型。

(7)常用的损失函数有均方误差,自定义和交叉熵。

1,均方误差:loss_mse=tf.reduce_mead(tf.square(y_-y))

2,自定义损失函数:根据问题的实际情况,定制合理的损失函数

3,交叉熵:表示两个概率分布之间的距离,交叉熵越大,两个概率分布距离越远,两个概率分布越相异;交叉熵越小,两个概率分布距离越近,两个概率分布越相似。

  ce=-tf.reduce_mean(y_*tf.log(tf,clip_by_value(y,1e-12,1.0)))

或者用softmax函数:

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

cem=tf,reduce_mean(ce)

(8)学习率(learning_rate):表示了每次参数更新的幅度大小,学习率过大,会导致优化的参数在最小值附近波动,不不收敛;学习率过小,会导致待优化的参数收敛缓慢。

(9)指数衰减学习率:学习率随着训练轮数变化而动态更新:

        global_step=tf.Variable(0,trainable=False)

       learning_rate=tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,LEARNING_RATE_STEP,

       LEARNING_RATE_DECAY,staircase=Trie/False)

(10)滑动平均值(影子):影子=衰减率*影子+(1-衰减率)*参数

ema=tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)

ema_op=ema.apply(tf.trainable_variables())

with tf.control_dependencies([train_step,ema_op]):

               train_op=tf.no_op(name='train')

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

(12)正则化:在损失函数中给每个参数w加上权重,引入模型复杂度指标,从而抑制模型噪声,减小过拟合。

1,L1正则化:loss(w)=tf.contrib.layers.11_regularizer(REGULARIZER)(w)

2,L2正则化:loss(w)=tf.contrib.layers.12_regularizer(REGULARIZER)(w)

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

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

 

 

你可能感兴趣的:(人工智能)