Выполните итерацию по вложенному для l oop, чтобы выполнить поиск по сетке, используя несколько ядер в Python - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть следующий код, который я использую, чтобы найти наиболее оптимальные значения для некоторых метапараметров

for offset in np.arange(0, 2*np.pi, np.pi/4):
            for theta in np.arange(0, 2*np.pi, np.pi/4):
                for sigma in np.arange(1, 20, 0.5):
                    for frequency in np.arange(0.25, 1.5, 0.25):

                        print("\n\tStates Searched: " + str(statesSearched))
                        statesSearched = statesSearched+1
                        HammingDistance = []


                        # Gabor Kernel Definition
                        g_kernel = gabor_kernel(frequency, theta, sigma, sigma, offset)

                        .
                        .
                        Filter n images using a Gabor Filter
                        .
                        .
                        .



                        # Calculate the Hamming Distance 


                        height, width = FilteredImage_List[0].shape

                        str1 = ImageGrayArray[0]

                        for str2 in ImageGrayArray:
                            HammingDistance.append(sum(map(BitCompare, str1, str2))/(height * width))

Где BitCompare принимает XOR каждого 2-битного серого код (что-то, что мне нужно выполнить)

У меня есть CSV-файл, где я храню значение каждого параметра ( частота, тета, сигма, смещение ) вместе с расстояниями Хэмминга , которые они вычисляют. Если расстояние « лучше », чем предыдущий набор записей, тогда я добавляю вновь рассчитанные значения в файл CSV, чтобы в конечном итоге найти глобальный оптимум.

Однако это требует действительно долгое время, учитывая, что нужно искать около 12 000 состояний, при этом размер фильтра увеличивается на каждой итерации.

Поэтому я хочу найти способ параллельно выполнять поиск по сетке, используя несколько ядер и потоков. , чтобы эта операция выполнялась быстро, не вызывая проблем взаимоблокировки с файлом csv. Пожалуйста, дайте мне знать, если кто-нибудь может помочь.

...