tensorflow.python.eager,from tensorflow.python._pywrap

  tensorflow.python.eager,from tensorflow.python._pywrap

  本文主要为大家介绍python人工智能tensorflow函数tf.nn.dropout的使用实例。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  00-1010 TF . nn . dropout函数简介示例代码keep_prob=0.5keep_prob=1

  

目录

  当集合神经网络足够复杂时,神经网络可以无限逼近一个非线性连续函数,但如果集合神经网络足够复杂,就会导致过拟合,如下图所示。

  当我看到这条蓝色曲线时,我知道:

  显然,蓝色曲线是过度拟合的结果。虽然它很好地拟合了每个点的位置,但曲线是弯曲的。这条曲线不稳定。在实际的工程实验中,我们更喜欢得到像黑线一样的曲线。

  

前言

  Tf.nn.dropout是tensorflow的好朋友。其功能是用于缓解过拟合带来的问题的功能。它通常用于每个连接层的输出。

  辍学就是在不同的训练过程中,让部分神经元按照一定的概率停止工作。也就是说,让每个神经元按照一定的概率停止工作。在这个训练过程中,权值不更新,也不参与神经网络的计算。但是它的权重还是存在的,下次更新可能会用到。

  def dropout(x,keep_prob,noise _ shape=无,seed=无,name=无)

  x一般是每层的产量。

  Keep_prob,keep_prob的神经元保持工作,其余的停止工作,进行更新。

  实际定义每一层神经元的时候可以加上Dropout。

  def add_layer(inputs,in_size,out_size,n_layer,activation_function=None,keep_prob=1):

  layer_name=图层%s%n_layer

  使用tf.name_scope(layer_name):

  使用tf.name_scope(Weights):

  重量=tf。变量(TF . random _ normal([输入大小,输出大小]),name=Weights )

  tf.summary.histogram(图层名称/权重,权重)

  with TF . name _ scope( bias ):

  偏差=tf。Variable(tf.zeros([1,out_size]) 0.1,name= biases )

  TF . summary . histogram(layer _ name /bias ,bias)

  with TF . name _ scope( Wx _ plus _ b ):

  Wx_plus_b=tf.matmul(输入,权重)偏差

  #dropout一般加载每个神经层的输出。

  Wx _ plus _ b=TF . nn . dropout(Wx _ plus _ b,keep_prob)

  #看这里,看这里,辍学在这里。

  TF . summary . histogram(layer _ name /Wx_plus_b ,Wx _ plus _ b)

  如果activation_function==None :

  输出=Wx_plus_b

  else:

  输出=激活功能(Wx_plus_b)

  TF . summary . histogram(layer _ name /outputs ,输出)

  返回输出

  但是需要注意的是,神经元的输出层不能定义dropout参数。因为输出层是输出结果,如果在输出层定义参数,输出结果会被dropout丢弃。

  s="maodian">

  

例子

  本次例子使用sklearn.datasets,在进行测试的时候,我们只需要改变最下方keep_prob:0.5的值即可,1代表不进行dropout。

  

  

代码

  

