深度学习导论——单层感知器(python)实现
神经网络发展历程单层感知器是最简单,最基本的单层感知器结构学习规则注意这里公式W.T*X,而应该是X*W.T,左乘右乘结果不同学习率学习率决定了每次权值更新的大小,学习率过大,会一下子改变过多,不稳定过小,权值改变小,学习慢,迭代次数多η学习率(0<η≤1)收敛条件通常可以是:误差小于某个预先设定的较小的值。两次迭代之间的权值变化已经很小。设定最大迭代...
·
神经网络发展历程

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

学习规则

注意这里公式W.T*X,而应该是X*W.T,左乘右乘结果不同
学习率
学习率决定了每次权值更新的大小,
- 学习率过大,会一下子改变过多,不稳定
- 过小,权值改变小,学习慢,迭代次数多
- η学习率(0<η≤1)
收敛条件
通常可以是:
- 误差小于某个预先设定的较小的值。
- 两次迭代之间的权值变化已经很小。
- 设定最大迭代次数,当迭代超过最大次数就停止。
存在问题
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))
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)