В этой функции exs
предполагается как список списков с плавающей точкой. Он представляет список всех моих обучающих примеров, каждый из которых представляет собой список (длина num_vars
) с плавающей точкой, представляющий ввод перцептрона. target
предполагается как список (длина num_vars
) чисел с плавающей точкой, представляющий коэффициенты целевой функции.
def gradDesc(exs, target, num_vars, n=0.5, its=256):
import random
weights = []
# Create and initialize delWeights to 0. Make its size num_vars.
delWeights = [0.0]*num_vars
# Initializes the weights to a real number in [-1,1]. Also makes weights
# contain num_vars entries.
for i in range(num_vars):
weights.append(random.uniform(-1,1))
# To make the printouts look nicer
print("Iteration\tError")
print("---------\t-----")
for i in range(its):
# Reset delWeights to 0
for j in range(num_vars):
delWeights[j] = 0
for e in exs:
# Plug e into the current hypothesis and get the output.
output = test_hypo(weights, e, num_vars)
print("delWeights: ", delWeights)
for dw in delWeights:
print("type(dw): ", type(dw))
delWeights[dw] = delWeights[dw] + n*(test_hypo(target, e, num_vars) - output)*e[dw]
for w in weights:
weights[w] = weights[w] + delWeights[dw]
# Print out the error every tenth iteration
if i % 10 == 0:
print(i + "\t" + train_err(exs, target, weights, num_vars))
# Print out the final hypothesis
print(i + "\t" + train_err(exs, target, weights, num_vars))
return weights
Проблема заключается в том, что когда я пытаюсь запустить это с заданным (конечным) тестовым вводом
trainers =
[[1, 2.7902232015508766, -4.624194135789617],
[1, -7.964359679418456, 2.1940274082288624],
[1, 8.445941538761794, -8.86567924774781],
... other sub-lists following this same format ...]
и
target = [-2, 1, 2]
Я получаю этот странный вывод:
gradDesc(trainers, target, num_vars)
Iteration Error
--------- -----
delWeights: [0, 0, 0]
type(dw): <class 'int'>
type(dw): <class 'int'>
type(dw): <class 'int'>
delWeights: [0.0, 0, 0]
type(dw): <class 'float'>
Traceback (most recent call last):
File "<ipython-input-19-97298b385113>", line 1, in <module>
gradDesc(trainers, target, num_vars)
File "C:/Users/Me/.spyder-py3/Machine Learning/gradDesc.py", line 107, in gradDesc
delWeights[dw] = delWeights[dw] + n*(test_hypo(target, e, num_vars) - output)*e[dw]
TypeError: list indices must be integers or slices, not float
Итак, мой вопрос: почему тип dw
меняется с int в число с плавающей точкой на второй итерации через for e in exs
l oop?