为什么我的NEAT配置不工作

我正在尝试使用NEAT通过音乐理论来生成歌曲。我已经在这里列出了基础代码,并且目前计划扩展一些功能。我的代码如下所示,同时附上了我的配置文件:然而,每当我尝试使用我的配置文件时,它要么返回一个运行时错误,提示缺少配置项:num_inputs,要么如果我尝试使用默认基因组配置,它会返回属性错误:模块 ‘neat’ 没有属性 ‘DefaultGenomeConfig’。任何建议都会非常有帮助。非常感谢您的提前帮助

import neatimport randomimport numpy as npimport osfrom midiutil import MIDIFileconfig_path = "config.txt"num_generations = 10num_measures = 16beats_per_measure = 4num_tracks = 1beat_duration = 0.25output_file = "generated_music.mid"def evaluate_genome(genome, config):    net = neat.nn.FeedForwardNetwork.create(genome, config)    melody = []    for _ in range(num_measures * beats_per_measure):        inputs = [random.random()]        output = net.activate(inputs)        note = int(output[0] * 127)        melody.append(note)    fitness = calculate_fitness(melody)    return fitnessdef calculate_fitness(melody):    melodic_fitness = calculate_melodic_fitness(melody)    harmonic_fitness = calculate_harmonic_fitness(melody)    rhythmic_fitness = calculate_rhythmic_fitness(melody)    overall_fitness = melodic_fitness + harmonic_fitness + rhythmic_fitness    return overall_fitnessdef calculate_melodic_fitness(melody):    melodic_fitness = 0.0  # 占位值    return melodic_fitnessdef calculate_harmonic_fitness(melody):    harmonic_fitness = 0.0    return harmonic_fitnessdef calculate_rhythmic_fitness(melody):    rhythmic_fitness = 0.0  # 占位值    return rhythmic_fitnessdef run_neat():    local_dir = os.path.dirname(__file__)    config_path = os.path.join(local_dir, "config.txt")    config = neat.Config(        neat.DefaultGenome,        neat.DefaultReproduction,        neat.DefaultSpeciesSet,        neat.DefaultStagnation,        neat.DefaultGenomeConfig,        config_path,    )    population = neat.Population(config)    reporter = neat.StdOutReporter(True)    population.add_reporter(reporter)    winner = population.run(evaluate_genome, num_generations)    best_genome = winner    best_net = neat.nn.FeedForwardNetwork.create(best_genome, config)    melody = []    for _ in range(num_measures * beats_per_measure):        inputs = [random.random()]        output = best_net.activate(inputs)        note = int(output[0] * 127)        melody.append(note)    midi_file = MIDIFile(num_tracks)    track = 0    time = 0    for note in melody:        midi_file.addNote(track, 0, note, time, beat_duration, 100)        time += beat_duration    with open(output_file, "wb") as file:        midi_file.writeFile(file)    print("生成的音乐已保存为", output_file)run_neat()fitness_criterion = maxfitness_threshold = 1000pop_size = 100reset_on_extinction = False

我的配置文件:

[DefaultGenome]# 节点激活选项:sigmoid, tanh, relu, softmax, identityactivation_default = sigmoidactivation_mutate_rate = 0.1activation_options = sigmoid# 节点聚合选项:sum, product, min, max, meanaggregation_default = sumaggregation_mutate_rate = 0.0aggregation_options = sum# 节点偏置选项:enabled, uniform, gaussbias_init_type = gaussbias_init_mean = 0.0bias_init_stdev = 1.0bias_max_value = 30.0bias_min_value = -30.0bias_mutate_power = 0.5bias_mutate_rate = 0.7bias_replace_rate = 0.1# 连接权重选项:enabled, uniform, gauss, adaptive, xavierweight_init_type = gaussweight_init_mean = 0.0weight_init_stdev = 1.0weight_max_value = 30.0weight_min_value = -30.0weight_mutate_power = 0.5weight_mutate_rate = 0.8weight_replace_rate = 0.1[DefaultReproduction]# 无性繁殖(无交叉)的概率asexual_reproduction_probability = 0.25[DefaultSpeciesSet]compatibility_threshold = 3.0[DefaultStagnation]species_fitness_func = maxmax_stagnation = 20species_elitism = 2[DefaultGenomeConfig]num_inputs = 1num_outputs = 1

回答:

将网络配置(num_inputs, num_outputs)移动到 [DefaultGenome] 部分(不是 DefaultGenomeConig)。

例如:

[NEAT]fitness_criterion     = maxfitness_threshold     = 3.9[DefaultGenome]# 网络参数num_hidden              = 0num_inputs              = 2num_outputs             = 1

Python-NEAT 需要在正确的部分找到这些参数。DefaultGenomeConfig 是对应于 DefaultGenome 部分的配置类名称。我认为这是混淆的来源。

这里有不错的文档:https://neat-python.readthedocs.io/en/latest/config_file.html

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注