机器学习——神经网络(一):单层感知机
神经网络——单层感知机感知机:preception,二元分类器,只有输入和输出层学习使用,不写原理了,直接贴代码(主要代码都是覃秉丰老师的课程中学习到的代码,但是很多地方我也做了注释和改进,适合我自己的学习)python 3.4 、jupyter这部分主要用到了numpy、matplotlib.pyplot库import numpy as npimport matplotlib.pyplot as
·
神经网络——单层感知机
感知机:preception,二元分类器,只有输入和输出层
学习使用,不写原理了,直接贴代码(主要代码都是覃秉丰老师的课程中学习到的代码,但是很多地方我也做了注释和改进,适合我自己的学习)
python 3.4 、jupyter
这部分主要用到了numpy、matplotlib.pyplot库
import numpy as np
import matplotlib.pyplot as plt
# 载入数据(解释一下:x_data第一列为偏置值(bias),第二列和第三列就是输入数据;y_data即训练标签)
x_data = np.array([[1,3,3],
[1,4,3],
[1,1,1],
[1,0,2]])
y_data = np.array([[1],
[1],
[-1],
[-1]])
# 初始化设置权值(为了符合矩阵计算变为三行一列,取值范围为-0.5到0.5)
w = (np.random.random([3,1])-0.5)
print(w)
# 输出:
#[[-0.16266462]
#[ 0.02265906]
#[-0.22597695]]
# 设置学习率learning rate(这个学习率后面再重点提一下,现在正常设置一下就ok,但是设置不好得到的结果可能很不理想)
lr = 0.11
# 神经网络的输出(output)
O = 0
# .dot是矩阵乘法,而常规乘法是对应的元素相乘
def update():
'''更新函数,调用一次执行一次'''
global x_data,y_data,w,lr
O = np.sign(np.dot(x_data,w)) # np.sign函数时numpy中的取数字符号
w_c = lr*(x_data.T.dot(y_data-O))/int(x_data.shape[0])# 分母求得误差的总合,分子表示sample的数量,结果表示平均误差
w = w+w_c
for i in range(100):
update() # 权值更新
O = np.sign(np.dot(x_data,w)) # 计算当前输出
print("epoch:",i)
print("w:",w)
if(O==y_data).all(): # 如果当前输出与实际输出相当,模型收敛,循环结束(。all是全部相等的意思)
print("#####################")
print("finished")
print("epoch:",i)
print("#####################")
break
# 正样本
x1 = [3,4]
y1 = [3,3]
# 负样本
x2 = [1,0]
y2 = [1,2]
# 计算分界线的斜率以及截距
k = -w[1]/w[2]
b = -w[0]/w[2]
print("k = ",k)
print("b = ",b)
xdata = (0,5)
plt.figure()
plt.plot(xdata,xdata*k+b,'r')
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()
结果:
![]()
解释:
sign()函数![]()
- 学习率
ilearning rate:控制模型的学习进度。更多请参考深度学习:学习率
Markdown小知识点:
- 使用html标签和markdown语句的嵌套也可以实现图片的居中操作等等
- 常规HTML使得图片居中
<div align='center'><img src=''></div>- 使用markdown的图片添加语句和HTML配合
<span><div align=‘center’>[名字](地址)</div></span>
放毒:
辉夜大小姐:![]()
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)