tf.gradients сильно загружает оперативную память - PullRequest
1 голос
/ 07 мая 2020

Я создал модель автоэнкодера для CIFAR10, используя tf.gradients следующим образом:

W = tf.Variable(tf.truncated_normal([dimensionality, code_size], stddev=0.1))
b = tf.Variable(tf.constant(0.1, shape=[code_size]))
b_r = tf.Variable(tf.constant(0.1, shape=[dimensionality]))

code_data = tf.nn.sigmoid(tf.matmul(training_data, W) + b)
recover = tf.matmul(code_data, tf.transpose(W)) + b_r
grad_phi_psi = []
for i in range(batch_size):
    for j in range(dimensionality):
        grad_phi_psi.append(tf.gradients(recover[i][j], [training_data[i]], unconnected_gradients='zero')[0])
grad_phi_psi = tf.reshape(tf.stack(grad_phi_psi), [batch_size, dimensionality, dimensionality])

l oop занимает много времени и заполняет почти все 64 ГБ ОЗУ, хотя у меня только batch_size = 10, размерность = 3072

После формирования модели и инициализации сеанса выясняется, что он использует только 250 МБ памяти графического процессора, но работает очень медленно. Оперативная память все еще заполнена.

В чем причина такой большой нагрузки на оперативную память. Можно ли как-то решить эту проблему, потому что мне нужно увеличить batch_size?

...