import tensorflow as tf

  from sklearn.datasets import load_digits

  from sklearn.model_selection import train_test_split

  from sklearn.preprocessing import LabelBinarizer

  digits = load_digits()

  X = digits.data

  y = digits.target

  y = LabelBinarizer().fit_transform(y)

  X_train,X_test,Y_train,Y_test = train_test_split(X,y,test_size = 500)

  def add_layer(inputs,in_size,out_size,n_layer,activation_function = None,keep_prob = 1):

   layer_name = layer%s%n_layer

   with tf.name_scope(layer_name):

   with tf.name_scope("Weights"):

   Weights = tf.Variable(tf.random_normal([in_size,out_size]),name = "Weights")

   tf.summary.histogram(layer_name+"/weights",Weights)

   with tf.name_scope("biases"):

   biases = tf.Variable(tf.zeros([1,out_size]) + 0.1,name = "biases")

   tf.summary.histogram(layer_name+"/biases",biases)

   with tf.name_scope("Wx_plus_b"):

   Wx_plus_b = tf.matmul(inputs,Weights) + biases

   Wx_plus_b = tf.nn.dropout(Wx_plus_b,keep_prob)

   tf.summary.histogram(layer_name+"/Wx_plus_b",Wx_plus_b)

   if activation_function == None :

   outputs = Wx_plus_b

   else:

   outputs = activation_function(Wx_plus_b)

   tf.summary.histogram(layer_name+"/outputs",outputs)

   return outputs

  def compute_accuracy(x_data,y_data,prob = 1):

   global prediction

   y_pre = sess.run(prediction,feed_dict = {xs:x_data,keep_prob:prob})

   correct_prediction = tf.equal(tf.arg_max(y_data,1),tf.arg_max(y_pre,1))

   accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

   result = sess.run(accuracy,feed_dict = {xs:x_data,ys:y_data,keep_prob:prob})

   return result

  keep_prob = tf.placeholder(tf.float32)

  xs = tf.placeholder(tf.float32,[None,64])

  ys = tf.placeholder(tf.float32,[None,10])

  l1 = add_layer(xs,64,100,l1,activation_function=tf.nn.tanh, keep_prob = keep_prob)

  l2 = add_layer(l1,100,100,l2,activation_function=tf.nn.tanh, keep_prob = keep_prob)

  prediction = add_layer(l1,100,10,l3,activation_function = tf.nn.softmax, keep_prob = 1)

  with tf.name_scope("loss"):

   loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=ys,logits = prediction),name = loss)

   tf.summary.scalar("loss",loss)

  train = tf.train.AdamOptimizer(0.01).minimize(loss)

  init = tf.initialize_all_variables()

  merged = tf.summary.merge_all()

  with tf.Session() as sess:

   sess.run(init)

   train_writer = tf.summary.FileWriter("logs/strain",sess.graph)

   test_writer = tf.summary.FileWriter("logs/test",sess.graph)

   for i in range(5001):

   sess.run(train,feed_dict = {xs:X_train,ys:Y_train,keep_prob:0.5})

   if i % 500 == 0:

   print("训练%d次的识别率为:%f。"%((i+1),compute_accuracy(X_test,Y_test,prob=0.5)))

   train_result = sess.run(merged,feed_dict={xs:X_train,ys:Y_train,keep_prob:0.5})

   test_result = sess.run(merged,feed_dict={xs:X_test,ys:Y_test,keep_prob:0.5})

   train_writer.add_summary(train_result,i)

   test_writer.add_summary(test_result,i)

  

  

  

keep_prob = 0.5

  训练结果为:

  

训练1次的识别率为:0.086000。
训练501次的识别率为:0.890000。
训练1001次的识别率为:0.938000。
训练1501次的识别率为:0.952000。
训练2001次的识别率为:0.952000。
训练2501次的识别率为:0.946000。
训练3001次的识别率为:0.940000。
训练3501次的识别率为:0.932000。
训练4001次的识别率为:0.970000。
训练4501次的识别率为:0.952000。
训练5001次的识别率为:0.950000。

  

  这是keep_prob = 0.5时tensorboard中的loss的图像:

  

  

  

keep_prob = 1

  训练结果为:

  

训练1次的识别率为:0.160000。
训练501次的识别率为:0.754000。
训练1001次的识别率为:0.846000。
训练1501次的识别率为:0.854000。
训练2001次的识别率为:0.852000。
训练2501次的识别率为:0.852000。
训练3001次的识别率为:0.860000。
训练3501次的识别率为:0.854000。
训练4001次的识别率为:0.856000。
训练4501次的识别率为:0.852000。
训练5001次的识别率为:0.852000。

  

  这是keep_prob = 1时tensorboard中的loss的图像:

  

  可以明显看出来keep_prob = 0.5的训练集和测试集的曲线更加贴近。

  以上就是python人工智能tensorflow函数tf.nn.dropout使用示例的详细内容,更多关于tensorflow函数tf.nn.dropout的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: