感知器训练重量修改错误

时间:2018-12-06 19:41:25

标签: python machine-learning perceptron

我正在尝试从头开始实现感知器,并且遇到了我的训练功能方面的问题。经过训练后,我的体重最终以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转换为一个数组数组,这并不是我的预期效果。我需要获取单个值的总和。

0 个答案:

没有答案