tensorflow训练中出现南问题的解决

  

深度学习中对于网络的训练是参数更新的过程,需要注意一种情况就是输入数据未做归一化时,如果前向传播结果已经是[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训练中出现南问题的解决