Как исправить «объект с плавающей точкой не является подписным» - PullRequest
0 голосов
/ 12 февраля 2020

Здравствуйте, у меня проблема с моим кодом:

xor_inputs = [(0.0, 0.0), (0.0, 1.0), (1.0, 0.0), (1.0, 1.0)]
xor_outputs = [(0.0,), (1.0), (1.0), (0.0)]

def eval_genomes(genomes, config):
    for genomes_id, genome in genomes:
        genome.fitness = 4.0
        net = neat.nn.FeedForwardNetwork.create(genome, config)
        for xi, xo in zip(xor_inputs, xor_outputs):
            output = net.activate(xi)
            genome.fitness -= (output[0] - xo[0])**2

Когда я запускаю свой файл, у меня есть:

"genome.fitness - = (output [0] - xo [0]) ** 2

Ошибка типа: объект 'float' не может быть подписан "

Вы можете мне помочь? Спасибо !

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020
xor_outputs = [(0.0,), (1.0), (1.0), (0.0)]

Первым элементом в этом списке является кортеж с одним float из-за запятой. Тем не менее, остальные из них являются float.

Тебе не нужны здесь кортежи. Вы можете просто сделать

xor_outputs = [0.0, 1.0, 1.0, 0.0]

Затем изменить output[0] на output:

genome.fitness -= (output - xo[0])**2

Обратите внимание, что отслеживание ошибок, подобных этой, является большой частью работы программиста. Я предлагаю вам прочитать эту статью , чтобы получить множество советов, которые помогут вам отследить подобные проблемы. Эти инструменты не всегда решают проблему, но они могут помочь вам найти причину.

2 голосов
/ 12 февраля 2020

Я не знаю, какие у вас есть значения или что делает ваш код, но либо output, либо xo - это значение с плавающей запятой, а не значение массива, как вы думаете.

...