Я получил два dicts self.theta
и self.beta
, все значения которых равны fp и значение fp eta
, когда я попытался изменить его, как показано ниже:
self.theta[0]=self.theta[0]-eta*self.beta[0]
Он вернул TypeError: can't multiply sequence by non-int of type 'float'
. Если я поместил его в for l oop dict, он работал , но я не могу отдельно манипулировать одним ключом, например [0] выше, мне нужно завершить sh модификацию в для l oop в этом случае.
for key, value in self.theta.items():
self.theta[key]=self.theta[key]-eta*self.beta[key]
Интересно, можно ли напрямую изменить self.theta[0]
без получения ошибки? Массив numpy кажется обходным решением, но мне нужно сильно изменить код, поэтому я думаю только о методах torch.
ps Я знаю, что список не может умножаться на fp, но почему для l oop повторяет .items()
работает? Полные скрипты ниже:
beta = defaultdict(list)
theta = defaultdict(list)
layer = [500,300,100,3]
eta = 0.1
i = 0
for l in layer[0:-1]:
# print(l)
theta[l] = (torch.randn(l, layer[i+1]))/math.sqrt(l)
beta[l] = torch.Tensor(l, layer[i+1])
i += 1
theta[0] = theta[0] - eta * beta[0]
# TypeError: can't multiply sequence by non-int of type 'float'
for key, value in theta.items():
theta[key] = theta[key] - eta * beta[key]
print('theta:', theta[key])
# This is okay