经常看见的出错的情况
该问题就是因为机器学习的学习能力过于强势,使得没有近似的过程:过拟合现象
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 问题的解决框架的建设
import tensorflow as tf
from sklearn.datasets import load_digits ##sklearn提供的一个数据集,可以仿照MNIST数据集进行理解
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import LabelBinarizer
##上面为运行环境的建设
##load data
digits = load_digits()
x=digits.data
y=digits.target
y=LabelBinarizer().fit_transform(y)#对得到的sklearn中的数据进行处理
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=.3)#将数据分成train_data 和test_data
##load data
##add_layers
def add_layer(input, in_size, out_size, acitation_function=None): # 添加层函数的定义
with tf.name_scope('layer'):
with tf.name_scope('wights'):
Weight = tf.Variable(tf.random_normal([in_size, out_size]), name='W') ##定义一个in_size X out_size的矩阵
with tf.name_scope('biases'):
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, name='B') # biases初始值推荐不为0,所以加上0.1
with tf.name_scope('Wx_plus_b'):
Wx_plus_b = tf.matmul(input, Weight) + biases # 这里看似是两个矩阵的相乘,但是实际上是一个数乘以一个数,最终是一个只有一列的数据乘以只有一行的数据
if acitation_function is None:
outputs = Wx_plus_b
else:
outputs = acitation_function(Wx_plus_b)
return outputs
##add_layers
##placeholder_setting
xs=tf.placeholder(tf.float32,[None,64])#这里的数据是一个8x8像素图片的数组,一行中拥有64个元素,一行表示一张图片
ys = tf.placeholder(tf.float32,[None,10])#经过层之后,输出一个一行10列的数组
##placeholder_setting
prediction = add_layer(l1,100,10,)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),reduction_indices=[1]))
tf.scalar_summary("loss",cross_entropy)
train_step=tf.train.GradientDescentOptimizer(0.6).minimize(cross_entropy)
sess=tf.Session()
merged = tf.merge_all summaries()