#tensorflow #tensorflow-datasets #gaussianblur
#tensorflow #tensorflow-datasets #gaussianblur
Вопрос:
Я хотел бы изменить свой старый конвейер на основе очереди на новый dataset API в tensorflow по соображениям производительности. Однако, как только мой код изменился, он выполняется через 8 часов вместо 2.
Использование моего графического процессора составляло около 30/40%, и сейчас оно составляет от 0 до 6%.
Я нашел строку, которая делает это настолько медленным, и это когда я применяю размытие по Гауссу к своему набору данных :
def gaussian_blur(imgs,lbls):
imgs = tf.nn.conv2d(imgs,k_conv,
strides=[1, 1, 1, 1],
padding='SAME',
data_format='NHWC'
)
return imgs, lbls
ds = ds.map(gaussian_blur)
С моим старым конвейером на основе очередей эта строка почти не замедляет мою программу.
Я думаю, это потому, что эта строка раньше выполнялась на графическом процессоре, но новый API dataset заставляет его работать на процессоре, который намного медленнее и уже используется на 100%.
Есть ли у вас какие-либо идеи о том, как я могу применить размытие по Гауссу без значительного снижения производительности? Должен ли я сохранить свой старый конвейер на основе очереди?
Комментарии:
1. Можете ли вы перенести операцию в свою модель? Прямо сейчас кажется, что вы делаете это, когда генерируете данные, что должно происходить на процессоре, чтобы это можно было выполнять параллельно с обучением.
2. Спасибо! Это единственный способ, который я нашел, чтобы вычислить его на моем графическом процессоре. К сожалению, это действительно неудобно, и я в конце концов отказался от применения gaussian blur.
Ответ №1:
Хотя я не пробовал это на наборе данных tf, это должно быть применимо. Я обнаружил, что эта комбинация очень производительна и упрощена:
import tensorflow as tf
import tensorflow_addons as tfa
dummy_dataset = tf.ones((1000, 224, 224, 3))
blurred_dummy_dataset = tf.map_fn(tfa.image.gaussian_filter2d, dummy_dataset)
# ~ 3 second runtime in Google Colab on a Tesla K80
https://www.tensorflow.org/addons/api_docs/python/tfa/image/gaussian_filter2d
https://www.tensorflow.org/api_docs/python/tf/map_fn