Список всегда сохраняет объект индекса, а не только тогда, когда он устанавливает новый лучший результат

#python #list #loops

#python #Список #циклы

Вопрос:

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

 for x in range(numberOfNeurons):
    for y in range(neuronTryNumber):
        neurons[x] = bestNeurons[x]
        trainingSample = random.randint(0, (len(images) - 1))  # Choose a random image in the sample file
        weights[x] = random.uniform(0.75, 1.25)
        neurons[x] = weights[x] * neurons[x]  # Modify a single neuron
        if float(arrayOfImages[trainingSample][x]) == 0.0 == float(neurons[x]) * float(arrayOfImages[trainingSample][x]):
            dataGapArray[y] = 1.0
        elif float(arrayOfImages[trainingSample][x]) > float(neurons[x]):
            dataGapArray[y] = float(neurons[y]) / float(arrayOfImages[trainingSample][x])
        elif float(arrayOfImages[trainingSample][x]) < float(neurons[x]):
            dataGapArray[y] = float(arrayOfImages[trainingSample][x]) / float(neurons[x])
        totalScore = (sum(dataGapArray) / numberOfNeurons)
        # print("Current score:", totalScore)
        if totalScore > bestScore:
            print("New Best Score!:", totalScore)
            bestNeurons[x] = neurons[x]
            totalScore = bestScore
 

Теперь я обычно должен видеть постоянно увеличивающийся новый высокий балл, указывающий на то, что код работоспособен, однако иногда я вижу снижение высоких баллов. Вот пример:

 New Best Score!: 0.7317308239784488
New Best Score!: 0.732005727847736
New Best Score!: 0.7315127892353739
New Best Score!: 0.7315127892353739
New Best Score!: 0.7249716540133387
 

Комментарии:

1. Если вы используете операторы печати для отладки, возможно, добавьте старый лучший результат перед его назначением? Т.е. print("New Best Score!:", totalScore, ': Old Best Score:', bestScore) . Таким образом, вы можете увидеть, был ли bestScore изменен. Если он был изменен, вам нужно выяснить, где это происходит.

Ответ №1:

Я думаю, вам нужно обновить лучший результат вместо общего результата в последней строке.

 bestScore = totalScore
 

Ответ №2:

Не видя всего кода, я предполагаю решение. Последняя строка должна быть

 bestScore = totalScore
 

Не уверен, что это сработает, но стоит попробовать