Код: Выделить всё
for my_dense_netowrk,my_lstm_netowrk in networks_list
my_dense_netowrk.paramters = 100
my_lstm_netowrk.paramters = 150
for images in data[:60]:
@tf.function
def tf_wrapper(images, state):
model_data = meta_model(images)
data_prepared = image_preparation(model_data)
results = my_dense_netowrk(data_prepared)
results.shape = (19000,1,1)
better_results, state = my_lstm_netowrk(results, state)
return better_results, state
better_results, state = tf_wrapper(images, state)
my_dense_netowrk_n2.paramters = 100
my_lstm_netowrk_n2.paramters = 100
and continue...
- Я использую API конвейера данных тензорного потока, и фактически все необходимые данные (переменная данных) могут быть размещены в моей памяти.
- Я не указал размер пакета для своей нейронной сети при построении и вставке данных в виде огромной стопки (размер пакета 19000) в нейронную сеть для распараллеливания всего. Даже lstm не ограничен обработкой последовательностей, поскольку ему приходится обрабатывать 19 000 входных данных одновременно. Но когда я увеличил параметры своей нейронной сети в 10 раз (что мне не нужно), мой код почти не заметил, полагая, что размер пакета довольно велик.
- @tf. Функция немного ускоряет работу.
- Я пробовал профилировать, но не смог найти узкое место, так как происходит слишком много операций. Я обнаружил, что запуск ядра занимает половину времени, потому что обычно тензорный поток ожидает, что этот процесс займет много времени, поэтому я думаю, он не оптимизирован для таких задач, потому что, когда я увеличиваю свой цикл с 60 до 6000, он становится в 10 раз более эффективным на каждый проход цикла! Похоже, на подготовку требуется время.
- Функция image_preparation() использует только tf-операции, такие как изменение формы, стек, плитка, и я не могу подготовить данные заранее.
- Я использую macOS с чипом M3 Max, и нет никакой разницы, использую ли я графический процессор или процессор. Я пробовал Python 3.8, 3.9, 3.10, 3.11, 3.12.
Подробнее здесь: https://stackoverflow.com/questions/786 ... al-network