【问题标题】:TensorFlow: How to change keep_prob for Dropout without using a feed_dictTensorFlow:如何在不使用 feed_dict 的情况下为 Dropout 更改 keep_prob
【发布时间】:2017-09-10 13:56:13
【问题描述】:

我已经构建了一个 TensorFlow 模型,该模型适用于 Input Queues 提供的训练和测试批次。因此,我没有使用标准 feed_dict 明确提供训练数据。不过,我需要实现 dropout,它需要一个 keep_prob 占位符来在测试期间关闭 dropout。

如果没有单独的模型,我无法找到解决此问题的方法。有什么建议吗?

谢谢

【问题讨论】:

    标签: tensorflow regularized


    【解决方案1】:

    我的问题已经过时了,我把它弄得太复杂了。

    在调用 sess.run() 时,仍然可以通过 feed_dict 将值提供给占位符,即使有一个输入队列直接提供训练示例。

    【讨论】:

      【解决方案2】:

      假设你的张量 layer1 定义如下:

      layer1 = tf.nn.relu(tf.matmul(w,x)+b)
      

      要申请辍学,你只需这样做

      dropout_layer1 = tf.nn.dropout(layer1, keep_prob)
      

      您的keep_prob 在某处定义,我通常使用 FLAGS 控制它,但您可以在程序内部使用普通声明。然后你可以使用dropout_layer1 作为一个正常的张量。这里有一个关于使用它的简单示例:

      import tensorflow as tf
      import numpy as np
      tf.reset_default_graph()
      
      keep_prob = 0.5
      
      a = tf.get_variable('a', initializer=np.random.normal())
      b = tf.get_variable('b', initializer=np.random.normal())
      
      x=[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.]
      y=list(map(lambda i: i+np.random.normal(0, 0.1), x))
      f=tf.multiply(x,a)+b
      f_dropout = tf.nn.dropout(f,keep_prob)
      
      loss = tf.reduce_sum(tf.pow(f_dropout-y, 2))
      train = tf.train.GradientDescentOptimizer(0.001).minimize(loss)
      
      sess = tf.Session() #
      init = tf.global_variables_initializer()
      sess.run(init)
      
      for i in range(1000):
          _, l, slope, intercept = sess.run([train, loss, a, b])
          print(list(map(lambda i: i*slope+intercept, x)))
          print('a: %.2f' %slope)
          print('b: %.2f' %intercept)
      

      从回归的角度来看,这是一个不好的例子,但它展示了如何对 dropout 进行编程,并且很容易推断出 dropout 的作用。我希望你会喜欢它:)

      【讨论】:

      • 谢谢,但这已经很清楚了,尽管我的问题中没有明确说明。
      • 不过,我刚刚解决了它,它并没有我想象的那么复杂:在使用输入队列时,仍然可以将值提供给占位符(在本例中为keep_prob)。
      • 很高兴您解决了它。我仍然修改了我的答案。看看这个!我希望你会喜欢它!
      猜你喜欢
      • 2019-08-09
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2013-01-11
      • 2016-05-08
      相关资源
      最近更新 更多