我正在尝试从头开始实现感知器,并且遇到了我的训练功能方面的问题。经过训练后,我的体重最终以NaN值结束,我无法确定为什么会这样。
def train(self, observations, labels, epochs):
pop_size_multip = int(epochs/len(observations))
for num_of_iterations in range(pop_size_multip):
for label_index,training_observation in enumerate(observations):
#get weighted pred
weighted_pred = np.dot(training_observation, self.w) + self.b
#alter bias and alter weights by error value, lr, and observation vals
self.b += ((labels[label_index] - weighted_pred) * self.lr)
self.w += ((labels[label_index] - weighted_pred) * self.lr * training_observation)
None
有什么明显的错误吗?
注释 self.b =偏倚,self.lr =学习率,self.w =在-1和1之间的30个权重的np数组。训练集中的每个观察都包含30个特征。标签包含整数(0或1),weighted_pred是浮点数,self.lr是浮点数,training_observation有30个浮点数。
更新问题似乎源于最后一行的乘法运算。乘以training_observation(一个NP数组)会将self.w转换为一个数组数组,这并不是我的预期效果。我需要获取单个值的总和。