У меня есть следующий код, который я использую, чтобы найти наиболее оптимальные значения для некоторых метапараметров
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. Пожалуйста, дайте мне знать, если кто-нибудь может помочь.