神经网络发展历程

在这里插入图片描述

单层感知器是最简单,最基本的

单层感知器结构

在这里插入图片描述

学习规则

在这里插入图片描述

注意这里公式W.T*X,而应该是X*W.T,左乘右乘结果不同

学习率

学习率决定了每次权值更新的大小,

  1. 学习率过大,会一下子改变过多,不稳定
  2. 过小,权值改变小,学习慢,迭代次数多
  3. η学习率(0<η≤1)

收敛条件

通常可以是:

  1. 误差小于某个预先设定的较小的值。
  2. 两次迭代之间的权值变化已经很小。
  3. 设定最大迭代次数,当迭代超过最大次数就停止。

存在问题

1.不能解决异或及更复杂的问题

代码实现

import numpy as np
import matplotlib.pyplot as plt

class SingleLayerPerceptron(object):
    def __init__(self, data, label,learing_rate):
        self.data = data
        self.label = label
        self.learning_rate = learing_rate
        self.W = (np.random.random(data.shape[0]) - 0.5) * 2
        self.output = 0
    #更新权值
    def update(self, data, label):
        self.output = np.sign(np.dot(data, self.W.T))
        # 取平均后,收敛得更快了
        delta_W = self.learning_rate * ((label - (self.output).T).dot(data)) / int(data.shape[0])
        self.W += delta_W
        #self.output = np.sign(np.dot(self.W, data))
    #训练
    def fit(self, data, label):
        n = 0
        while 1:
            self.update(data, label)
            print("epochs:", n)
            print(self.W)
            print("output:")
            o=np.sign(np.dot(data, self.W.T))#公式写错,应该是data*W,不是W*data结果不同
            if (o == (self.label).T).all():
                break
            n += 1

        return
    #获取权值
    def getW(self):
        return self.W
    #预测
    def predict(self, testData):
        return np.sign(np.dot(self.W, testData))
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