我的第一个感知机!!!(哭了
程序员文章站
2022-07-12 12:02:33
...
import numpy as np
import io
class Perceptron(object):
# 输入节点初始化权重和偏置常数b(假设与偏置常数相乘的输入值一直为0)
def __init__(self, inode_num, learning_rate):
# self.inode_vec = inode_vec # 初始化输入节点个数
self.weight = np.zeros(inode_num) # 初始化权重
self.learning_rate = learning_rate
self.bias = 0.0
#定义**函数
def activator(self, Sum): # 返回0/1
if Sum > 0:
outcome = 1
else:
outcome = 0
return outcome
#权重更新
def train(self, inode_vec, label):
ixw = np.hstack((inode_vec * self.weight, np.array([self.bias]))) # 计算输入与权重乘积后与偏置常数合并为一个向量
ixw_sum = ixw.sum() # 返回计算后的元素总和
output = self.activator(ixw_sum) # 总和输入**函数
delta = label - output # 计算误差
delta_weight = self.learning_rate * delta * inode_vec # 计算权重误差
delta_bias = self.learning_rate * delta # 计算偏置常数误差
self.weight += delta_weight # 权重更新
self.bias += delta_bias #偏置常数更新
def printout(self):
print('weight:', self.weight, 'bias:', self.bias,)
samples = io.open(r'C:\Users\john\PerceptronTest.csv','r') # 打开训练样本
list_samples = samples.readlines()
samples.close()
inode_num = 2
learning_rate = 0.1
n = Perceptron(inode_num, learning_rate)
iterate_num = 5 #设置迭代次数
for i in range(0,iterate_num):
for item in list_samples:
inode_vec = np.asfarray( item[:-1].split(',') )
label = inode_vec[2]
inode_vec = inode_vec[:2]
n.train(inode_vec, label)
n.printout()
上一篇: apollo纵向控制模块代码解析
推荐阅读
-
在一个php中,我定义了两个表单,当第一个表单提交后,生成了第二个表单,提交第二个表单后,就取不到第一个表单的数据了,该怎么办?
-
以此贴来庆祝小弟我在别人网页偷取到的第一个数据!
-
我的第一个PHP程序
-
我的第一个python web开发框架(31)——定制ORM(八)
-
我的第一个python web开发框架(28)——定制ORM(五)
-
我的第一个爬虫,爬取北京地区短租房信息
-
你不得不承认的史上最难炒的三个菜!我承认我哭了(超级难)
-
用了一加7T Pro之后 我的iPhone已成备用机
-
我的第一个netcore2.2 api项目搭建(三)
-
我的第一个python web开发框架(32)——接口代码重构