深度学习(二)-----传统神经网络

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhouguangfei0717/article/details/77572078

模型框架:



神经网络的TensorFlow实现:

data=tf.placeholder(tf.float32)
var=tf.Variable(...)
    loss=some_function_of(var,data)
var_grad=tf.gradients(loss,[var])

sess=tf.Session()
var_grad_val=sess.run(var_grad,feed_dict={data:...})

很重要的一个点,损失函数:


softmax函数:

这个是指数形式的函数,指数的特点是增长比较快,可以 把得到的值,通过softmax变得更加明显,一般用在分类里,



cross entropy是交叉熵,他的用途主要是{0-1}之间的回归问题。



一些小的知识点:

@1:learning rate(学习率),这个是更新时的步长,这个值有三种定义      一般而言,学习率大,迭代快,    学习率小,精度高 

                                                                                (1)fix固定不变

                                                                                (2)比如1000个数据前100个是0.5,然后每隔100个,就改变这个值(变小)。

                                                                                (3)每次更新都改变学习率(见下图)

                                       


@2:momentum(动量):是在更新的时候,我们每一次都会微调一下更新的方向,





思考一个问题?学习率和动量的区别????????????

              答:学习率更新时,只改变大小,对方向没用,动量可以改变方向。



@3:过拟合overfiting的解决:

1:regularization

2:dropout,我们在更新参数时,更加喜欢参数均匀点会更好,但有的时候,很多参数会变成零,这是去掉一下参数,对结果影响不大,这是因为参数太多 ,个别参数影响忽略不计。这个东西和regularization一样的

3:pooling,这个其实就是降维,比如100*100的矩阵变成50*50的,

怎么变?

答:每四个只取最大值,其他不要。

为什么可以怎样变?

答:这是很多部分对最终结果的影响,大部分是由最大值决定的,其他小的值影响很小,比如,一张图把他变成一个大矩阵,其实很多部分为零,对结果没有,去掉不但可以减小计算复杂度,而且可以有效的抑制overfiting

4:fine-tuning:把别人训练好的数据,freeze*(冰冻)一部分,只更新一小部分

                                          



展开阅读全文

没有更多推荐了,返回首页