TensorFlow: как изменить keep_prob для Dropout без использования feed_dict

Я построил модель TensorFlow, которая работает с пакетами обучения и тестирования, предоставляемыми входными очередями. Таким образом, я не предоставляю данные для обучения в явном виде, используя стандартный feed_dict. Тем не менее, мне нужно реализовать dropout, который требует заполнителя keep_prob, чтобы отключить dropout во время тестирования.

Я не могу найти, как решить это без отдельной модели. Есть какие-нибудь предложения?

Спасибо

2 ответа

Мой вопрос устарел, я сделал его слишком сложным.

При вызове sess.run() все еще можно передавать значения местозаполнителям через feed_dict, даже если есть входная очередь, предоставляющая обучающие примеры напрямую.

Допустим, ваш тензор 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)

Это плохой пример с точки зрения регрессии, но он показывает, как запрограммировать отсев и легко выводит, что делает отсев. Я надеюсь, вам понравится:)

Другие вопросы по тегам