PYGAD Как мне получить фактические веса, которые были обучены в моем генетическом алгоритме? ⇐ Python
PYGAD Как мне получить фактические веса, которые были обучены в моем генетическом алгоритме?
Я пытаюсь интегрировать PYGAD с вариационной квантовой схемой для итеративной оптимизации весов, передаваемых через схему во время обучения на указанном наборе данных. В этой конфигурации прогнозы определяются выходными данными вариационной схемы для каждого вектора признаков, а параметры, полученные вариационной схемой, соответствуют весам сети. Следовательно, после завершения генетического алгоритма моя цель — получить окончательные веса, которые дают наибольшее значение пригодности, а не результат работы сети.
Вот мой код:
"""Перед этим пунктом выполняется некоторая подготовка данных, которые будут предоставлены по запросу.""" защита get_angles(x): beta0 = 2 * np.arcsin(np.sqrt(x[1] ** 2) / np.sqrt(x[0] ** 2 + x[1] ** 2 + 1e-12)) beta1 = 2 * np.arcsin(np.sqrt(x[3] ** 2) / np.sqrt(x[2] ** 2 + x[3] ** 2 + 1e-12)) бета2 = 2 * np.arcsin( np.sqrt(x[2] ** 2 + x[3] ** 2) / np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2 + x[3] ** 2) ) return np.array([beta2, -beta1/2, beta1/2, -beta0/2, beta0/2]) слой защиты (W): qml.Rot(W[0, 0], W[0, 1], W[0, 2], провода=0) qml.Rot(W[1, 0], W[1, 1], W[1, 2], провода=1) qml.CNOT(wires=[0, 1]) Защиту состояния подготовки(а): qml.RY(a[0], провода=0) qml.CNOT(wires=[0, 1]) qml.RY(a[1], провода=1) qml.CNOT(wires=[0, 1]) qml.RY(a[2], провода=1) qml.PauliX(провода=0) qml.CNOT(wires=[0, 1]) qml.RY(a[3], провода=1) qml.CNOT(wires=[0, 1]) qml.RY(a[4], провода=1) qml.PauliX(провода=0) @qml.qnode(dev) схема определения (веса, углы): государственная подготовка(углы) для W в весах: слой (Вт) вернуть qml.expval(qml.PauliZ(0)) defvariation_classifier(веса, смещение, углы): обратная цепь(веса, углы) + смещение стоимость определения (веса, смещение, особенности): предсказания = [variational_classifier(веса, смещение, f) для f в функциях] возврат прогнозов Защиту Fitness_func (ga_instance, решение, sol_idx): население мира, предвзятость, особенности, ярлыки решение_фитнес = [] по весу в популяции: прогнозы = стоимость (вес, смещение, особенности) Solution_fitness.append(square_loss(метки, прогнозы)) вернуть решение_фитнес население = начальный_поп() Population_vectors = pygad.gann.population_as_vectors(population_networks=население) начальная_популяция = популяция_векторов.копия() num_parents_mating = 4 число_генераций = 10 mutation_percent_genes = 10 родительский_выбор_тип = "ссс" crossover_type = "одна_точка" тип_мутации = "случайный" Keep_parents = -1 ga_instance = pygad.GA(num_generations=num_generations, num_parents_mating=num_parents_mating, начальная_популяция = начальная_популяция, Fitness_func=fitness_func, mutation_percent_genes=mutation_percent_genes, родительский_выбор_тип=родительский_выбор_тип, crossover_type=crossover_type, тип_мутации=тип_мутации, Keep_parents=keep_parents, on_генерация = поколение_обратного вызова) ga_instance.run() ga_instance.plot_fitness() Если у кого-нибудь есть идеи о том, как получить веса в том же формате, что и те, которые передаются через функцию Initial_pop, что позволит мне оценить их пригодность для обучения моего вариационного классификатора, я был бы очень признателен услышать ваши мысли.
Я пытаюсь интегрировать PYGAD с вариационной квантовой схемой для итеративной оптимизации весов, передаваемых через схему во время обучения на указанном наборе данных. В этой конфигурации прогнозы определяются выходными данными вариационной схемы для каждого вектора признаков, а параметры, полученные вариационной схемой, соответствуют весам сети. Следовательно, после завершения генетического алгоритма моя цель — получить окончательные веса, которые дают наибольшее значение пригодности, а не результат работы сети.
Вот мой код:
"""Перед этим пунктом выполняется некоторая подготовка данных, которые будут предоставлены по запросу.""" защита get_angles(x): beta0 = 2 * np.arcsin(np.sqrt(x[1] ** 2) / np.sqrt(x[0] ** 2 + x[1] ** 2 + 1e-12)) beta1 = 2 * np.arcsin(np.sqrt(x[3] ** 2) / np.sqrt(x[2] ** 2 + x[3] ** 2 + 1e-12)) бета2 = 2 * np.arcsin( np.sqrt(x[2] ** 2 + x[3] ** 2) / np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2 + x[3] ** 2) ) return np.array([beta2, -beta1/2, beta1/2, -beta0/2, beta0/2]) слой защиты (W): qml.Rot(W[0, 0], W[0, 1], W[0, 2], провода=0) qml.Rot(W[1, 0], W[1, 1], W[1, 2], провода=1) qml.CNOT(wires=[0, 1]) Защиту состояния подготовки(а): qml.RY(a[0], провода=0) qml.CNOT(wires=[0, 1]) qml.RY(a[1], провода=1) qml.CNOT(wires=[0, 1]) qml.RY(a[2], провода=1) qml.PauliX(провода=0) qml.CNOT(wires=[0, 1]) qml.RY(a[3], провода=1) qml.CNOT(wires=[0, 1]) qml.RY(a[4], провода=1) qml.PauliX(провода=0) @qml.qnode(dev) схема определения (веса, углы): государственная подготовка(углы) для W в весах: слой (Вт) вернуть qml.expval(qml.PauliZ(0)) defvariation_classifier(веса, смещение, углы): обратная цепь(веса, углы) + смещение стоимость определения (веса, смещение, особенности): предсказания = [variational_classifier(веса, смещение, f) для f в функциях] возврат прогнозов Защиту Fitness_func (ga_instance, решение, sol_idx): население мира, предвзятость, особенности, ярлыки решение_фитнес = [] по весу в популяции: прогнозы = стоимость (вес, смещение, особенности) Solution_fitness.append(square_loss(метки, прогнозы)) вернуть решение_фитнес население = начальный_поп() Population_vectors = pygad.gann.population_as_vectors(population_networks=население) начальная_популяция = популяция_векторов.копия() num_parents_mating = 4 число_генераций = 10 mutation_percent_genes = 10 родительский_выбор_тип = "ссс" crossover_type = "одна_точка" тип_мутации = "случайный" Keep_parents = -1 ga_instance = pygad.GA(num_generations=num_generations, num_parents_mating=num_parents_mating, начальная_популяция = начальная_популяция, Fitness_func=fitness_func, mutation_percent_genes=mutation_percent_genes, родительский_выбор_тип=родительский_выбор_тип, crossover_type=crossover_type, тип_мутации=тип_мутации, Keep_parents=keep_parents, on_генерация = поколение_обратного вызова) ga_instance.run() ga_instance.plot_fitness() Если у кого-нибудь есть идеи о том, как получить веса в том же формате, что и те, которые передаются через функцию Initial_pop, что позволит мне оценить их пригодность для обучения моего вариационного классификатора, я был бы очень признателен услышать ваши мысли.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему все мои клетки в моем генетическом алгоритме движутся влево? [закрыто]
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-