深度学习中对于网络的训练是参数更新的过程,需要注意一种情况就是输入数据未做归一化时,如果前向传播结果已经是[0,0,0,1,0,0,0,0]这种形式,而真实结果是[1,0,0,0,0,0,0,0,0),此时由于得出的结论不惧有概率性,而是错误的估计值,此时反向传播会使得权重和偏置值变的无穷大,导致数据溢出,也就出现了南的问题。
<>强解决办法:强>
1,对输入数据进行归一化处理,如将输入的图片数据除以255将其转化成0 - 1之间的数据,
2,对于层数较多的情况,各层都做batch_nomorlization;
3,对设置权重权重使用tf。truncated_normal(0、0.01[3, 3, 64])生成,同时值的均值为0,方差要小一些;
4,激活函数可以使用双曲正切;
5,减小学习率lr。
<>强实例:强>
进口tensorflow特遣部队 从tensorflow.examples.tutorials。mnist进口input_data mnist=input_data。read_data_sets(“数据”,one_hot=True) def add_layer (input_data in_size、out_size activation_function=None): 重量=tf.Variable (tf.random_normal ([in_size out_size])) 偏见=tf.Variable (tf。0 ([1,out_size]) + 0.1) Wx_plus_b=tf.add (tf。matmul (input_data、重量),偏见) 如果activation_function==没有: 输出=Wx_plus_b 其他: 输出=activation_function (Wx_plus_b) #,#返回输出权重 返回{outdata:输出,“w”:权重} def get_accuracy (t_y): #全球l1 #所以=tf.reduce_mean (tf.cast (tf.equal (tf.argmax (l1 (“outdata”), 1), tf.argmax (t_y 1)), dtype=tf.float32)) 全球预测 所以=tf.reduce_mean (tf.cast (tf.equal (tf.argmax(预测[' outdata '], 1), tf.argmax (t_y 1)), dtype=tf.float32)) 所以他们返回 X=tf.placeholder (tf。float32,没有,784) Y=tf.placeholder (tf。float32,[没有10]) 784年# l1=add_layer (X, 10日tf.nn.softmax) # cross_entropy=tf.reduce_mean (-tf.reduce_sum (Y * tf.log (l1 [' outdata ']), reduction_indices=[1])) # l1=add_layer (X, 784、1024、tf.nn.relu) l1=add_layer (X, 784、1024、无) 预测=add_layer (l1 (“outdata”), 1024年,10日tf.nn.softmax) cross_entropy=tf.reduce_mean (-tf.reduce_sum (Y * tf.log(预测[' outdata ']), reduction_indices=[1])) 优化器=tf.train.GradientDescentOptimizer (0.000001) 火车=optimizer.minimize (cross_entropy) newW=tf.Variable (tf.random_normal([10] 1024年)) newOut=tf.matmul (l1 (“outdata”), newW) newSoftMax=tf.nn.softmax (newOut) init=tf.global_variables_initializer () 与tf.Session税(): sess.run (init) #打印(sess.run (l1_Weights)) 因为我在范围(2): X_train y_train=mnist.train.next_batch (1) X_train=X_train/255 #需要进行归一化处理 #打印(sess.run (l1 [' w '], feed_dict={X: X_train})) #打印(sess.run(预测[' w '], feed_dict={X: X_train Y: y_train})) #打印(sess.run (l1 (“outdata”), feed_dict={X: X_train Y: y_train}) .shape) 打印(sess.run(预测[' outdata '], feed_dict={X: X_train Y: y_train})) 打印(sess.run (newOut feed_dict={X: X_train})) 打印(sess.run (newSoftMax feed_dict={X: X_train})) 打印(y_train) #打印(sess.run (l1 (“outdata”), feed_dict={X: X_train})) sess.run(火车,feed_dict={X: X_train Y: y_train}) 如果我% 100==0: #打印(sess.run (cross_entropy feed_dict={X: X_train Y: y_train})) 精度=get_accuracy (mnist.test.labels) print (sess.run(准确性、feed_dict={X: mnist.test.images})) #如果我% 100==0: #打印(sess.run(预测,feed_dict={X: X_train})) #打印(sess.run (cross_entropy feed_dict={X: X_train Y: y_train})) >之前以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
tensorflow训练中出现南问题的解决