本问题出现的主要原因为,机器学习过于自信,过于相信自己,

经常看见的出错的情况

image.png
该问题就是因为机器学习的学习能力过于强势,使得没有近似的过程:过拟合现象

dropout

1.Dropout是在标准的bp网络的的结构上,使bp网(是一种按照误差逆向传播算法训练的多层前馈神经网络)的隐层激活值,以一定的比例v变为0,即按照一定比例v,随机地让一部分隐层节点失效;在后面benchmark实验测试时,部分实验让隐层节点失效的基础上,使输入数据也以一定比例(试验用20%)是部分输入数据失效(这个有点像denoising autoencoder),这样得到了更好的结果。

  2.去掉权值惩罚项,取而代之的事,限制权值的范围,给每个权值设置一个上限范围;如果在训练跟新的过程中,权值超过了这个上限,则把权值设置为这个上限的值(这个上限值得设定作者并没有说设置多少最好,后面的试验中作者说这个上限设置为15时,最好;为啥?估计是交叉验证得出的实验结论)。限制权值的大小

  这样处理,不论权值更新量有多大,权值都不会过大。此外,还可以使算法使用一个比较大的学习率,来加快学习速度,从而使算法在一个更广阔的权值空间中搜索更好的权值,而不用担心权值过大。
————————————————
版权声明:本文为CSDN博主「炼丹术士」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010402786/article/details/46812677

overfitting 问题的解决框架的建设

  1. import tensorflow as tf
  2. from sklearn.datasets import load_digits ##sklearn提供的一个数据集,可以仿照MNIST数据集进行理解
  3. from sklearn.cross_validation import train_test_split
  4. from sklearn.preprocessing import LabelBinarizer
  5. ##上面为运行环境的建设
  6. ##load data
  7. digits = load_digits()
  8. x=digits.data
  9. y=digits.target
  10. y=LabelBinarizer().fit_transform(y)#对得到的sklearn中的数据进行处理
  11. x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=.3)#将数据分成train_data test_data
  12. ##load data
  13. ##add_layers
  14. def add_layer(input, in_size, out_size, acitation_function=None): # 添加层函数的定义
  15. with tf.name_scope('layer'):
  16. with tf.name_scope('wights'):
  17. Weight = tf.Variable(tf.random_normal([in_size, out_size]), name='W') ##定义一个in_size X out_size的矩阵
  18. with tf.name_scope('biases'):
  19. biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, name='B') # biases初始值推荐不为0,所以加上0.1
  20. with tf.name_scope('Wx_plus_b'):
  21. Wx_plus_b = tf.matmul(input, Weight) + biases # 这里看似是两个矩阵的相乘,但是实际上是一个数乘以一个数,最终是一个只有一列的数据乘以只有一行的数据
  22. if acitation_function is None:
  23. outputs = Wx_plus_b
  24. else:
  25. outputs = acitation_function(Wx_plus_b)
  26. return outputs
  27. ##add_layers
  28. ##placeholder_setting
  29. xs=tf.placeholder(tf.float32,[None,64])#这里的数据是一个8x8像素图片的数组,一行中拥有64个元素,一行表示一张图片
  30. ys = tf.placeholder(tf.float32,[None,10])#经过层之后,输出一个一行10列的数组
  31. ##placeholder_setting
  32. prediction = add_layer(l1,100,10,)
  33. cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),reduction_indices=[1]))
  34. tf.scalar_summary("loss",cross_entropy)
  35. train_step=tf.train.GradientDescentOptimizer(0.6).minimize(cross_entropy)
  36. sess=tf.Session()
  37. merged = tf.merge_all summaries()